File tree Expand file tree Collapse file tree 11 files changed +18
-29
lines changed
Expand file tree Collapse file tree 11 files changed +18
-29
lines changed Original file line number Diff line number Diff line change 4141 ['write-byte
4242 (seq (assert-byte)
4343 (Mov rdi rax)
44- (Call 'write_byte )
45- (Mov rax (value->bits (void))))]))
44+ (Call 'write_byte ))]))
4645
4746
4847;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Original file line number Diff line number Diff line change 5050 pad-stack
5151 (Mov rdi rax)
5252 (Call 'write_byte )
53- unpad-stack
54- (Mov rax (value->bits (void))))]))
53+ unpad-stack)]))
5554
5655;; Op2 -> Asm
5756(define (compile-op2 p)
Original file line number Diff line number Diff line change 5252 pad-stack
5353 (Mov rdi rax)
5454 (Call 'write_byte )
55- unpad-stack
56- (Mov rax (value->bits (void))))]
55+ unpad-stack)]
5756 ['box
5857 (seq (Mov (Offset rbx 0 ) rax)
5958 (Mov rax rbx)
144143 (seq (Pop r8)
145144 (Cmp rax r8)
146145 (if-equal))]
147- ['make-vector
146+ ['make-vector ;; size value
148147 (let ((loop (gensym))
149148 (done (gensym))
150149 (empty (gensym)))
151- (seq (Pop r8)
150+ (seq (Pop r8) ;; r8 = size
152151 (assert-natural r8)
153152 (Cmp r8 0 ) ; special case empty vector
154153 (Je empty)
174173 (Mov rax type-vect)
175174 (Label done)))]
176175
177- ['vector-ref
176+ ['vector-ref ; vector index
178177 (seq (Pop r8)
179178 (assert-vector r8)
180179 (assert-integer rax)
Original file line number Diff line number Diff line change 4949 pad-stack
5050 (Mov rdi rax)
5151 (Call 'write_byte )
52- unpad-stack
53- (Mov rax val-void))]
52+ unpad-stack)]
5453 ['box
55- (seq (Mov (Offset rbx 0 ) rax)
56- (Mov rax rbx)
57- (Or rax type-box)
58- (Add rbx 8 ))]
54+ (seq (Mov (Offset rbx 0 ) rax) ; memory write
55+ (Mov rax rbx) ; put box in rax
56+ (Or rax type-box) ; tag as a box
57+ (Add rbx 8 ))] ; move rbx 8 bytes over
5958 ['unbox
6059 (seq (assert-box rax)
6160 (Xor rax type-box)
Original file line number Diff line number Diff line change 5252 pad-stack
5353 (Mov rdi rax)
5454 (Call 'write_byte )
55- unpad-stack
56- (Mov rax (value->bits (void))))]
55+ unpad-stack)]
5756 ['box
5857 (seq (Mov (Offset rbx 0 ) rax)
5958 (Mov rax rbx)
Original file line number Diff line number Diff line change 5252 pad-stack
5353 (Mov rdi rax)
5454 (Call 'write_byte )
55- unpad-stack
56- (Mov rax (value->bits (void))))]
55+ unpad-stack)]
5756 ['box
5857 (seq (Mov (Offset rbx 0 ) rax)
5958 (Mov rax rbx)
Original file line number Diff line number Diff line change 5252 pad-stack
5353 (Mov rdi rax)
5454 (Call 'write_byte )
55- unpad-stack
56- (Mov rax (value->bits (void))))]
55+ unpad-stack)]
5756 ['box
5857 (seq (Mov (Offset rbx 0 ) rax)
5958 (Mov rax rbx)
Original file line number Diff line number Diff line change 5252 pad-stack
5353 (Mov rdi rax)
5454 (Call 'write_byte )
55- unpad-stack
56- (Mov rax (value->bits (void))))]
55+ unpad-stack)]
5756 ['box
5857 (seq (Mov (Offset rbx 0 ) rax)
5958 (Mov rax rbx)
Original file line number Diff line number Diff line change 5555 pad-stack
5656 (Mov rdi rax)
5757 (Call 'write_byte )
58- unpad-stack
59- (Mov rax val-void))]
58+ unpad-stack)]
6059 ['box
6160 (seq (Mov (Offset rbx 0 ) rax)
6261 (Mov rax rbx)
Original file line number Diff line number Diff line change 5555 pad-stack
5656 (Mov rdi rax)
5757 (Call 'write_byte )
58- unpad-stack
59- (Mov rax val-void))]
58+ unpad-stack)]
6059 ['box
6160 (seq (Mov (Offset rbx 0 ) rax)
6261 (Mov rax rbx)
You can’t perform that action at this time.
0 commit comments