X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-assem.S;h=f5c6b63037bbf850b9013fd575cab763a3cdfd48;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=0669b4446e375481fc192c95a08705a668a0aa1e;hpb=629e57661251d3879177bcf52040d1380f7bbfe3;p=sbcl.git diff --git a/src/runtime/x86-assem.S b/src/runtime/x86-assem.S index 0669b44..f5c6b63 100644 --- a/src/runtime/x86-assem.S +++ b/src/runtime/x86-assem.S @@ -163,7 +163,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 +223,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 @@ -672,6 +672,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 */