File tree Expand file tree Collapse file tree 3 files changed +17
-27
lines changed Expand file tree Collapse file tree 3 files changed +17
-27
lines changed Original file line number Diff line number Diff line change 65
65
(Add rbx 8 ))]
66
66
['unbox
67
67
(seq (assert-box rax)
68
- (Xor rax type-box)
69
- (Mov rax (Offset rax 0 )))]
68
+ (Mov rax (Offset rax (- type-box))))]
70
69
['car
71
70
(seq (assert-cons rax)
72
- (Xor rax type-cons)
73
- (Mov rax (Offset rax 8 )))]
71
+ (Mov rax (Offset rax (- 8 type-cons))))]
74
72
['cdr
75
73
(seq (assert-cons rax)
76
- (Xor rax type-cons)
77
- (Mov rax (Offset rax 0 )))]
74
+ (Mov rax (Offset rax (- type-cons))))]
78
75
79
76
['empty? (seq (Cmp rax (value->bits '() )) if-equal)]
80
77
['cons? (type-pred ptr-mask type-cons)]
85
82
(let ((zero (gensym))
86
83
(done (gensym)))
87
84
(seq (assert-vector rax)
88
- (Xor rax type-vect)
89
- (Cmp rax 0 )
85
+ (Cmp rax type-vect)
90
86
(Je zero)
91
- (Mov rax (Offset rax 0 ))
87
+ (Mov rax (Offset rax (- type-vect) ))
92
88
(Sal rax int-shift)
93
89
(Jmp done)
94
90
(Label zero)
98
94
(let ((zero (gensym))
99
95
(done (gensym)))
100
96
(seq (assert-string rax)
101
- (Xor rax type-str)
102
- (Cmp rax 0 )
97
+ (Cmp rax type-str)
103
98
(Je zero)
104
- (Mov rax (Offset rax 0 ))
99
+ (Mov rax (Offset rax (- type-str) ))
105
100
(Sal rax int-shift)
106
101
(Jmp done)
107
102
(Label zero)
Original file line number Diff line number Diff line change 65
65
(Add rbx 8 ))]
66
66
['unbox
67
67
(seq (assert-box rax)
68
- (Xor rax type-box)
69
- (Mov rax (Offset rax 0 )))]
68
+ (Mov rax (Offset rax (- type-box))))]
70
69
['car
71
70
(seq (assert-cons rax)
72
- (Xor rax type-cons)
73
- (Mov rax (Offset rax 8 )))]
71
+ (Mov rax (Offset rax (- 8 type-cons))))]
74
72
['cdr
75
73
(seq (assert-cons rax)
76
- (Xor rax type-cons)
77
- (Mov rax (Offset rax 0 )))]
74
+ (Mov rax (Offset rax (- type-cons))))]
78
75
79
76
['empty? (seq (Cmp rax (value->bits '() )) if-equal)]
80
77
['cons? (type-pred ptr-mask type-cons)]
85
82
(let ((zero (gensym))
86
83
(done (gensym)))
87
84
(seq (assert-vector rax)
88
- (Xor rax type-vect)
89
- (Cmp rax 0 )
85
+ (Cmp rax type-vect)
90
86
(Je zero)
91
- (Mov rax (Offset rax 0 ))
87
+ (Mov rax (Offset rax (- type-vect) ))
92
88
(Sal rax int-shift)
93
89
(Jmp done)
94
90
(Label zero)
98
94
(let ((zero (gensym))
99
95
(done (gensym)))
100
96
(seq (assert-string rax)
101
- (Xor rax type-str)
102
- (Cmp rax 0 )
97
+ (Cmp rax type-str)
103
98
(Je zero)
104
- (Mov rax (Offset rax 0 ))
99
+ (Mov rax (Offset rax (- type-str) ))
105
100
(Sal rax int-shift)
106
101
(Jmp done)
107
102
(Label zero)
Original file line number Diff line number Diff line change 3
3
compile-e
4
4
compile-es
5
5
compile-define
6
- compile-match)
6
+ compile-match
7
+ compile-match-clause)
7
8
8
9
(require "ast.rkt " )
9
10
(require "compile-ops.rkt " )
275
276
(Add rsp (* 8 (length cm))) ; haven't pushed anything yet
276
277
(Jmp next)
277
278
(Label ok)
278
- (Xor rax type-box)
279
- (Mov rax (Offset rax 0 ))
279
+ (Mov rax (Offset rax (- type-box)))
280
280
i1)
281
281
cm1))])]
282
282
[(Cons p1 p2)
You can’t perform that action at this time.
0 commit comments