From 195cfbd2486f75d6bf309eb6f1b5f16af661f39e Mon Sep 17 00:00:00 2001 From: Enrico Lumetti Date: Sun, 21 Aug 2022 01:35:30 +0200 Subject: [PATCH] wip: Improve register allocations and its test coverage --- allocate-regs.rkt | 19 +++++++++++++------ tests/test-allocate-regs.rkt | 12 ++++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/allocate-regs.rkt b/allocate-regs.rkt index 55b253c..4df77d7 100644 --- a/allocate-regs.rkt +++ b/allocate-regs.rkt @@ -34,20 +34,27 @@ (define reg-dest (generate-regs (length instr-args) (length instr-dest))) (append (generate-ldr instr-args stack-map) (list (AArch64-instr-from-dest-args instr reg-dest reg-args)) - (generate-str instr-dest stack-map)))) + (if (empty? instr-dest) + '() + (generate-str (generate-reg-n (length instr-args)) + (car instr-dest) + stack-map))))) (define (generate-regs start len) - (map (lambda (i) - (Reg (string->symbol (string-append "x" (number->string i))))) + (map generate-reg-n (range start (+ start len)))) - + +(define (generate-reg-n n) + (Reg (string->symbol (string-append "x" (number->string n))))) + (define (generate-ldr var-list stack-map) (for/list ([var var-list] [reg (generate-regs 0 (length var-list))]) (Ldr (AMOffset 'sp (hash-ref stack-map (Var-var-name var))) reg))) -(define (generate-str var-list stack-map) - (list)) +(define (generate-str reg dest-var stack-map) + (list + (Str reg (AMOffset 'sp (hash-ref stack-map (Var-var-name dest-var)))))) ; generate stack read/writes and allocate registers for diff --git a/tests/test-allocate-regs.rkt b/tests/test-allocate-regs.rkt index 0e98939..c937120 100644 --- a/tests/test-allocate-regs.rkt +++ b/tests/test-allocate-regs.rkt @@ -30,5 +30,13 @@ -16) (list (Ldr (AMOffset 'sp 0) (Reg 'x0)) (Ldr (AMOffset 'sp -8) (Reg 'x1)) - (Add (Reg 'x0) (Reg 'x1) (Reg 'x2)))))))) - + (Add (Reg 'x0) (Reg 'x1) (Reg 'x2)) + (Str (Reg 'x2) (AMOffset 'sp -16))))) + (test-case + "RetDefault" + (check-equal? + (allocate-regs-std-instr! (RetDefault) + (make-hash) + 0) + (list (RetDefault))))))) +