aboutsummaryrefslogtreecommitdiffstats
path: root/src/ext_std.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-11 14:05:41 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-11 14:05:41 +0300
commitda14e7ca7f31cb4b9a975dbe349fb4d385592b9c (patch)
treeea60a83ccb64af33a48f13839e6145b7c97236d2 /src/ext_std.py
parent9a6001ad380e83a545188b58145387593b117b48 (diff)
Fix bugs
Diffstat (limited to 'src/ext_std.py')
-rw-r--r--src/ext_std.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/ext_std.py b/src/ext_std.py
index a6b175a..5f41f60 100644
--- a/src/ext_std.py
+++ b/src/ext_std.py
@@ -52,16 +52,25 @@ def expand_spu(reg: str) -> ExpandResult:
return [["str", reg, "__STACK_POINTER"]] + expand_inc("__STACK_POINTER")
def expand_spo(reg: str):
- return expand_dec("__STACK_POINTER") + [["ldr", reg, "__STACK_POINTER"]]
+ return expand_dec("__STACK_POINTER") + [["ldr", "__STACK_POINTER", reg]]
def expand_csr(addr_reg: str):
- return [["lpc", "__STACK_POINTER"]] + expand_spu("__STACK_POINTER") + [["jpr", addr_reg]]
+ return [
+ ["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", "__STACK_POINTER"]] + expand_spu("__STACK_POINTER") + [["jpr", addr_imm]]
-
+ return [
+ ["lpc", "__CSR_SCRATCH"],
+ *expand_addi("__CSR_SCRATCH", "4", "__CSR_SCRATCH"),
+ *expand_spu("__CSR_SCRATCH"),
+ ["jpi", addr_imm]
+ ]
def expand_rsr():
- return expand_spo("__STACK_POINTER") + [["jpr", "__CSR_SCRATCH"]]
+ return expand_spo("__CSR_SCRATCH") + [["jpr", "__CSR_SCRATCH"]]
expansions: OpExpansionDict = {
"add": expand_add,