wip: Improve register allocations and its test coverage
This commit is contained in:
parent
8a4948475c
commit
195cfbd248
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)))))))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue