projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.9.15.4:
[sbcl.git]
/
src
/
runtime
/
x86-64-assem.S
diff --git
a/src/runtime/x86-64-assem.S
b/src/runtime/x86-64-assem.S
index
dbabd4d
..
92e0716
100644
(file)
--- a/
src/runtime/x86-64-assem.S
+++ b/
src/runtime/x86-64-assem.S
@@
-60,6
+60,10
@@
.global GNAME(call_into_c)
.type GNAME(call_into_c),@function
GNAME(call_into_c):
.global GNAME(call_into_c)
.type GNAME(call_into_c),@function
GNAME(call_into_c):
+ /* ABI requires that the direction flag be clear on function
+ * entry and exit. */
+ cld
+
push %rbp # Save old frame pointer.
mov %rsp,%rbp # Establish new frame.
push %rbp # Save old frame pointer.
mov %rsp,%rbp # Establish new frame.
@@
-166,8
+170,9
@@
Lcall:
/* If the function returned multiple values, it will return to
this point. Lose them */
/* If the function returned multiple values, it will return to
this point. Lose them */
+ jnc LsingleValue
mov %rbx, %rsp
mov %rbx, %rsp
- /* A singled value function returns here */
+LsingleValue:
/* Restore the stack, in case there was a stack change. */
pop %rsp # c-sp
/* Restore the stack, in case there was a stack change. */
pop %rsp # c-sp
@@
-179,6
+184,10
@@
Lcall:
pop %r12
pop %rbx
pop %r12
pop %rbx
+ /* ABI requires that the direction flag be clear on function
+ * entry and exit. */
+ cld
+
/* FIXME Restore the NPX state. */
/* return value is already in rax where lisp expects it */
/* FIXME Restore the NPX state. */
/* return value is already in rax where lisp expects it */
@@
-282,11
+291,7
@@
GNAME(closure_tramp):
.align align_8byte
GNAME(fun_end_breakpoint_guts):
/* Multiple Value return */
.align align_8byte
GNAME(fun_end_breakpoint_guts):
/* Multiple Value return */
- jmp multiple_value_return
- /* the above jmp is only 2 bytes long, we need to add a nop for
- * padding since the single value return convention jumps to original
- * return address + 3 bytes */
- nop
+ jc multiple_value_return
/* Single value return: The eventual return will now use the
multiple values return convention but with a return values
count of one. */
/* Single value return: The eventual return will now use the
multiple values return convention but with a return values
count of one. */
@@
-384,5
+389,4
@@
Lend:
ret
.size GNAME(fast_bzero), .-GNAME(fast_bzero)
ret
.size GNAME(fast_bzero), .-GNAME(fast_bzero)
-
\f
.end
.end