projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Insert error traps after full calls inferred not to return
[sbcl.git]
/
src
/
assembly
/
x86-64
/
support.lisp
diff --git
a/src/assembly/x86-64/support.lisp
b/src/assembly/x86-64/support.lisp
index
8f5e239
..
c56bf76
100644
(file)
--- a/
src/assembly/x86-64/support.lisp
+++ b/
src/assembly/x86-64/support.lisp
@@
-9,38
+9,35
@@
(in-package "SB!VM")
(in-package "SB!VM")
-(!def-vm-support-routine generate-call-sequence (name style vop)
+(defun generate-call-sequence (name style vop)
(ecase style
(:raw
(values
(ecase style
(:raw
(values
- `((inst lea r13-tn
+ `((inst lea temp-reg-tn
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
- (inst call r13-tn))
+ (inst call temp-reg-tn))
nil))
(:full-call
(values
`((note-this-location ,vop :call-site)
nil))
(:full-call
(values
`((note-this-location ,vop :call-site)
- (inst lea r13-tn
+ (inst lea temp-reg-tn
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
- (inst call r13-tn)
+ (inst call temp-reg-tn)
(note-this-location ,vop :single-value-return)
(note-this-location ,vop :single-value-return)
- (move rsp-tn rbx-tn))
+ (inst cmov :c rsp-tn rbx-tn))
'((:save-p :compute-only))))
(:none
(values
'((:save-p :compute-only))))
(:none
(values
- `((inst lea r13-tn
+ `((inst lea temp-reg-tn
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
(make-ea :qword :disp (make-fixup ',name :assembly-routine)))
- (inst jmp r13-tn))
+ (inst jmp temp-reg-tn))
nil))))
nil))))
-(!def-vm-support-routine generate-return-sequence (style)
+(defun generate-return-sequence (style)
(ecase style
(:raw
`(inst ret))
(:full-call
(ecase style
(:raw
`(inst ret))
(:full-call
- `(
- (inst pop rax-tn)
-
- (inst add rax-tn 3)
- (inst jmp rax-tn)))
+ `((inst clc)
+ (inst ret)))
(:none)))
(:none)))