summaryrefslogtreecommitdiff
path: root/src/backend/tacky/traverse.scm
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-01-29 19:51:40 -0500
committerbd <bdunahu@operationnull.com>2025-01-29 19:51:40 -0500
commit5ba1942302c6034c0bc7b3e6e2d3608e8f40fffa (patch)
treeee9c98e33f3540f050c25f1e4052557e8f888334 /src/backend/tacky/traverse.scm
parentaea28b9ece45eb0340a480b4f3eb0a4470fdc85b (diff)
tacky generation for binary operations
Diffstat (limited to 'src/backend/tacky/traverse.scm')
-rw-r--r--src/backend/tacky/traverse.scm14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/tacky/traverse.scm b/src/backend/tacky/traverse.scm
index 022d961..da63124 100644
--- a/src/backend/tacky/traverse.scm
+++ b/src/backend/tacky/traverse.scm
@@ -2,7 +2,7 @@
#:use-module (backend ast ir)
#:export (func-ir
stmt-ir
- ))
+ ))
(define (func-ir name instrs)
@@ -11,19 +11,21 @@
(define (stmt-ir val)
(list 'instrs-ir
(cons 'list (append (cdr val)
- (list (list 'ret-ir (car val)))))))
+ `((instr-ir ret-ir ,(car val)))))))
-(define (expr-ir op val)
- (make-instruction op (car val) (cdr val)))
+(define (expr-ir op . args)
+ ;; args is an alist--key: last reg, value: instrs
+ (make-instruction (apply append (map cdr args))
+ op (map car args)))
(define (const-ir val)
(cons (imm-ir val) '()))
-(define (make-instruction op src instrs)
+(define (make-instruction instrs op srcs)
(let ((dst (make-temporary)))
(cons dst
(append instrs
- (list (op src dst))))))
+ `((instr-ir ,op ,@srcs dst))))))
(define make-temporary
(let ((count 100))