X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-assem.S;h=4a5090ce9606c646d58564223dd016b09123da24;hb=2c06e3056fe6aa820817a927fa0e840eb7b8edb7;hp=e90f9720cab6e665d1998728264bc04beed4b077;hpb=1a19da9ff50a45962fc2cf42c7a241a2ce97a364;p=sbcl.git diff --git a/src/runtime/x86-assem.S b/src/runtime/x86-assem.S index e90f972..4a5090c 100644 --- a/src/runtime/x86-assem.S +++ b/src/runtime/x86-assem.S @@ -127,7 +127,7 @@ GNAME(call_into_c): /* Check for a return FP value. */ fxam - fnstsw %eax + fnstsw %ax andl $0x4500,%eax cmpl $0x4100,%eax jne Lfp_rtn_value @@ -185,10 +185,8 @@ GNAME(call_into_lisp_first_time): #ifndef LISP_FEATURE_WIN32 movl %esp,ALIEN_STACK + SYMBOL_VALUE_OFFSET movl GNAME(all_threads),%eax - movl THREAD_CONTROL_STACK_START_OFFSET(%eax) ,%esp - /* don't think too hard about what happens if we get interrupted - * here */ - addl $(THREAD_CONTROL_STACK_SIZE),%esp + /* pthread machinery takes care of this for other threads */ + movl THREAD_CONTROL_STACK_END_OFFSET(%eax) ,%esp #else /* Win32 -really- doesn't like you switching stacks out from under it. */ movl GNAME(all_threads),%eax @@ -437,9 +435,9 @@ GNAME(do_pending_interrupt): #define ALLOC(size) \ pushl %ebp; /* Save EBP */ \ movl %esp,%ebp; /* Save ESP to EBP */ \ - andl $0xfffffff0,%esp; /* Align stack */ \ - pushl $0; /* Padding */ \ - pushl size; /* Argument to alloc */ \ + pushl $0; /* Reserve space for arg */ \ + andl $0xfffffff0,%esp; /* Align stack to 16bytes */ \ + movl size, (%esp); /* Argument to alloc */ \ call GNAME(alloc); \ movl %ebp,%esp; /* Restore ESP from EBP */ \ popl %ebp; /* Restore EBP */