1.0.22.15: 16 byte align assembly routines on x86 and x86-64
[sbcl.git] / src / runtime / x86-64-assem.S
index 42d21da..85d5238 100644 (file)
        .globl  GNAME(call_into_c)
        TYPE(GNAME(call_into_c))
 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.
 
@@ -146,10 +143,7 @@ GNAME(call_into_lisp_first_time):
 #else
         movq    GNAME(all_threads),%rax
 #endif
-       mov     THREAD_CONTROL_STACK_START_OFFSET(%rax) ,%rsp
-       /* don't think too hard about what happens if we get interrupted
-       * here */
-        add    $(THREAD_CONTROL_STACK_SIZE)-16,%rsp
+       mov     THREAD_CONTROL_STACK_END_OFFSET(%rax) ,%rsp
        jmp     Lstack
 \f
        .text   
@@ -241,10 +235,6 @@ LsingleValue:
        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 */
@@ -256,19 +246,17 @@ LsingleValue:
        .text
        .globl  GNAME(fpu_save)
        TYPE(GNAME(fpu_save))
-       .align  2,0x90
+       .align  align_16byte,0x90
 GNAME(fpu_save):
-       mov     4(%rsp),%rax
-       fnsave  (%rax)          # Save the NPX state. (resets NPX)
+       fnsave  (%rdi)          # Save the NPX state. (resets NPX)
        ret
        SIZE(GNAME(fpu_save))
 
        .globl  GNAME(fpu_restore)
        TYPE(GNAME(fpu_restore))
-       .align  2,0x90
+       .align  align_16byte,0x90
 GNAME(fpu_restore):
-       mov     4(%rsp),%rax
-       frstor  (%rax)          # Restore the NPX state.
+       frstor  (%rdi)          # Restore the NPX state.
        ret
        SIZE(GNAME(fpu_restore))
 \f
@@ -379,6 +367,7 @@ GNAME(fun_end_breakpoint_guts):
 multiple_value_return:
        
        .globl  GNAME(fun_end_breakpoint_trap)
+       .align  align_16byte,0x90
 GNAME(fun_end_breakpoint_trap):
        TRAP
        .byte   trap_FunEndBreakpoint