diff options
author | bd <bdunahu@operationnull.com> | 2025-01-29 22:54:34 -0500 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-01-29 22:54:34 -0500 |
commit | 74f8caa95f6a41a619ce54d193879cb240b9992f (patch) | |
tree | 67b26ca8093b44f42b94337748004edebe35441d /src/backend/emitter/traverse.scm | |
parent | a27138cd3fb680b616c04fed02b73d630b681451 (diff) |
Add emission procedures for binary ops, fix unary parsing error
Diffstat (limited to 'src/backend/emitter/traverse.scm')
-rw-r--r-- | src/backend/emitter/traverse.scm | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/backend/emitter/traverse.scm b/src/backend/emitter/traverse.scm index e88f207..15bda10 100644 --- a/src/backend/emitter/traverse.scm +++ b/src/backend/emitter/traverse.scm @@ -32,10 +32,25 @@ \tret\n") (define (neg-ir dst) - (format #f "\tnegl\t~a\n" dst)) + (emit-unary "negl" dst)) (define (not-ir dst) - (format #f "\tnotl\t~a\n" dst)) + (emit-unary "notl" dst)) + +(define (plus-ir src dst) + (emit-binary "addl" src dst)) + +(define (minus-ir src dst) + (emit-binary "subl" src dst)) + +(define (mult-ir src dst) + (emit-binary "imull" src dst)) + +(define (div-ir src) + (emit-unary "idivl" src)) + +(define (cdq-ir) + (format #f "\tcdq\n")) (define (alloc-ir size) (format #f "\tsubq\t$~a, %rsp\n" size)) @@ -48,3 +63,9 @@ (define (imm-ir int) (format #f "$~a" int)) + +(define (emit-unary instr dst) + (format #f "\t~a\t~a\n" instr dst)) + +(define (emit-binary instr src dst) + (format #f "\t~a\t~a, ~a\n" instr src dst)) |