summaryrefslogtreecommitdiff
path: root/src/modules/generator/assembly.scm
blob: 50e158ea571e9addc6a4b2bd681a3863d43d3cf9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(define-module (modules generator assembly)
  #:use-module (modules ast ir)
  #:use-module (modules utils assign-stack)
  #:use-module (modules utils merge-instructions)
  #:export (instrs
            mov))


(define (instrs lst)
  (cons 'list (cons (list 'alloc (abs (get-frame-size)))
                    (merge-instr lst))))

(define (mov dst src)
  (if (and (eq? 'stack (car dst))
           (eq? 'stack (car src)))
      (append (list (list 'mov (reg "r10") src))
              (list (list 'mov dst (reg "r10"))))
      (list 'mov dst src)))