X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-assem.S;h=a1b1385aa83641826618d91712dcf6b78e1cb932;hb=037b95d81ad246aca72388ce7315df972e9545f5;hp=0669b4446e375481fc192c95a08705a668a0aa1e;hpb=629e57661251d3879177bcf52040d1380f7bbfe3;p=sbcl.git diff --git a/src/runtime/x86-assem.S b/src/runtime/x86-assem.S index 0669b44..a1b1385 100644 --- a/src/runtime/x86-assem.S +++ b/src/runtime/x86-assem.S @@ -22,16 +22,29 @@ #include "genesis/symbol.h" #include "genesis/thread.h" -/* Minimize conditionalization for different OS naming schemes. */ -#if defined __linux__ || defined __FreeBSD__ /* (but *not* OpenBSD) */ +/* Minimize conditionalization for different OS naming schemes. + * + * (As of sbcl-0.8.10, this seems no longer to be much of an issue, + * since everyone has converged on ELF. If this generality really + * turns out not to matter, perhaps it's just clutter we could get + * rid of? -- WHN 2004-04-18) + */ +#if defined __linux__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ #define GNAME(var) var #else #define GNAME(var) _##var #endif -/* Get the right type of alignment. Linux and FreeBSD (but not OpenBSD) - * want alignment in bytes. */ -#if defined(__linux__) || defined(__FreeBSD__) +/* Get the right type of alignment. Linux, FreeBSD and NetBSD (but not OpenBSD) + * want alignment in bytes. + * + * (As in the GNAME() definitions above, as of sbcl-0.8.10, this seems + * no longer to be much of an issue, since everyone has converged on + * the same value. If this generality really turns out not to + * matter any more, perhaps it's just clutter we could get + * rid of? -- WHN 2004-04-18) + */ +#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) #define align_4byte 4 #define align_8byte 8 #define align_16byte 16 @@ -44,7 +57,6 @@ .text .global GNAME(foreign_function_call_active) .global GNAME(all_threads) - /* * A call to call_into_c preserves esi, edi, and ebp. @@ -163,7 +175,7 @@ Lstack: /* Save the NPX state */ fwait # Catch any pending NPX exceptions. subl $108,%esp # Make room for the NPX state. - fnsave (%esp) # resets NPX + fnsave (%esp) # save and reset NPX movl (%esp),%eax # Load NPX control word. andl $0xfffff3ff,%eax # Set rounding mode to nearest. @@ -223,12 +235,12 @@ Ldone: sub $8,%esp # Ensure 3 slots are allocated, one above. mov %ebx,%ebp # Switch to new frame. - /* Indirect the closure. */ call *CLOSURE_FUN_OFFSET(%eax) - /* Multi-value return; blow off any extra values. */ + /* If the function returned multiple values, it will return to + this point. Lose them */ mov %ebx, %esp - /* single value return */ + /* A singled value function returns here */ /* Restore the stack, in case there was a stack change. */ popl %esp # c-sp @@ -340,30 +352,6 @@ GNAME(do_pending_interrupt): ret .size GNAME(do_pending_interrupt),.-GNAME(do_pending_interrupt) -#ifdef LISP_FEATURE_GENCGC -/* This is a fast bzero using the FPU. The first argument is the start - * address which needs to be aligned on an 8 byte boundary, the second - * argument is the number of bytes, which must be a nonzero multiple - * of 8 bytes. */ -/* FIXME whether this is still faster than using the OS's bzero or - * equivalent, we don't know */ - .text - .globl GNAME(i586_bzero) - .type GNAME(i586_bzero),@function - .align align_4byte,0x90 -GNAME(i586_bzero): - movl 4(%esp),%edx # Load the start address. - movl 8(%esp),%eax # Load the number of bytes. - fldz -l1: fstl 0(%edx) - addl $8,%edx - subl $8,%eax - jnz l1 - fstp %st(0) - ret - .size GNAME(i586_bzero),.-GNAME(i586_bzero) -#endif - /* * Allocate bytes and return the start of the allocated space @@ -672,6 +660,20 @@ GNAME(alloc_16_to_edi): .size GNAME(alloc_16_to_edi),.-GNAME(alloc_16_to_edi) + .align align_4byte,0x90 + .globl GNAME(post_signal_tramp) + .type GNAME(post_signal_tramp),@function +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 + * using return_to_lisp_function */ + addl $12,%esp /* clear call_into_lisp args from stack */ + popa /* restore registers */ + popl %ebp + ret + .size GNAME(post_signal_tramp),.-GNAME(post_signal_tramp) + + #ifdef GENCGC_INLINE_ALLOC /* LISP_FEATURE_GENCGC */