From a27138cd3fb680b616c04fed02b73d630b681451 Mon Sep 17 00:00:00 2001 From: bd Date: Wed, 29 Jan 2025 22:11:47 -0500 Subject: Add fixup rules new binary operators --- src/backend/generator/assembly.scm | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src/backend/generator/assembly.scm') diff --git a/src/backend/generator/assembly.scm b/src/backend/generator/assembly.scm index 205900b..1593a07 100644 --- a/src/backend/generator/assembly.scm +++ b/src/backend/generator/assembly.scm @@ -6,13 +6,44 @@ mov-ir)) +(define r10 (reg-ir "r10")) +(define r11 (reg-ir "r11")) + (define (instrs-ir lst) (cons 'list (cons (list 'alloc-ir (abs (get-frame-size))) (merge-instr lst)))) +;; no change +(def-ir-nodes + neg-ir + not-ir + ret-ir) + (define (mov-ir src dst) + (handle-double-mem? 'mov-ir src dst)) + +(define (plus-ir src dst) + (handle-double-mem? 'plus-ir src dst)) + +(define (minus-ir src dst) + (handle-double-mem? 'minus-ir src dst)) + +(define (mult-ir src dst) + (if (eq? 'stack-ir (car dst)) + (list (list 'mov-ir dst r11) + (list 'mult-ir src r11) + (list 'mov-ir r11 dst)) + (list 'mult-ir src dst))) + +(define (div-ir src) + (if (eq? 'imm-ir (car src)) + (list (list 'mov-ir src r10) + (list 'div-ir r10)) + (list 'div-ir src))) + +(define (handle-double-mem? op src dst) (if (and (eq? 'stack-ir (car dst)) (eq? 'stack-ir (car src))) - (append (list (list 'mov-ir src (reg-ir "r10d"))) - (list (list 'mov-ir (reg-ir "r10d") dst))) - (list 'mov-ir src dst))) + (list (list 'mov-ir src r10) + (list op r10 dst)) + (list op src dst))) -- cgit v1.2.3