File tree Expand file tree Collapse file tree 12 files changed +42
-69
lines changed
Expand file tree Collapse file tree 12 files changed +42
-69
lines changed 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 [(Cond eqs eas el) ;; TODO
2524 (seq)]
2625 [(Case e ds es el) ;; TODO
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 [(Cond eqs eas el) ;; TODO
2524 (seq)]))
2625
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)
5151 (seq (Cmp rax (value->bits eof))
5252 if-equal)]
5353 ['write-byte
54- (seq (assert-byte rax)
54+ (seq (Extern 'write_byte )
55+ (assert-byte rax)
5556 (Mov rdi rax)
5657 (Call 'write_byte ))]))
5758
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)]
30+ [(If e1 e2 e3) (compile-if e1 e2 e3)]
3531 [(Cond eqs eas el) ;; TODO
3632 (seq)]
3733 [(Case e ds es el) ;; TODO
3834 (seq)]
39- [(Begin e1 e2)
40- (compile-begin e1 e2)]))
35+ [(Begin e1 e2) (compile-begin e1 e2)]))
4136
4237;; Datum -> Asm
4338(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)
5757 (seq (Cmp rax (value->bits eof))
5858 if-equal)]
5959 ['write-byte
60- (seq (assert-byte rax)
60+ (seq (Extern 'write_byte )
61+ (assert-byte rax)
6162 pad-stack
6263 (Mov rdi rax)
6364 (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)]
35+ [(If e1 e2 e3) (compile-if e1 e2 e3 c)]
4036 [(Cond eqs eas el) ;; TODO
4137 (seq)]
4238 [(Case e ds es el) ;; TODO
4945 ;; TODO: this works for special case of single binding
5046 ;; TODO: revise to work for any number of bindings
5147 (compile-let1 x e1 e c)]
52- [(Begin e1 e2)
53- (compile-begin e1 e2 c)]))
48+ [(Begin e1 e2) (compile-begin e1 e2 c)]))
5449
5550;; Datum -> Asm
5651(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)
2723 ;; Error handler
2824 (Label 'err )
2925 pad-stack
26+ (Extern 'raise_error )
3027 (Call 'raise_error )
3128 (Data)
3229 (Label 'empty )
4340 [(Prim1 p e) (compile-prim1 p e c)]
4441 [(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)]
4542 [(Prim3 p e1 e2 e3) (compile-prim3 p e1 e2 e3 c)]
46- [(If e1 e2 e3)
47- (compile-if e1 e2 e3 c)]
48- [(Begin e1 e2)
49- (compile-begin e1 e2 c)]
50- [(Let x e1 e2)
51- (compile-let x e1 e2 c)]))
43+ [(If e1 e2 e3) (compile-if e1 e2 e3 c)]
44+ [(Begin e1 e2) (compile-begin e1 e2 c)]
45+ [(Let x e1 e2) (compile-let x e1 e2 c)]))
5246
5347;; Datum -> Asm
5448(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 1414 (match p
1515 [(Prog ds e)
1616 (prog (Global 'entry )
17- (Extern 'peek_byte )
18- (Extern 'read_byte )
19- (Extern 'write_byte )
20- (Extern 'raise_error )
2117 (Label 'entry )
2218 (Push rbx) ; save callee-saved register
2319 (Push r15)
3026 (compile-defines ds)
3127 (Label 'err )
3228 pad-stack
29+ (Extern 'raise_error )
3330 (Call 'raise_error )
3431 (Data)
3532 (Label 'empty )
7471 [(Prim1 p e) (compile-prim1 p e c)]
7572 [(Prim2 p e1 e2) (compile-prim2 p e1 e2 c)]
7673 [(Prim3 p e1 e2 e3) (compile-prim3 p e1 e2 e3 c)]
77- [(If e1 e2 e3)
78- (compile-if e1 e2 e3 c)]
79- [(Begin e1 e2)
80- (compile-begin e1 e2 c)]
81- [(Let x e1 e2)
82- (compile-let x e1 e2 c)]
83- [(App f es)
84- (compile-app f es c)]
74+ [(If e1 e2 e3) (compile-if e1 e2 e3 c)]
75+ [(Begin e1 e2) (compile-begin e1 e2 c)]
76+ [(Let x e1 e2) (compile-let x e1 e2 c)]
77+ [(App f es) (compile-app f es c)]
8578 [(Apply f es e)
8679 (compile-apply f es e c)]))
8780
You can’t perform that action at this time.
0 commit comments