X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-64-assem.S;h=79140e024e4ee9e9b01390dcecf89bb028404734;hb=9837343101c3da7b3a8f94609ec116ec5025436a;hp=8878f045709902aecfd1302b2ec705cfc933c22d;hpb=7244742c3a9478d13d813aaae8135973eb4b89aa;p=sbcl.git diff --git a/src/runtime/x86-64-assem.S b/src/runtime/x86-64-assem.S index 8878f04..79140e0 100644 --- a/src/runtime/x86-64-assem.S +++ b/src/runtime/x86-64-assem.S @@ -25,15 +25,15 @@ #include "genesis/thread.h" /* Minimize conditionalization for different OS naming schemes. */ -#if defined __linux__ || defined __FreeBSD__ /* (but *not* OpenBSD) */ +#if defined __linux__ || defined __FreeBSD__ || defined __OpenBSD__ || defined __sun #define GNAME(var) var #else #define GNAME(var) _##var #endif -/* Get the right type of alignment. Linux and FreeBSD (but not OpenBSD) +/* Get the right type of alignment. Linux, FreeBSD and OpenBSD * want alignment in bytes. */ -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun) #define align_4byte 4 #define align_8byte 8 #define align_16byte 16 @@ -209,10 +209,10 @@ Ldone: xor %rbx,%rbx # available /* Alloc new frame. */ - mov %rsp,%rbx # The current sp marks start of new frame. - push %rbp # fp in save location S0 - sub $16,%rsp # Ensure 3 slots are allocated, one above. - mov %rbx,%rbp # Switch to new frame. + push %rbp # Dummy for return address + push %rbp # fp in save location S1 + mov %rsp,%rbp # The current sp marks start of new frame. + sub $8,%rsp # Ensure 3 slots are allocated, two above. Lcall: call *CLOSURE_FUN_OFFSET(%rax) @@ -235,7 +235,7 @@ LsingleValue: /* FIXME Restore the NPX state. */ - /* return value is already in rax where lisp expects it */ + mov %rdx,%rax # c-val leave ret SIZE(GNAME(call_into_lisp))