1.0.16.22: FIXED-ALLOC to use MAYBE-PSEUDO-ATOMIC on x86 and x86-64.
[sbcl.git] / src / runtime / x86-64-assem.S
index 2e8e1c7..02cbf26 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.
 
@@ -182,10 +179,19 @@ Lstack:
        push    %rsi    #
        push    %rdx    #
 #ifdef LISP_FEATURE_SB_THREAD
+#ifdef LISP_FEATURE_GCC_TLS
+       movq    %fs:0, %rax
+       movq    GNAME(current_thread)@TPOFF(%rax), %r12
+#else
+#ifdef LISP_FEATURE_DARWIN
+       mov     GSYM(GNAME(specials)),%rdi
+#else
        mov     specials,%rdi
-       call    pthread_getspecific
+#endif
+       call    GNAME(pthread_getspecific)
        mov     %rax,%r12
 #endif
+#endif
        pop     %rcx    # num args
        pop     %rbx    # arg vector
        pop     %rax    # function ptr/lexenv
@@ -232,10 +238,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 */
@@ -267,7 +269,7 @@ GNAME(fpu_restore):
  * the undefined-function trampoline
  */
        .text
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
        .globl  GNAME(undefined_tramp)
        TYPE(GNAME(undefined_tramp))
 GNAME(undefined_tramp):
@@ -281,7 +283,7 @@ GNAME(undefined_tramp):
 
 
        .text
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
        .globl  GNAME(alloc_tramp)
        TYPE(GNAME(alloc_tramp))
 GNAME(alloc_tramp):
@@ -317,7 +319,7 @@ GNAME(alloc_tramp):
  * the closure trampoline
  */
        .text
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
        .globl  GNAME(closure_tramp)
        TYPE(GNAME(closure_tramp))
 GNAME(closure_tramp):
@@ -332,7 +334,7 @@ GNAME(closure_tramp):
        SIZE(GNAME(closure_tramp))
 
        .text
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
        .globl  GNAME(funcallable_instance_tramp)
 #if !defined(LISP_FEATURE_DARWIN)
         .type  GNAME(funcallable_instance_tramp),@function
@@ -350,7 +352,7 @@ GNAME(closure_tramp):
  */
        .text
        .globl  GNAME(fun_end_breakpoint_guts)
-       .align  align_8byte
+       .align  align_16byte
 GNAME(fun_end_breakpoint_guts):
        /* Multiple Value return */
        jc      multiple_value_return
@@ -381,7 +383,7 @@ GNAME(fun_end_breakpoint_end):
 \f
        .globl  GNAME(do_pending_interrupt)
        TYPE(GNAME(do_pending_interrupt))
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
 GNAME(do_pending_interrupt):
        TRAP
        .byte   trap_PendingInterrupt
@@ -390,7 +392,7 @@ GNAME(do_pending_interrupt):
 \f
        .globl  GNAME(post_signal_tramp)
        TYPE(GNAME(post_signal_tramp))
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
 GNAME(post_signal_tramp):
        /* this is notionally the second half of a function whose first half
         * doesn't exist.  This is where call_into_lisp returns when called 
@@ -416,7 +418,7 @@ GNAME(post_signal_tramp):
        SIZE(GNAME(post_signal_tramp))
 \f
        .text
-       .align  align_8byte,0x90
+       .align  align_16byte,0x90
        .globl  GNAME(fast_bzero)
        TYPE(GNAME(fast_bzero))