From f927b5126ef7e219bc5d4aa875523df1f6ea6d83 Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Wed, 28 Sep 2022 11:32:11 -0400 Subject: Some basic asm generation around blocks --- tnslc/compile/compile.tnsl | 33 +++++++++++++++++++++++++++++---- tnslc/compile/isa_x86.tnsl | 3 +++ 2 files changed, 32 insertions(+), 4 deletions(-) (limited to 'tnslc/compile') diff --git a/tnslc/compile/compile.tnsl b/tnslc/compile/compile.tnsl index 2439c76..7df7acb 100644 --- a/tnslc/compile/compile.tnsl +++ b/tnslc/compile/compile.tnsl @@ -21,11 +21,26 @@ ;/ +;{}{}charp COMMON_ASM = { + "\tret" +} + /; compile_block (~int cur, ~{}Token data, ~{}charp hsec, csec, dsec) - ;cur`++ + ;{}charp name = {} + /; loop (cur`++; cur` < len data`) [cur`++] + /; if (data`{cur`}.token_type == TOKEN_TYPE.DEFWORD && len name == 0) + ;name = data`{cur`}.data` + ;add_strings(csec, ~name) + ;csec`.append(':') + ;csec`.append('\n') + ;; else + ;break + ;/ + ;/ /; loop (cur` < len data`) [cur`++] - /; if (string_equate(data`{cur`}.data`, ";/") || string_equate(data`{cur`}.data`, ";;")) + /; if (string_equate(data`{cur`}.data`, ";/")) + ;add_strings(csec, ~(tnslc.COMMON_ASM{0})) ;break ;; else if (string_equate(data`{cur`}.data`, "/;")) ;bool ch = true @@ -38,22 +53,32 @@ ;/ ;; else if (string_equate(data`{cur`}.data`, ";")) ;compile_statement(cur, data, hsec, csec, dsec) + ;; else + ;tnsl.io.print("Failed to compile token [compile_block]: ") + ;data`{cur`}.print() + ;tnsl.io.println("") + ;break ;/ ;/ + + ;csec`.append('\n') ;/ /; compile_statement (~int cur, ~{}Token data, ~{}charp hsec, csec, dsec) ;cur`++ /; if (cur` < len data`) /; if (string_equate(data`{cur`}.data`, "asm")) - ;{}charp raw_asm = unquote_string(data`{cur` + 1}.data`) + ;cur`++ + ;{}charp raw_asm = unquote_string(data`{cur`}.data`) + ;raw_asm.append('\n') + ;csec`.append('\t') ;add_strings(csec, ~raw_asm) ;/ ;/ ;/ /; do_compile ({}charp file, ~{}Token data) - ;{}charp hsec = ".global _start\n" + ;{}charp hsec = ".global main\n" ;{}charp csec = ".text\n" ;{}charp dsec = ".data\n" diff --git a/tnslc/compile/isa_x86.tnsl b/tnslc/compile/isa_x86.tnsl index bc5d43f..a5d9b0a 100644 --- a/tnslc/compile/isa_x86.tnsl +++ b/tnslc/compile/isa_x86.tnsl @@ -14,3 +14,6 @@ EXPRESS OR IMPLIED #/ +/; add_asm + +;/ \ No newline at end of file -- cgit v1.2.3