Skip to content

Commit d4bdebc

Browse files
committed
crook
1 parent 1b39899 commit d4bdebc

File tree

3 files changed

+17
-27
lines changed

3 files changed

+17
-27
lines changed

iniquity-plus/compile-ops.rkt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,13 @@
6565
(Add rbx 8))]
6666
['unbox
6767
(seq (assert-box rax)
68-
(Xor rax type-box)
69-
(Mov rax (Offset rax 0)))]
68+
(Mov rax (Offset rax (- type-box))))]
7069
['car
7170
(seq (assert-cons rax)
72-
(Xor rax type-cons)
73-
(Mov rax (Offset rax 8)))]
71+
(Mov rax (Offset rax (- 8 type-cons))))]
7472
['cdr
7573
(seq (assert-cons rax)
76-
(Xor rax type-cons)
77-
(Mov rax (Offset rax 0)))]
74+
(Mov rax (Offset rax (- type-cons))))]
7875

7976
['empty? (seq (Cmp rax (value->bits '())) if-equal)]
8077
['cons? (type-pred ptr-mask type-cons)]
@@ -85,10 +82,9 @@
8582
(let ((zero (gensym))
8683
(done (gensym)))
8784
(seq (assert-vector rax)
88-
(Xor rax type-vect)
89-
(Cmp rax 0)
85+
(Cmp rax type-vect)
9086
(Je zero)
91-
(Mov rax (Offset rax 0))
87+
(Mov rax (Offset rax (- type-vect)))
9288
(Sal rax int-shift)
9389
(Jmp done)
9490
(Label zero)
@@ -98,10 +94,9 @@
9894
(let ((zero (gensym))
9995
(done (gensym)))
10096
(seq (assert-string rax)
101-
(Xor rax type-str)
102-
(Cmp rax 0)
97+
(Cmp rax type-str)
10398
(Je zero)
104-
(Mov rax (Offset rax 0))
99+
(Mov rax (Offset rax (- type-str)))
105100
(Sal rax int-shift)
106101
(Jmp done)
107102
(Label zero)

knock-plus/compile-ops.rkt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,13 @@
6565
(Add rbx 8))]
6666
['unbox
6767
(seq (assert-box rax)
68-
(Xor rax type-box)
69-
(Mov rax (Offset rax 0)))]
68+
(Mov rax (Offset rax (- type-box))))]
7069
['car
7170
(seq (assert-cons rax)
72-
(Xor rax type-cons)
73-
(Mov rax (Offset rax 8)))]
71+
(Mov rax (Offset rax (- 8 type-cons))))]
7472
['cdr
7573
(seq (assert-cons rax)
76-
(Xor rax type-cons)
77-
(Mov rax (Offset rax 0)))]
74+
(Mov rax (Offset rax (- type-cons))))]
7875

7976
['empty? (seq (Cmp rax (value->bits '())) if-equal)]
8077
['cons? (type-pred ptr-mask type-cons)]
@@ -85,10 +82,9 @@
8582
(let ((zero (gensym))
8683
(done (gensym)))
8784
(seq (assert-vector rax)
88-
(Xor rax type-vect)
89-
(Cmp rax 0)
85+
(Cmp rax type-vect)
9086
(Je zero)
91-
(Mov rax (Offset rax 0))
87+
(Mov rax (Offset rax (- type-vect)))
9288
(Sal rax int-shift)
9389
(Jmp done)
9490
(Label zero)
@@ -98,10 +94,9 @@
9894
(let ((zero (gensym))
9995
(done (gensym)))
10096
(seq (assert-string rax)
101-
(Xor rax type-str)
102-
(Cmp rax 0)
97+
(Cmp rax type-str)
10398
(Je zero)
104-
(Mov rax (Offset rax 0))
99+
(Mov rax (Offset rax (- type-str)))
105100
(Sal rax int-shift)
106101
(Jmp done)
107102
(Label zero)

knock-plus/compile.rkt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
compile-e
44
compile-es
55
compile-define
6-
compile-match)
6+
compile-match
7+
compile-match-clause)
78

89
(require "ast.rkt")
910
(require "compile-ops.rkt")
@@ -275,8 +276,7 @@
275276
(Add rsp (* 8 (length cm))) ; haven't pushed anything yet
276277
(Jmp next)
277278
(Label ok)
278-
(Xor rax type-box)
279-
(Mov rax (Offset rax 0))
279+
(Mov rax (Offset rax (- type-box)))
280280
i1)
281281
cm1))])]
282282
[(Cons p1 p2)

0 commit comments

Comments
 (0)