From f7dd9705d44b9cee5103b267797c0449d42319df Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 11 Nov 2023 14:40:25 +0200 Subject: WIP functions --- asm/ast_compiler_bootstrap.atk16 | 2 +- asm/bootstrap.atk16 | 2 +- asm/ext_std.py | 28 +++++++++------ asm/test_py_src.atk16 | 74 ++++++++++++++++++++++------------------ asm/test_py_src.atk16_optimized | 42 +++++++++++------------ asm/test_py_src.py | 14 +++----- 6 files changed, 85 insertions(+), 77 deletions(-) (limited to 'asm') 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 -; -; - ldi 1 RA +; +@label func +; stack frame: ['arg1', 'arg2', 'a'] + addi SP 1 SP +; (arg1) + ldi ${SP - 3} RA + ldr RA RA + spu RA + spo RA + ldi ${SP - 1} RB + str RA RB +; +; +; BinOp lhs +; (a) + ldi ${SP - 1} RA + ldr RA RA spu RA +; BinOp rhs +; (a) + ldi ${SP - 1} RA + ldr RA RA + spu RA + spo RB spo RA - addi RA 0 RA - bri zero If_false_branch_0 -; - ldi 2 RA + add RA RB RA spu RA - jpi If_end_branch_1 -@label If_false_branch_0 -; + subi SP 1 SP + rsr + +@label main +; stack frame: ['b'] + addi SP 1 SP +; +; + ldi 1 RA + spu RA +; ldi 3 RA spu RA -@label If_end_branch_1 -; -@label While_test_2 -; - ldi 3 RB - spu RB + csi func spo 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 + 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 -- cgit v1.3