Skip to content

Commit 381b6f0

Browse files
authored
Merge pull request #133 from cmsc430/respect-r15
r15, void, CEnv
2 parents 24269eb + 64071f5 commit 381b6f0

File tree

22 files changed

+82
-61
lines changed

22 files changed

+82
-61
lines changed

langs/extort/compile-ops.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

langs/fraud/compile-ops.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@
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)

langs/fraud/compile.rkt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
(define rax 'rax) ; return
77
(define rsp 'rsp) ; stack
88
(define rdi 'rdi) ; arg
9+
(define r15 'r15) ; stack pad (non-volatile)
910

10-
;; type CEnv = (Listof ID)
11+
;; type CEnv = (Listof [Maybe Id])
1112

1213
;; Expr -> Asm
1314
(define (compile e)
@@ -17,7 +18,9 @@
1718
(Extern 'raise_error)
1819
(Global 'entry)
1920
(Label 'entry)
21+
(Push r15) ; save callee-saved register
2022
(compile-e e '())
23+
(Pop r15) ; restore callee-save register
2124
(Ret)
2225
(Label 'raise_error_align)
2326
pad-stack

langs/hoax/compile-ops.rkt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
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)
@@ -144,11 +143,11 @@
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)
@@ -174,7 +173,7 @@
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)

langs/hoax/compile.rkt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
(define rbx 'rbx) ; heap
88
(define rsp 'rsp) ; stack
99
(define rdi 'rdi) ; arg
10+
(define r15 'r15) ; stack pad (non-volatile)
1011

11-
;; type CEnv = [Listof Variable]
12+
;; type CEnv = (Listof [Maybe Id])
1213

1314
;; Expr -> Asm
1415
(define (compile e)
@@ -19,9 +20,11 @@
1920
(Global 'entry)
2021
(Label 'entry)
2122
(Push rbx) ; save callee-saved register
23+
(Push r15)
2224
(Mov rbx rdi) ; recv heap pointer
2325
(compile-e e '())
24-
(Pop rbx) ; restore callee-save register
26+
(Pop r15) ; restore callee-save register
27+
(Pop rbx)
2528
(Ret)
2629
(Label 'raise_error_align)
2730
pad-stack

langs/hustle/compile-ops.rkt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,12 @@
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)

langs/hustle/compile.rkt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
(define rbx 'rbx) ; heap
88
(define rsp 'rsp) ; stack
99
(define rdi 'rdi) ; arg
10+
(define r15 'r15) ; stack pad (non-volatile)
1011

11-
;; type CEnv = [Listof Variable]
12+
;; type CEnv = (Listof [Maybe Id])
1213

1314
;; Expr -> Asm
1415
(define (compile e)
@@ -19,9 +20,11 @@
1920
(Global 'entry)
2021
(Label 'entry)
2122
(Push rbx) ; save callee-saved register
23+
(Push r15)
2224
(Mov rbx rdi) ; recv heap pointer
23-
(compile-e e '())
24-
(Pop rbx) ; restore callee-save register
25+
(compile-e e '())
26+
(Pop r15) ; restore callee-save register
27+
(Pop rbx)
2528
(Ret)
2629
(Label 'raise_error_align)
2730
pad-stack

langs/iniquity/compile-ops.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
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)

langs/iniquity/compile.rkt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,23 @@
77
(define rbx 'rbx) ; heap
88
(define rsp 'rsp) ; stack
99
(define rdi 'rdi) ; arg
10+
(define r15 'r15) ; stack pad (non-volatile)
1011

11-
;; type CEnv = [Listof Variable]
12+
;; type CEnv = (Listof [Maybe Id])
1213

1314
;; Prog -> Asm
1415
(define (compile p)
1516
(match p
16-
[(Prog ds e)
17+
[(Prog ds e)
1718
(prog (externs)
1819
(Global 'entry)
1920
(Label 'entry)
20-
(Push rbx) ; save callee-saved register
21+
(Push rbx) ; save callee-saved register
22+
(Push r15)
2123
(Mov rbx rdi) ; recv heap pointer
2224
(compile-e e '())
23-
(Pop rbx) ; restore callee-save register
25+
(Pop r15) ; restore callee-save register
26+
(Pop rbx)
2427
(Ret)
2528
(compile-defines ds)
2629
(Label 'raise_error_align)

langs/jig/compile-ops.rkt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
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)

0 commit comments

Comments
 (0)