summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-11 03:54:53 -0400
committerbd <bdunahu@operationnull.com>2025-04-11 03:54:53 -0400
commit5c9ac514d0556d875a12b2c7d3c4aedf23b9575b (patch)
tree66120f77bd62cde2e22b3aa340fe7d026e873081
parent1904e4e800dcf37becb3bba17c3a3aaca3c7a47c (diff)
Remove unnecessary imm ast node
-rw-r--r--src/emit.lisp2
-rw-r--r--src/parse.lisp4
-rw-r--r--t/parse.lisp34
3 files changed, 19 insertions, 21 deletions
diff --git a/src/emit.lisp b/src/emit.lisp
index a6e4bbb..213eb1a 100644
--- a/src/emit.lisp
+++ b/src/emit.lisp
@@ -52,8 +52,6 @@ concatenated with TYPE."
(util:format-as-binary val 5)
(error (format nil "~a is not a valid register id!~%" val))))
-(defun imm (val) val)
-
(defun l (l s)
(let ((d (util:get-label l)))
(- d s)))
diff --git a/src/parse.lisp b/src/parse.lisp
index f435c0a..e58dea0 100644
--- a/src/parse.lisp
+++ b/src/parse.lisp
@@ -52,7 +52,7 @@
(:lambda (e) (list 'emit::var e)))
(esrap:defrule immediate (or integer variable)
- (:lambda (e) (list 'emit::imm e)))
+ (:lambda (e) e))
(esrap:defrule dereference (and immediate #\( register #\))
(:destructure (i1 w1 r w2)
@@ -130,7 +130,7 @@ DESTRUCTURE-PATTERN is the list of non-terminals on the right side of the gramma
(esrap:defrule j-type-2 (and j-type-2-m space register)
(:destructure (m w r)
(declare (ignore w))
- `(emit::j ,m ,r (emit::imm 0))))
+ `(emit::j ,m ,r 0)))
(esrap:defrule instr (or r-type-1 r-type-2 r-type-3 i-type-1 i-type-2
i-type-3 j-type-1 j-type-2 j-type-3))
diff --git a/t/parse.lisp b/t/parse.lisp
index 993447f..7c084aa 100644
--- a/t/parse.lisp
+++ b/t/parse.lisp
@@ -32,9 +32,9 @@
'(emit::p
(emit::d)
(emit::x
- (emit::i "LOADV" (emit::rr 8) (emit::rr 9) (emit::imm 1))
- (emit::i "STORE" (emit::rr 3) (emit::rr 5) (emit::imm 3))
- (emit::i "ADDI" (emit::rr 4) (emit::rr 5) (emit::imm 2))))
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 9) 1)
+ (emit::i "STORE" (emit::rr 3) (emit::rr 5) 3)
+ (emit::i "ADDI" (emit::rr 4) (emit::rr 5) 2)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 1($9)
~tSTORE $5 3($3)~%~tADDI $5 $4 2~%")))))
@@ -43,9 +43,9 @@
'(emit::p
(emit::d)
(emit::x
- (emit::j "JMP" (emit::rr 3) (emit::imm 3))
+ (emit::j "JMP" (emit::rr 3) 3)
(emit::j "JRL" (emit::rr 0) (emit::l "FOO" 8))
- (emit::j "PUSH" (emit::rr 5) (emit::imm 0))))
+ (emit::j "PUSH" (emit::rr 5) 0)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tJMP 3($3)
~tJRL FOO~%~tPUSH $5~%")))))
@@ -54,7 +54,7 @@
'(emit::p
(emit::d)
(emit::x
- (emit::i "LOADV" (emit::rr 8) (emit::rr 3) (emit::imm -3))))
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 3) -3)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 -3($3)~%")))))
(test esrap-instr-type-i-vars
@@ -62,8 +62,8 @@
'(emit::p
(emit::d)
(emit::x
- (emit::i "LOADV" (emit::rr 8) (emit::rr 4) (emit::imm 2))
- (emit::i "STORE" (emit::rr 1) (emit::rr 5) (emit::imm 2))))
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 4) 2)
+ (emit::i "STORE" (emit::rr 1) (emit::rr 5) 2)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 2($4)
~tSTORE $5 2($1)~%")))))
@@ -72,9 +72,9 @@
'(emit::p
(emit::d)
(emit::x
- (emit::j "JMP" (emit::rr 3) (emit::imm 3))
+ (emit::j "JMP" (emit::rr 3) 3)
(emit::j "JRL" (emit::rr 0) (emit::l "FOO" 14))
- (emit::j "PUSH" (emit::rr 5) (emit::imm 0))))
+ (emit::j "PUSH" (emit::rr 5) 0)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%~%.TEXT~t~%JMP 3($3)~t
JRL FOO~t~%PUSH $5~%")))))
@@ -83,9 +83,9 @@ JRL FOO~t~%PUSH $5~%")))))
'(emit::p
(emit::d)
(emit::x
- (emit::j "JMP" (emit::rr 3) (emit::imm 3))
+ (emit::j "JMP" (emit::rr 3) 3)
(emit::j "JRL" (emit::rr 0) (emit::l "FOO" 17))
- (emit::j "PUSH" (emit::rr 5) (emit::imm 0))))
+ (emit::j "PUSH" (emit::rr 5) 0)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT;; dot dot dot
~tJMP 3($3) ;; this does things
~tJRL FOO~%~tPUSH $5~%")))))
@@ -131,7 +131,7 @@ H 3 5~%.TEXT~%")))))
(emit::d
-1)
(emit::x
- (emit::i "LOADV" (emit::rr -8) (emit::rr -3) (emit::imm -3))))
+ (emit::i "LOADV" (emit::rr -8) (emit::rr -3) -3)))
(esrap:parse 'parse:str->ast (format nil ".DATA~%~tm -1~%.TEXT~%~tLOADV $-8 -3($-3)~%")))))
(test esrap-data-full
@@ -140,12 +140,12 @@ H 3 5~%.TEXT~%")))))
(emit::d
1 2 3 4 3 0)
(emit::x
- (emit::i "ADDI" (emit::rr 0) (emit::rr 5) (emit::imm (emit::var "S")))
- (emit::i "ADDI" (emit::rr 0) (emit::rr 10) (emit::imm (emit::var "ARR")))
- (emit::i "ADDI" (emit::rr 0) (emit::rr 6) (emit::imm (emit::var "I")))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 5) (emit::var "S"))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 10) (emit::var "ARR"))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 6) (emit::var "I"))
(emit::j "JRL" (emit::rr 0) (emit::l "CMP" 23))
(emit::r "ADD" (emit::rr 10) (emit::rr 6) (emit::rr 9))
- (emit::i "ADDI" (emit::rr 6) (emit::rr 6) (emit::imm 1))
+ (emit::i "ADDI" (emit::rr 6) (emit::rr 6) 1)
(emit::r "CMP" (emit::rr 6) (emit::rr 5) (emit::rr 0))
(emit::j "BGT" (emit::rr 0) (emit::l "L" 27))))
(esrap:parse 'parse:str->ast (format nil "