aboutsummaryrefslogtreecommitdiff
path: root/assembler/fvm-as.scm
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-12-07 22:54:12 +0800
committerMistivia <i@mistivia.com>2024-12-07 22:54:12 +0800
commit3e6bf6091cc32cf11d61c0250bde9115208ad5d5 (patch)
treed451ea9afa53610fd98b574676b53d932994d130 /assembler/fvm-as.scm
parent22b08dbf32e9c5de1f10c19897422168100fa639 (diff)
simplify asm language
Diffstat (limited to 'assembler/fvm-as.scm')
-rw-r--r--assembler/fvm-as.scm9
1 files changed, 5 insertions, 4 deletions
diff --git a/assembler/fvm-as.scm b/assembler/fvm-as.scm
index 555f36f..a057a63 100644
--- a/assembler/fvm-as.scm
+++ b/assembler/fvm-as.scm
@@ -39,10 +39,10 @@
(define pseudo-op-table
(alist->hash-table
'((rel . (pc add))
- (bpick . ((imm 8) mul bp add ld))
- (spick . ((imm 8) mul sp add ld))
- (bput . ((imm 8) mul bp add st))
- (sput . ((imm 8) mul bp add st)))))
+ (ldarg . ((imm 2) add (imm 8) mul bp add ld))
+ (ldvar . ((imm -1) swap sub (imm 8) mul bp add ld))
+ (starg . ((imm 2) add (imm 8) mul bp add st))
+ (stvar . ((imm -1) swap sub (imm 8) mul bp add st)))))
(define (is-pseudo-op? sym)
(hash-table-ref/default pseudo-op-table sym #f))
@@ -60,6 +60,7 @@
(match lst
(() (reverse ret))
(('imm num . r) (loop r (cons (list 'imm num) ret)))
+ (((? number? x) . r) (loop r (cons (list 'imm x) ret)))
((x . r) (if (keyword? x)
(loop r
(cons (list 'tag