aboutsummaryrefslogtreecommitdiffstats
path: root/src/ext_std.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
commit56fd37c60eb0d58ed4762340ddc85b74347bcd71 (patch)
treed4d6362cb591ddb9658536d831f8c4433089189f /src/ext_std.py
parent16b4fbd209d71bdb1a066bacd03a9ccd1cf3d16c (diff)
Do stuff
Diffstat (limited to 'src/ext_std.py')
-rw-r--r--src/ext_std.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/ext_std.py b/src/ext_std.py
index c0a53c1..e78f5cc 100644
--- a/src/ext_std.py
+++ b/src/ext_std.py
@@ -6,6 +6,12 @@ def make_add(meta: Meta, left: str, right: str, target: str) -> list[int]:
def make_sub(meta: Meta, left: str, right: str, target: str) -> list[int]:
return make_alr(meta, "al_minus", left, right, target)
+def make_addi(meta: Meta, left: str, imm: str, target: str) -> list[int]:
+ return make_ali(meta, "al_plus", left, imm, target)
+
+def make_subi(meta: Meta, left: str, imm: str, target: str) -> list[int]:
+ return make_ali(meta, "al_minus", left, imm, target)
+
def make_and(meta: Meta, left: str, right: str, target: str) -> list[int]:
return make_alr(meta, "al_and", left, right, target)
@@ -43,37 +49,39 @@ def make_mov(meta: Meta, from_reg: str, to_reg: str) -> list[int]:
return make_ali(meta, "al_plus", from_reg, "0", to_reg)
def make_spu(meta: Meta, reg: str) -> list[int]:
- sp_reg = meta.options["stack_pointer"]
+ sp_reg = meta.options.stack_pointer
str_word = make_str(meta, reg, sp_reg)
inc_word = make_inc(meta, sp_reg)
return str_word + inc_word
def make_spo(meta: Meta, reg: str) -> list[int]:
- sp_reg = meta.options["stack_pointer"]
+ sp_reg = meta.options.stack_pointer
dec_word = make_dec(meta, sp_reg)
ldr_word = make_ldr(meta, reg, sp_reg)
return dec_word + ldr_word
def make_csr(meta: Meta, addr_reg: str) -> list[int]:
- lpc_word = make_lpc(meta, meta.options["csr_scratch"])
- spu_word = make_spu(meta, meta.options["csr_scratch"])
+ lpc_word = make_lpc(meta, meta.options.csr_scratch)
+ spu_word = make_spu(meta, meta.options.csr_scratch)
jpr_word = make_jpr(meta, addr_reg)
return lpc_word + spu_word + jpr_word
def make_csi(meta: Meta, addr_imm: str) -> list[int]:
- lpc_word = make_lpc(meta, meta.options["csr_scratch"])
- spu_word = make_spu(meta, meta.options["csr_scratch"])
+ lpc_word = make_lpc(meta, meta.options.csr_scratch)
+ spu_word = make_spu(meta, meta.options.csr_scratch)
jpi_word = make_jpi(meta, addr_imm)
return lpc_word + spu_word + jpi_word
def make_rsr(meta: Meta) -> list[int]:
- spo_word = make_spo(meta, meta.options["csr_scratch"])
- jpr_word = make_jpr(meta, meta.options["csr_scratch"])
+ spo_word = make_spo(meta, meta.options.csr_scratch)
+ jpr_word = make_jpr(meta, meta.options.csr_scratch)
return spo_word + jpr_word
operations = {
"add": make_add,
"sub": make_sub,
+ "addi": make_addi,
+ "subi": make_subi,
"and": make_and,
"or": make_or,
"xor": make_xor,