X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Fx86-64-assem.S;h=02cbf26b55fed21c6ddda86f81fced0e0482810f;hb=afb24f64fe95ed8ebce578ba7526b8a0a7aa5f14;hp=8cfd582f71dd77dc63ae8af80908043da4f84fbc;hpb=1cf1afff10cfc48a2f4a26fd4533531081602219;p=sbcl.git diff --git a/src/runtime/x86-64-assem.S b/src/runtime/x86-64-assem.S index 8cfd582..02cbf26 100644 --- a/src/runtime/x86-64-assem.S +++ b/src/runtime/x86-64-assem.S @@ -105,9 +105,6 @@ .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,6 +179,10 @@ 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 @@ -190,6 +191,7 @@ Lstack: call GNAME(pthread_getspecific) mov %rax,%r12 #endif +#endif pop %rcx # num args pop %rbx # arg vector pop %rax # function ptr/lexenv @@ -236,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 */