|
69 | 69 | (define (compile-let xs es e c g t?) |
70 | 70 | (seq (compile-es es c g) |
71 | 71 | (compile-e e (append (reverse xs) c) g t?) |
72 | | - (Add rsp (*8 (length xs))))) |
| 72 | + (Add rsp (* 8 (length xs))))) |
73 | 73 |
|
74 | 74 | ;; Id [Listof Expr] CEnv GEnv Bool -> Asm |
75 | 75 | (define (compile-app f es c g t?) |
|
83 | 83 | (define (compile-app-tail e es c g) |
84 | 84 | (seq (compile-es (cons e es) c g) |
85 | 85 | (move-args (add1 (length es)) (length c)) |
86 | | - (Add rsp (*8 (length c))) |
87 | | - (Mov rax (Offset rsp (*8 (length es)))) |
| 86 | + (Add rsp (* 8 (length c))) |
| 87 | + (Mov rax (Offset rsp (* 8 (length es)))) |
88 | 88 | (assert-proc rax) |
89 | 89 | (Xor rax type-proc) |
90 | 90 | (Mov rax (Offset rax 0)) |
|
95 | 95 | (cond [(zero? off) (seq)] |
96 | 96 | [(zero? i) (seq)] |
97 | 97 | [else |
98 | | - (seq (Mov r8 (Offset rsp (*8 (sub1 i)))) |
99 | | - (Mov (Offset rsp (*8 (+ off (sub1 i)))) r8) |
| 98 | + (seq (Mov r8 (Offset rsp (* 8 (sub1 i)))) |
| 99 | + (Mov (Offset rsp (* 8 (+ off (sub1 i)))) r8) |
100 | 100 | (move-args (sub1 i) off))])) |
101 | 101 |
|
102 | 102 | ;; Expr [Listof Expr] CEnv GEnv -> Asm |
103 | 103 | ;; The return address is placed above the arguments, so callee pops |
104 | 104 | ;; arguments and return address is next frame |
105 | 105 | (define (compile-app-nontail e es c g) |
106 | 106 | (let ((r (gensym 'ret)) |
107 | | - (i (*8 (length es)))) |
| 107 | + (i (* 8 (length es)))) |
108 | 108 | (seq (Lea rax r) |
109 | 109 | (Push rax) |
110 | 110 | (compile-es (cons e es) (cons #f c) g) |
|
125 | 125 | (compile-es (cons e es) (cons #f c) g) |
126 | 126 | (compile-e el (append (make-list (add1 (length es)) #f) (cons #f c)) g #f) |
127 | 127 |
|
128 | | - (Mov r10 (Offset rsp (*8 (length es)))) |
| 128 | + (Mov r10 (Offset rsp (* 8 (length es)))) |
129 | 129 |
|
130 | 130 | (Mov r15 (length es)) |
131 | 131 | (let ((loop (gensym)) |
|
158 | 158 | (free-vars-to-heap fvs c 8) |
159 | 159 | (Mov rax rbx) ; return value |
160 | 160 | (Or rax type-proc) |
161 | | - (Add rbx (*8 (add1 (length fvs))))))) |
| 161 | + (Add rbx (* 8 (add1 (length fvs))))))) |
162 | 162 |
|
163 | 163 | ;; Lambda -> Id |
164 | 164 | (define (lambda-name l) |
|
237 | 237 | (seq (Mov rax (Offset rsp 0)) ; restore value being matched |
238 | 238 | i |
239 | 239 | (compile-e e (append cm c) g t?) |
240 | | - (Add rsp (*8 (length cm))) |
| 240 | + (Add rsp (* 8 (length cm))) |
241 | 241 | (Jmp done) |
242 | 242 | f |
243 | 243 | (Label next))]))) |
|
266 | 266 | (Cmp rax 0) |
267 | 267 | (Jne fail)) |
268 | 268 | (seq (Label fail) |
269 | | - (Add rsp (*8 (length cm))) |
| 269 | + (Add rsp (* 8 (length cm))) |
270 | 270 | (Jmp next)) |
271 | 271 | cm))] |
272 | 272 | [(PSymb s) |
|
275 | 275 | (Cmp rax r9) |
276 | 276 | (Jne fail)) |
277 | 277 | (seq (Label fail) |
278 | | - (Add rsp (*8 (length cm))) |
| 278 | + (Add rsp (* 8 (length cm))) |
279 | 279 | (Jmp next)) |
280 | 280 | cm))] |
281 | 281 | [(PLit l) |
282 | 282 | (let ((fail (gensym))) |
283 | 283 | (list (seq (Cmp rax (imm->bits l)) |
284 | 284 | (Jne fail)) |
285 | 285 | (seq (Label fail) |
286 | | - (Add rsp (*8 (length cm))) |
| 286 | + (Add rsp (* 8 (length cm))) |
287 | 287 | (Jmp next)) |
288 | 288 | cm))] |
289 | 289 | [(PAnd p1 p2) |
|
294 | 294 | (list |
295 | 295 | (seq (Push rax) |
296 | 296 | i1 |
297 | | - (Mov rax (Offset rsp (*8 (- (sub1 (length cm1)) (length cm))))) |
| 297 | + (Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
298 | 298 | i2) |
299 | 299 | (seq f1 f2) |
300 | 300 | cm2)])])] |
|
312 | 312 | i1) |
313 | 313 | (seq f1 |
314 | 314 | (Label fail) |
315 | | - (Add rsp (*8 (length cm))) ; haven't pushed anything yet |
| 315 | + (Add rsp (* 8 (length cm))) ; haven't pushed anything yet |
316 | 316 | (Jmp next)) |
317 | 317 | cm1))])] |
318 | 318 | [(PCons p1 p2) |
|
331 | 331 | (Push r8) ; push cdr |
332 | 332 | (Mov rax (Offset rax 8)) ; mov rax car |
333 | 333 | i1 |
334 | | - (Mov rax (Offset rsp (*8 (- (sub1 (length cm1)) (length cm))))) |
| 334 | + (Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm))))) |
335 | 335 | i2) |
336 | 336 | (seq f1 |
337 | 337 | f2 |
338 | 338 | (Label fail) |
339 | | - (Add rsp (*8 (length cm))) ; haven't pushed anything yet |
| 339 | + (Add rsp (* 8 (length cm))) ; haven't pushed anything yet |
340 | 340 | (Jmp next)) |
341 | 341 | cm2))])])] |
342 | 342 | [(PStruct n ps) |
|
357 | 357 | i) |
358 | 358 | (seq f |
359 | 359 | (Label fail) |
360 | | - (Add rsp (*8 (length cm))) |
| 360 | + (Add rsp (* 8 (length cm))) |
361 | 361 | (Jmp next)) |
362 | 362 | cm1))])] |
363 | 363 |
|
|
382 | 382 | (Cmp rax val-false) |
383 | 383 | (Je fail))) |
384 | 384 | (seq (Label fail) |
385 | | - (Add rsp (*8 (length cm))) |
| 385 | + (Add rsp (* 8 (length cm))) |
386 | 386 | (Jmp next)) |
387 | 387 | cm))])) |
388 | 388 |
|
|
399 | 399 | (match (compile-struct-patterns ps c g cm1 next (add1 i) cm0-len) |
400 | 400 | [(list is fs cmn) |
401 | 401 | (list |
402 | | - (seq (Mov rax (Offset rax (*8 i))) |
| 402 | + (seq (Mov rax (Offset rax (* 8 i))) |
403 | 403 | i1 |
404 | | - (Mov rax (Offset rsp (*8 (- (length cm1) cm0-len)))) |
| 404 | + (Mov rax (Offset rsp (* 8 (- (length cm1) cm0-len)))) |
405 | 405 | is) |
406 | 406 | (seq f1 fs) |
407 | 407 | cmn)])])])) |
0 commit comments