Skip to content

Commit 9d628e3

Browse files
authored
Merge pull request #26 from dvanhorn/next
Next
2 parents b377795 + 75d723b commit 9d628e3

3 files changed

Lines changed: 35 additions & 39 deletions

File tree

www/notes/fraud/compile-refactor.rkt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
;; type CEnv = [Listof Variable]
55

6+
(define imm-shift 1)
7+
(define imm-type-mask (sub1 (arithmetic-shift 1 imm-shift)))
8+
(define imm-type-int #b0)
9+
(define imm-type-true #b11)
10+
(define imm-type-false #b01)
11+
612
;; Expr -> Asm
713
(define (compile e)
814
`(entry
@@ -18,7 +24,7 @@
1824
(match e
1925
[(? integer? i) (compile-integer i)]
2026
[(? boolean? b) (compile-boolean b)]
21-
[(? symbol? x) (compile-variable x c)]
27+
[(? symbol? x) (compile-variable x c)]
2228
[`(add1 ,e0) (compile-add1 e0 c)]
2329
[`(sub1 ,e0) (compile-sub1 e0 c)]
2430
[`(zero? ,e0) (compile-zero? e0 c)]
@@ -27,25 +33,25 @@
2733

2834
;; Integer -> Asm
2935
(define (compile-integer i)
30-
`((mov rax ,(* i 2))))
36+
`((mov rax ,(arithmetic-shift i imm-shift))))
3137

3238
;; Boolean -> Asm
3339
(define (compile-boolean b)
34-
`((mov rax ,(if b #b11 #b01))))
40+
`((mov rax ,(if b imm-type-true imm-type-false))))
3541

3642
;; Expr CEnv -> Asm
3743
(define (compile-add1 e0 c)
3844
(let ((c0 (compile-e e0 c)))
3945
`(,@c0
4046
,@assert-integer
41-
(add rax 2))))
47+
(add rax ,(arithmetic-shift 1 imm-shift)))))
4248

4349
;; Expr CEnv -> Asm
4450
(define (compile-sub1 e0 c)
4551
(let ((c0 (compile-e e0 c)))
4652
`(,@c0
4753
,@assert-integer
48-
(sub rax 2))))
54+
(sub rax ,(arithmetic-shift 1 imm-shift)))))
4955

5056
;; Expr CEnv -> Asm
5157
(define (compile-zero? e0 c)
@@ -55,9 +61,9 @@
5561
`(,@c0
5662
,@assert-integer
5763
(cmp rax 0)
58-
(mov rax #b01) ; #f
64+
(mov rax ,imm-type-false)
5965
(jne ,l0)
60-
(mov rax #b11) ; #t
66+
(mov rax ,imm-type-true)
6167
,l0)))
6268

6369
;; Expr Expr Expr CEnv -> Asm
@@ -68,7 +74,7 @@
6874
(l0 (gensym))
6975
(l1 (gensym)))
7076
`(,@c0
71-
(cmp rax #b01) ; compare to #f
77+
(cmp rax ,imm-type-false)
7278
(je ,l0) ; jump to c2 if #f
7379
,@c1
7480
(jmp ,l1) ; jump past c2
@@ -94,12 +100,12 @@
94100
(match cenv
95101
['() (error "undefined variable:" x)]
96102
[(cons y cenv)
97-
(match (symbol=? x y)
103+
(match (eq? x y)
98104
[#t (length cenv)]
99105
[#f (lookup x cenv)])]))
100106

101107
(define assert-integer
102108
`((mov rbx rax)
103-
(and rbx 1)
104-
(cmp rbx 0)
109+
(and rbx ,imm-type-mask)
110+
(cmp rbx ,imm-type-int)
105111
(jne err)))

www/notes/grift/compile.rkt

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
#lang racket
22

3+
(define imm-shift 3)
4+
(define imm-type-mask (sub1 (arithmetic-shift 1 imm-shift)))
5+
(define imm-type-int #b000)
6+
(define imm-type-true #b001)
7+
(define imm-type-false #b010)
8+
(define imm-type-empty #b011)
9+
(define imm-type-char #b100)
10+
311
;; Expr -> Asm
412
(define (compile e)
513
`(entry
@@ -26,25 +34,25 @@
2634

2735
;; Integer -> Asm
2836
(define (compile-integer i)
29-
`((mov rax ,(* i 2))))
37+
`((mov rax ,(arithmetic-shift i imm-shift))))
3038

3139
;; Boolean -> Asm
3240
(define (compile-boolean b)
33-
`((mov rax ,(if b #b11 #b01))))
41+
`((mov rax ,(if b imm-type-true imm-type-false))))
3442

3543
;; Expr CEnv -> Asm
36-
(define (compile-add1 e0 c)
44+
(define (compile-add1 e0 c)
3745
(let ((c0 (compile-e e0 c)))
3846
`(,@c0
3947
,@assert-integer
40-
(add rax 2))))
48+
(add rax ,(arithmetic-shift 1 imm-shift)))))
4149

4250
;; Expr CEnv -> Asm
4351
(define (compile-sub1 e0 c)
4452
(let ((c0 (compile-e e0 c)))
4553
`(,@c0
4654
,@assert-integer
47-
(sub rax 2))))
55+
(sub rax ,(arithmetic-shift 1 imm-shift)))))
4856

4957
;; Expr CEnv -> Asm
5058
(define (compile-zero? e0 c)
@@ -54,9 +62,9 @@
5462
`(,@c0
5563
,@assert-integer
5664
(cmp rax 0)
57-
(mov rax #b01) ; #f
65+
(mov rax ,imm-type-false)
5866
(jne ,l0)
59-
(mov rax #b11) ; #t
67+
(mov rax ,imm-type-true)
6068
,l0)))
6169

6270
;; Expr Expr Expr CEnv -> Asm
@@ -67,7 +75,7 @@
6775
(l0 (gensym))
6876
(l1 (gensym)))
6977
`(,@c0
70-
(cmp rax #b01) ; compare to #f
78+
(cmp rax ,imm-type-false)
7179
(je ,l0) ; jump to c2 if #f
7280
,@c1
7381
(jmp ,l1) ; jump past c2
@@ -121,6 +129,6 @@
121129

122130
(define assert-integer
123131
`((mov rbx rax)
124-
(and rbx 1)
125-
(cmp rbx 0)
132+
(and rbx ,imm-type-mask)
133+
(cmp rbx ,imm-type-int)
126134
(jne err)))

www/notes/hustle/compile.rkt

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@
2727
;; Expr -> Asm
2828
(define (compile e)
2929
`(entry
30-
(sar rdi 4) ;; align on quad boundary
31-
(sal rdi 4)
32-
(add rdi 16)
3330
,@(compile-e e '())
3431
ret
3532
err
@@ -195,21 +192,6 @@
195192
,@assert-integer
196193
(sub rax (offset rsp ,(- (add1 (length c))))))))
197194

198-
;; code for "abc"
199-
'((mov (offset rdi 0)
200-
(integer->bits 3))
201-
(mov (offset rdi 1)
202-
(compile-char #\a))
203-
(mov (offset rdi 1)
204-
(char->bits #\b))
205-
(mov (offset-rdi 2)
206-
(char->bits #\c))
207-
(mov rdi rax)
208-
(or rax ,str-tag))
209-
210-
211-
212-
213195
;; Variable CEnv -> Natural
214196
(define (lookup x cenv)
215197
(match cenv

0 commit comments

Comments
 (0)