|
39 | 39 | (define (compile-variable x c) |
40 | 40 | (match (lookup x c) |
41 | 41 | [#f (error "unbound variable")] ;(seq (Lea rax (symbol->label x)))] |
42 | | - [i (seq (Mov rax (Offset rsp i)))])) |
| 42 | + [i (seq (Mov rax (Mem rsp i)))])) |
43 | 43 |
|
44 | 44 | ;; Op0 CEnv -> Asm |
45 | 45 | (define (compile-prim0 p c) |
|
103 | 103 | (seq (compile-es (cons e es) c) |
104 | 104 | (move-args (add1 (length es)) (length c)) |
105 | 105 | (Add rsp (* 8 (length c))) |
106 | | - (Mov rax (Offset rsp (* 8 (length es)))) |
| 106 | + (Mov rax (Mem rsp (* 8 (length es)))) |
107 | 107 | (assert-proc rax) |
108 | 108 | (Xor rax type-proc) |
109 | | - (Mov rax (Offset rax 0)) |
| 109 | + (Mov rax (Mem rax 0)) |
110 | 110 | (Jmp rax))) |
111 | 111 |
|
112 | 112 | ;; Integer Integer -> Asm |
113 | 113 | (define (move-args i off) |
114 | 114 | (cond [(zero? off) (seq)] |
115 | 115 | [(zero? i) (seq)] |
116 | 116 | [else |
117 | | - (seq (Mov r8 (Offset rsp (* 8 (sub1 i)))) |
118 | | - (Mov (Offset rsp (* 8 (+ off (sub1 i)))) r8) |
| 117 | + (seq (Mov r8 (Mem rsp (* 8 (sub1 i)))) |
| 118 | + (Mov (Mem rsp (* 8 (+ off (sub1 i)))) r8) |
119 | 119 | (move-args (sub1 i) off))])) |
120 | 120 |
|
121 | 121 | ;; Expr [Listof Expr] CEnv -> Asm |
|
127 | 127 | (seq (Lea rax r) |
128 | 128 | (Push rax) |
129 | 129 | (compile-es (cons e es) (cons #f c)) |
130 | | - (Mov rax (Offset rsp i)) |
| 130 | + (Mov rax (Mem rsp i)) |
131 | 131 | (assert-proc rax) |
132 | 132 | (Xor rax type-proc) |
133 | | - (Mov rax (Offset rax 0)) ; fetch the code label |
| 133 | + (Mov rax (Mem rax 0)) ; fetch the code label |
134 | 134 | (Jmp rax) |
135 | 135 | (Label r)))) |
136 | 136 |
|
137 | 137 | ;; Id [Listof Id] Expr CEnv -> Asm |
138 | 138 | (define (compile-lam f xs e c) |
139 | 139 | (let ((fvs (fv (Lam f xs e)))) |
140 | 140 | (seq (Lea rax (symbol->label f)) |
141 | | - (Mov (Offset rbx 0) rax) |
| 141 | + (Mov (Mem rbx 0) rax) |
142 | 142 | (free-vars-to-heap fvs c 8) |
143 | 143 | (Mov rax rbx) ; return value |
144 | 144 | (Or rax type-proc) |
|
150 | 150 | (match fvs |
151 | 151 | ['() (seq)] |
152 | 152 | [(cons x fvs) |
153 | | - (seq (Mov r8 (Offset rsp (lookup x c))) |
154 | | - (Mov (Offset rbx off) r8) |
| 153 | + (seq (Mov r8 (Mem rsp (lookup x c))) |
| 154 | + (Mov (Mem rbx off) r8) |
155 | 155 | (free-vars-to-heap fvs c (+ off 8)))])) |
156 | 156 |
|
157 | 157 | ;; [Listof Lam] -> Asm |
|
169 | 169 | [(Lam f xs e) |
170 | 170 | (let ((env (append (reverse fvs) (reverse xs) (list #f)))) |
171 | 171 | (seq (Label (symbol->label f)) |
172 | | - (Mov rax (Offset rsp (* 8 (length xs)))) |
| 172 | + (Mov rax (Mem rsp (* 8 (length xs)))) |
173 | 173 | (Xor rax type-proc) |
174 | 174 | (copy-env-to-stack fvs 8) |
175 | 175 | (compile-e e env #t) |
|
182 | 182 | (match fvs |
183 | 183 | ['() (seq)] |
184 | 184 | [(cons _ fvs) |
185 | | - (seq (Mov r9 (Offset rax off)) |
| 185 | + (seq (Mov r9 (Mem rax off)) |
186 | 186 | (Push r9) |
187 | 187 | (copy-env-to-stack fvs (+ 8 off)))])) |
188 | 188 |
|
|
218 | 218 | (let ((next (gensym))) |
219 | 219 | (match (compile-pattern p '() next) |
220 | 220 | [(list i cm) |
221 | | - (seq (Mov rax (Offset rsp 0)) ; restore value being matched |
| 221 | + (seq (Mov rax (Mem rsp 0)) ; restore value being matched |
222 | 222 | i |
223 | 223 | (compile-e e (append cm c) t?) |
224 | 224 | (Add rsp (* 8 (length cm))) |
|
254 | 254 | cm))] |
255 | 255 | [(PSymb s) |
256 | 256 | (let ((ok (gensym))) |
257 | | - (list (seq (Lea r9 (Plus (symbol->data-label s) type-symb)) |
| 257 | + (list (seq (Lea r9 (Mem (symbol->data-label s) type-symb)) |
258 | 258 | (Cmp rax r9) |
259 | 259 | (Je ok) |
260 | 260 | (Add rsp (* 8 (length cm))) |
|
277 | 277 | (list |
278 | 278 | (seq (Push rax) |
279 | 279 | i1 |
280 | | - (Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
| 280 | + (Mov rax (Mem rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
281 | 281 | i2) |
282 | 282 | cm2)])])] |
283 | 283 | [(PBox p) |
|
293 | 293 | (Jmp next) |
294 | 294 | (Label ok) |
295 | 295 | (Xor rax type-box) |
296 | | - (Mov rax (Offset rax 0)) |
| 296 | + (Mov rax (Mem rax 0)) |
297 | 297 | i1) |
298 | 298 | cm1))])] |
299 | 299 | [(PCons p1 p2) |
|
311 | 311 | (Jmp next) |
312 | 312 | (Label ok) |
313 | 313 | (Xor rax type-cons) |
314 | | - (Mov r8 (Offset rax 0)) |
| 314 | + (Mov r8 (Mem rax 0)) |
315 | 315 | (Push r8) ; push cdr |
316 | | - (Mov rax (Offset rax 8)) ; mov rax car |
| 316 | + (Mov rax (Mem rax 8)) ; mov rax car |
317 | 317 | i1 |
318 | | - (Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
| 318 | + (Mov rax (Mem rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
319 | 319 | i2) |
320 | 320 | cm2))])])])) |
0 commit comments