aboutsummaryrefslogtreecommitdiffstats
path: root/asm
diff options
context:
space:
mode:
Diffstat (limited to 'asm')
-rw-r--r--asm/ast_compiler_bootstrap.atk162
-rw-r--r--asm/bootstrap.atk162
-rw-r--r--asm/ext_std.py28
-rw-r--r--asm/test_py_src.atk1674
-rw-r--r--asm/test_py_src.atk16_optimized42
-rw-r--r--asm/test_py_src.py14
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