summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/emitter/traverse.scm25
-rw-r--r--src/backend/generator/assembly.scm4
-rw-r--r--src/backend/generator/expansion.scm2
3 files changed, 26 insertions, 5 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))
diff --git a/src/backend/generator/assembly.scm b/src/backend/generator/assembly.scm
index 1593a07..d7167d7 100644
--- a/src/backend/generator/assembly.scm
+++ b/src/backend/generator/assembly.scm
@@ -6,8 +6,8 @@
mov-ir))
-(define r10 (reg-ir "r10"))
-(define r11 (reg-ir "r11"))
+(define r10 (reg-ir "r10d"))
+(define r11 (reg-ir "r11d"))
(define (instrs-ir lst)
(cons 'list (cons (list 'alloc-ir (abs (get-frame-size)))
diff --git a/src/backend/generator/expansion.scm b/src/backend/generator/expansion.scm
index c9e4709..eb8b297 100644
--- a/src/backend/generator/expansion.scm
+++ b/src/backend/generator/expansion.scm
@@ -20,7 +20,7 @@
(define (handle-ret src)
(list (list 'mov-ir src eax)
- (list 'ret-ir src)))
+ (list 'ret-ir)))
(define (handle-unary op src dst)
(list (list 'mov-ir src dst)