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


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

(define (mov-ir 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)))