diff options
Diffstat (limited to 'asm')
| -rw-r--r-- | asm/ast_compiler_bootstrap.atk16 | 2 | ||||
| -rw-r--r-- | asm/bootstrap.atk16 | 2 | ||||
| -rw-r--r-- | asm/ext_std.py | 28 | ||||
| -rw-r--r-- | asm/test_py_src.atk16 | 74 | ||||
| -rw-r--r-- | asm/test_py_src.atk16_optimized | 42 | ||||
| -rw-r--r-- | asm/test_py_src.py | 14 |
6 files changed, 85 insertions, 77 deletions
diff --git a/asm/ast_compiler_bootstrap.atk16 b/asm/ast_compiler_bootstrap.atk16 index ad401f1..7297c90 100644 --- a/asm/ast_compiler_bootstrap.atk16 +++ b/asm/ast_compiler_bootstrap.atk16 @@ -31,7 +31,7 @@ @address 0x0 ldi vt_stack_addr RA - ldr RA __STACK_POINTER + ldr RA SP jpi program_segment @address vector_table diff --git a/asm/bootstrap.atk16 b/asm/bootstrap.atk16 index 6363d71..4e5cd24 100644 --- a/asm/bootstrap.atk16 +++ b/asm/bootstrap.atk16 @@ -61,7 +61,7 @@ @address 0x0 ; set up stack pointer to point to beginning of stack segment ldi vt_stack_addr RA - ldr RA __STACK_POINTER + ldr RA SP jpi program_segment @address program_segment diff --git a/asm/ext_std.py b/asm/ext_std.py index fd18953..f4751a3 100644 --- a/asm/ext_std.py +++ b/asm/ext_std.py @@ -67,29 +67,35 @@ def expand_nop() -> ExpandResult: return [["ali", "al_plus", "RA", "0", "RA"]] def expand_spu(reg: str) -> ExpandResult: - return [["str", reg, "__STACK_POINTER"]] + expand_inc("__STACK_POINTER") + return [["str", reg, "SP"]] + expand_inc("SP") -def expand_spo(reg: str): - return expand_dec("__STACK_POINTER") + [["ldr", "__STACK_POINTER", reg]] +def expand_spo(reg: str) -> ExpandResult: + return expand_dec("SP") + [["ldr", "SP", reg]] + +def expand_sinc(imm: str) -> ExpandResult: + return expand_addi("SP", imm, "SP") + +def expand_sdec(imm: str) -> ExpandResult: + return expand_subi("SP", imm, "SP") def expand_csr(addr_reg: str): return [ - ["lpc", "__CSR_SCRATCH"], - *expand_addi("__CSR_SCRATCH", "4", "__CSR_SCRATCH"), - *expand_spu("__CSR_SCRATCH"), + ["lpc", "CSR_SCRATCH"], + *expand_addi("CSR_SCRATCH", "4", "CSR_SCRATCH"), + *expand_spu("CSR_SCRATCH"), ["jpr", addr_reg] ] def expand_csi(addr_imm: str): return [ - ["lpc", "__CSR_SCRATCH"], - *expand_addi("__CSR_SCRATCH", "4", "__CSR_SCRATCH"), - *expand_spu("__CSR_SCRATCH"), + ["lpc", "CSR_SCRATCH"], + *expand_addi("CSR_SCRATCH", "4", "CSR_SCRATCH"), + *expand_spu("CSR_SCRATCH"), ["jpi", addr_imm] ] def expand_rsr(): - return expand_spo("__CSR_SCRATCH") + [["jpr", "__CSR_SCRATCH"]] + return expand_spo("CSR_SCRATCH") + [["jpr", "CSR_SCRATCH"]] def stack_stash(*rs: str): @@ -140,6 +146,8 @@ expansions: OpExpansionDict = { "nop": expand_nop, "spu": expand_spu, "spo": expand_spo, + "sinc": expand_sinc, + "sdec": expand_sdec, "csr": expand_csr, "csi": expand_csi, "rsr": expand_rsr, diff --git a/asm/test_py_src.atk16 b/asm/test_py_src.atk16 index c035b72..ca44267 100644 --- a/asm/test_py_src.atk16 +++ b/asm/test_py_src.atk16 @@ -31,7 +31,7 @@ @address 0x0 ldi vt_stack_addr RA - ldr RA __STACK_POINTER + ldr RA SP jpi program_segment @address vector_table @@ -75,42 +75,48 @@ -@label main -; <ast.If object at 0x1013c1e40> -; <ast.Constant object at 0x1013c20b0> - ldi 1 RA +; <ast.FunctionDef object at 0x100c7b310> +@label func +; stack frame: ['arg1', 'arg2', 'a'] + addi SP 1 SP +; <ast.Name object at 0x100c7aef0> (arg1) + ldi ${SP - 3} RA + ldr RA RA + spu RA + spo RA + ldi ${SP - 1} RB + str RA RB +; <ast.Return object at 0x100c7b0a0> +; <ast.BinOp object at 0x100c7b370> +; BinOp lhs <ast.BinOp object at 0x100c7b370> +; <ast.Name object at 0x100c7b3a0> (a) + ldi ${SP - 1} RA + ldr RA RA spu RA +; BinOp rhs <ast.BinOp object at 0x100c7b370> +; <ast.Name object at 0x100c7b3d0> (a) + ldi ${SP - 1} RA + ldr RA RA + spu RA + spo RB spo RA - addi RA 0 RA - bri zero If_false_branch_0 -; <ast.Constant object at 0x1013c2110> - ldi 2 RA + add RA RB RA spu RA - jpi If_end_branch_1 -@label If_false_branch_0 -; <ast.Constant object at 0x1013c2170> + subi SP 1 SP + rsr + +@label main +; stack frame: ['b'] + addi SP 1 SP +; <ast.Call object at 0x100c7b520> +; <ast.Constant object at 0x100c7b580> + ldi 1 RA + spu RA +; <ast.Constant object at 0x100c7b5b0> ldi 3 RA spu RA -@label If_end_branch_1 -; <ast.While object at 0x1013c2230> -@label While_test_2 -; <ast.Constant object at 0x1013c2260> - ldi 3 RB - spu RB + csi func spo RA - addi RA 0 RA - bri zero While_else_3 -; <ast.Constant object at 0x1013c22c0> - ldi 4 RB - spu RB -; <ast.Break object at 0x1013c22f0> - jpi While_end_4 -; <ast.Constant object at 0x1013c2350> - ldi 5 RB - spu RB - jpi While_test_2 -@label While_else_3 -; <ast.Constant object at 0x1013c2470> - ldi 6 RB - spu RB -@label While_end_4
\ No newline at end of file + ldi ${SP - 1} RB + str RA RB + subi SP 1 SP diff --git a/asm/test_py_src.atk16_optimized b/asm/test_py_src.atk16_optimized index 673800b..4a65ec4 100644 --- a/asm/test_py_src.atk16_optimized +++ b/asm/test_py_src.atk16_optimized @@ -24,7 +24,7 @@ @let gr_sprite_mode 0b10 @address 0x0 ldi vt_stack_addr RA - ldr RA __STACK_POINTER + ldr RA SP jpi program_segment @address vector_table keyboard_isr @@ -58,28 +58,28 @@ ldi gr_disabled_mode RB str RB RA jpi main +@label func + addi SP 1 SP + ldi ${SP - 3} RA + ldr RA RA + ldi ${SP - 1} RB + str RA RB + ldi ${SP - 1} RA + ldr RA RA + ldi ${SP - 1} RB + ldr RB RB + add RA RB RA + spu RA + subi SP 1 SP + rsr @label main + addi SP 1 SP ldi 1 RA - addi RA 0 RA - bri zero If_false_branch_0 - ldi 2 RA spu RA - jpi If_end_branch_1 -@label If_false_branch_0 ldi 3 RA spu RA -@label If_end_branch_1 -@label While_test_2 - ldi 3 RA - addi RA 0 RA - bri zero While_else_3 - ldi 4 RB - spu RB - jpi While_end_4 - ldi 5 RB - spu RB - jpi While_test_2 -@label While_else_3 - ldi 6 RB - spu RB -@label While_end_4
\ No newline at end of file + csi func + spo RA + ldi ${SP - 1} RB + str RA RB + subi SP 1 SP
\ No newline at end of file diff --git a/asm/test_py_src.py b/asm/test_py_src.py index 48a5cac..9af944e 100644 --- a/asm/test_py_src.py +++ b/asm/test_py_src.py @@ -1,16 +1,10 @@ import atk16 -if True: - 2 -else: - 3 +def func(arg1: int, arg2: int) -> int: + a = arg1 + return a + a -while 3: - 4 - break - 5 -else: - 6 +b = func(1, 3) # TEXT_MODE: atk16.ConstInt = 1 # GRAPHICS_MODE_ADDR: atk16.ConstInt = 0x17 |
