File tree Expand file tree Collapse file tree 21 files changed +74
-124
lines changed
Expand file tree Collapse file tree 21 files changed +74
-124
lines changed Original file line number Diff line number Diff line change 1818 (match e
1919 [(Lit i) (seq (Mov rax i))]
2020 [(Prim1 p e) (compile-prim1 p e)]
21- [(IfZero e1 e2 e3)
22- (compile-ifzero e1 e2 e3)]))
21+ [(IfZero e1 e2 e3) (compile-ifzero e1 e2 e3)]))
2322
2423;; Op1 Expr -> Asm
2524(define (compile-prim1 p e)
Original file line number Diff line number Diff line change 1919 (match e
2020 [(Lit d) (compile-datum d)]
2121 [(Prim1 p e) (compile-prim1 p e)]
22- [(If e1 e2 e3)
23- (compile-if e1 e2 e3)]))
22+ [(If e1 e2 e3) (compile-if e1 e2 e3)]))
2423
2524;; Datum -> Asm
2625(define (compile-datum d)
Original file line number Diff line number Diff line change 1919 (match e
2020 [(Lit d) (compile-datum d)]
2121 [(Prim1 p e) (compile-prim1 p e)]
22- [(If e1 e2 e3)
23- (compile-if e1 e2 e3)]))
22+ [(If e1 e2 e3) (compile-if e1 e2 e3)]))
2423
2524;; Datum -> Asm
2625(define (compile-datum d)
Original file line number Diff line number Diff line change 88(define (compile-op0 p)
99 (match p
1010 ['void (seq (Mov rax (value->bits (void))))]
11- ['read-byte (seq (Call 'read_byte ))]
12- ['peek-byte (seq (Call 'peek_byte ))]))
11+ ['read-byte (seq (Extern 'read_byte ) ( Call 'read_byte ))]
12+ ['peek-byte (seq (Extern 'peek_byte ) ( Call 'peek_byte ))]))
1313
1414;; Op1 -> Asm
1515(define (compile-op1 p)
3737 (seq (Cmp rax (value->bits eof))
3838 if-equal)]
3939 ['write-byte
40- (seq
40+ (seq (Extern 'write_byte )
4141 (Mov rdi rax)
4242 (Call 'write_byte ))]))
4343
Original file line number Diff line number Diff line change 1010;; Expr -> Asm
1111(define (compile e)
1212 (prog (Global 'entry )
13- (Extern 'peek_byte )
14- (Extern 'read_byte )
15- (Extern 'write_byte )
1613 (Label 'entry )
1714 (Sub rsp 8 )
1815 (compile-e e)
2623 [(Eof) (seq (Mov rax (value->bits eof)))]
2724 [(Prim0 p) (compile-prim0 p)]
2825 [(Prim1 p e) (compile-prim1 p e)]
29- [(If e1 e2 e3)
30- (compile-if e1 e2 e3)]
31- [(Begin e1 e2)
32- (compile-begin e1 e2)]))
26+ [(If e1 e2 e3) (compile-if e1 e2 e3)]
27+ [(Begin e1 e2) (compile-begin e1 e2)]))
3328
3429;; Datum -> Asm
3530(define (compile-datum d)
Original file line number Diff line number Diff line change 99(define (compile-op0 p)
1010 (match p
1111 ['void (seq (Mov rax (value->bits (void))))]
12- ['read-byte (seq (Call 'read_byte ))]
13- ['peek-byte (seq (Call 'peek_byte ))]))
12+ ['read-byte (seq (Extern 'read_byte ) ( Call 'read_byte ))]
13+ ['peek-byte (seq (Extern 'peek_byte ) ( Call 'peek_byte ))]))
1414
1515;; Op1 -> Asm
1616(define (compile-op1 p)
4242 (seq (Cmp rax (value->bits eof))
4343 if-equal)]
4444 ['write-byte
45- (seq (assert-byte rax)
45+ (seq (Extern 'write_byte )
46+ (assert-byte rax)
4647 (Mov rdi rax)
4748 (Call 'write_byte ))]))
4849
Original file line number Diff line number Diff line change 1010;; Expr -> Asm
1111(define (compile e)
1212 (prog (Global 'entry )
13- (Extern 'peek_byte )
14- (Extern 'read_byte )
15- (Extern 'write_byte )
16- (Extern 'raise_error )
1713 (Label 'entry )
1814 (Sub rsp 8 )
1915 (compile-e e)
2016 (Add rsp 8 )
2117 (Ret)
2218 ;; Error handler
2319 (Label 'err )
20+ (Extern 'raise_error )
2421 (Call 'raise_error )))
2522
2623;; Expr -> Asm
3027 [(Eof) (seq (Mov rax (value->bits eof)))]
3128 [(Prim0 p) (compile-prim0 p)]
3229 [(Prim1 p e) (compile-prim1 p e)]
33- [(If e1 e2 e3)
34- (compile-if e1 e2 e3)]
35- [(Begin e1 e2)
36- (compile-begin e1 e2)]))
30+ [(If e1 e2 e3) (compile-if e1 e2 e3)]
31+ [(Begin e1 e2) (compile-begin e1 e2)]))
3732
3833;; Datum -> Asm
3934(define (compile-datum d)
Original file line number Diff line number Diff line change 99(define (compile-op0 p)
1010 (match p
1111 ['void (seq (Mov rax (value->bits (void))))]
12- ['read-byte (seq pad-stack (Call 'read_byte ) unpad-stack)]
13- ['peek-byte (seq pad-stack (Call 'peek_byte ) unpad-stack)]))
12+ ['read-byte (seq (Extern 'read_byte ) pad-stack (Call 'read_byte ) unpad-stack)]
13+ ['peek-byte (seq (Extern 'peek_byte ) pad-stack (Call 'peek_byte ) unpad-stack)]))
1414
1515;; Op1 -> Asm
1616(define (compile-op1 p)
4242 (seq (Cmp rax (value->bits eof))
4343 if-equal)]
4444 ['write-byte
45- (seq (assert-byte rax)
45+ (seq (Extern 'write_byte )
46+ (assert-byte rax)
4647 pad-stack
4748 (Mov rdi rax)
4849 (Call 'write_byte )
Original file line number Diff line number Diff line change 99;; ClosedExpr -> Asm
1010(define (compile e)
1111 (prog (Global 'entry )
12- (Extern 'peek_byte )
13- (Extern 'read_byte )
14- (Extern 'write_byte )
15- (Extern 'raise_error )
1612 (Label 'entry )
1713 ;; save callee-saved register
1814 (Push r15)
2319 ;; Error handler
2420 (Label 'err )
2521 pad-stack
22+ (Extern 'raise_error )
2623 (Call 'raise_error )))
2724
2825;; type CEnv = (Listof [Maybe Id])
3532 [(Prim0 p) (compile-prim0 p)]
3633 [(Prim1 p e) (compile-prim1 p e c)]
3734 [(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)]
38- [(If e1 e2 e3)
39- (compile-if e1 e2 e3 c)]
40- [(Begin e1 e2)
41- (compile-begin e1 e2 c)]
42- [(Let x e1 e2)
43- (compile-let x e1 e2 c)]))
35+ [(If e1 e2 e3) (compile-if e1 e2 e3 c)]
36+ [(Begin e1 e2) (compile-begin e1 e2 c)]
37+ [(Let x e1 e2) (compile-let x e1 e2 c)]))
4438
4539;; Datum -> Asm
4640(define (compile-datum d)
Original file line number Diff line number Diff line change 99(define (compile-op0 p)
1010 (match p
1111 ['void (seq (Mov rax (value->bits (void))))]
12- ['read-byte (seq pad-stack (Call 'read_byte ) unpad-stack)]
13- ['peek-byte (seq pad-stack (Call 'peek_byte ) unpad-stack)]))
12+ ['read-byte (seq (Extern 'read_byte ) pad-stack (Call 'read_byte ) unpad-stack)]
13+ ['peek-byte (seq (Extern 'peek_byte ) pad-stack (Call 'peek_byte ) unpad-stack)]))
1414
1515;; Op1 -> Asm
1616(define (compile-op1 p)
4242 (seq (Cmp rax (value->bits eof))
4343 if-equal)]
4444 ['write-byte
45- (seq (assert-byte rax)
45+ (seq (Extern 'write_byte )
46+ (assert-byte rax)
4647 pad-stack
4748 (Mov rdi rax)
4849 (Call 'write_byte )
You can’t perform that action at this time.
0 commit comments