File tree Expand file tree Collapse file tree 10 files changed +48
-18
lines changed
Expand file tree Collapse file tree 10 files changed +48
-18
lines changed Original file line number Diff line number Diff line change 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
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
Original file line number Diff line number Diff line change 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
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
Original file line number Diff line number Diff line change 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
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
Original file line number Diff line number Diff line change 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 )
Original file line number Diff line number Diff line change 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
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 )
Original file line number Diff line number Diff line change 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
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 )
Original file line number Diff line number Diff line change 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
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))
Original file line number Diff line number Diff line change 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
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))
Original file line number Diff line number Diff line change 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
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))
Original file line number Diff line number Diff line change 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
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))
You can’t perform that action at this time.
0 commit comments