Skip to content

Commit b01bc42

Browse files
committed
Save/restore r15.
1 parent 24269eb commit b01bc42

File tree

10 files changed

+48
-18
lines changed

10 files changed

+48
-18
lines changed

langs/fraud/compile.rkt

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

1011
;; type CEnv = (Listof ID)
1112

@@ -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.rkt

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

1112
;; type CEnv = [Listof Variable]
1213

@@ -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.rkt

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

1112
;; type CEnv = [Listof Variable]
1213

@@ -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.rkt

Lines changed: 6 additions & 3 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

1112
;; type CEnv = [Listof Variable]
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.rkt

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

1112
;; type CEnv = [Listof Variable]
1213

@@ -17,10 +18,12 @@
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 '() #f)
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/knock/compile.rkt

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

1112
;; type CEnv = [Listof Variable]
1213

@@ -17,10 +18,12 @@
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 '() #f)
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/loot/compile.rkt

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

1112
;; type CEnv = [Listof Id]
1213

@@ -17,12 +18,14 @@
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-defines-values ds)
2325
(compile-e e (reverse (define-ids ds)) #f)
2426
(Add rsp (* 8 (length ds))) ;; pop function definitions
25-
(Pop rbx) ; restore callee-save register
27+
(Pop r15) ; restore callee-save register
28+
(Pop rbx)
2629
(Ret)
2730
(compile-defines ds)
2831
(compile-lambda-defines (lambdas p))

langs/mountebank/compile.rkt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
(define rbx 'rbx) ; heap
1515
(define rsp 'rsp) ; stack
1616
(define rdi 'rdi) ; arg
17+
(define r15 'r15) ; stack pad (non-volatile)
1718

1819
;; type CEnv = [Listof Id]
1920

@@ -24,13 +25,15 @@
2425
(prog (externs)
2526
(Global 'entry)
2627
(Label 'entry)
27-
(Push rbx) ; save callee-saved register
28+
(Push rbx) ; save callee-saved register
29+
(Push r15)
2830
(Mov rbx rdi) ; recv heap pointer
2931
(init-symbol-table p)
3032
(compile-defines-values ds)
3133
(compile-e e (reverse (define-ids ds)) #f)
3234
(Add rsp (* 8 (length ds))) ;; pop function definitions
33-
(Pop rbx) ; restore callee-save register
35+
(Pop r15) ; restore callee-save register
36+
(Pop rbx)
3437
(Ret)
3538
(compile-defines ds)
3639
(compile-lambda-defines (lambdas p))

langs/mug/compile.rkt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
(define rbx 'rbx) ; heap
1515
(define rsp 'rsp) ; stack
1616
(define rdi 'rdi) ; arg
17+
(define r15 'r15) ; stack pad (non-volatile)
1718

1819
;; type CEnv = [Listof Id]
1920

@@ -24,13 +25,15 @@
2425
(prog (externs)
2526
(Global 'entry)
2627
(Label 'entry)
27-
(Push rbx) ; save callee-saved register
28+
(Push rbx) ; save callee-saved register
29+
(Push r15)
2830
(Mov rbx rdi) ; recv heap pointer
2931
(init-symbol-table p)
3032
(compile-defines-values ds)
3133
(compile-e e (reverse (define-ids ds)) #f)
3234
(Add rsp (* 8 (length ds))) ;; pop function definitions
33-
(Pop rbx) ; restore callee-save register
35+
(Pop r15) ; restore callee-save register
36+
(Pop rbx)
3437
(Ret)
3538
(compile-defines ds)
3639
(compile-lambda-defines (lambdas p))

langs/neerdowell/compile.rkt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
(define rbx 'rbx) ; heap
1515
(define rsp 'rsp) ; stack
1616
(define rdi 'rdi) ; arg
17+
(define r15 'r15) ; stack pad (non-volatile)
1718

1819
;; type CEnv = [Listof Id]
1920

@@ -24,13 +25,15 @@
2425
(prog (externs)
2526
(Global 'entry)
2627
(Label 'entry)
27-
(Push rbx) ; save callee-saved register
28+
(Push rbx) ; save callee-saved register
29+
(Push r15)
2830
(Mov rbx rdi) ; recv heap pointer
2931
(init-symbol-table p)
3032
(compile-defines-values ds)
3133
(compile-e e (reverse (define-ids ds)) #f)
3234
(Add rsp (* 8 (length ds))) ;; pop function definitions
33-
(Pop rbx) ; restore callee-save register
35+
(Pop r15) ; restore callee-save register
36+
(Pop rbx)
3437
(Ret)
3538
(compile-defines ds)
3639
(compile-lambda-defines (lambdas p))

0 commit comments

Comments
 (0)