fstp %st(0)
fstp %st(0)
- cld # clear out DF: Darwin, Solaris and Win32 at
- # least need this, and it should not hurt others
-
call *%eax # normal callout using Lisp stack
movl %eax,%ecx # remember integer return value
/* Check for a return FP value. */
fxam
- fnstsw %eax
+ fnstsw %ax
andl $0x4500,%eax
cmpl $0x4100,%eax
jne Lfp_rtn_value
#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
andl $0xfffffff0,%esp; /* Align stack */ \
pushl $0; /* Padding */ \
pushl size; /* Argument to alloc */ \
- cld; /* Clear DF */ \
call GNAME(alloc); \
movl %ebp,%esp; /* Restore ESP from EBP */ \
popl %ebp; /* Restore EBP */
#else
#define ALLOC(size) \
pushl size; /* Argument to alloc */ \
- cld; /* Clear DF */ \
call GNAME(alloc); \
addl $4,%esp; /* Pop argument */
#endif
xor %eax, %eax /* Zero EAX */
shr $2, %ecx /* Amount of 4-byte blocks to copy */
jz Lend_base
- cld /* Set direction of STOSL to increment */
rep
stosl /* Store EAX to *EDI, ECX times, incrementing
\f
END()
-
\ No newline at end of file