From: Daniel B. <da...@us...> - 2005-02-08 00:28:09
|
Update of /cvsroot/sbcl/sbcl/src/runtime In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8357/src/runtime Modified Files: Tag: amd64-pthread-branch gencgc.c x86-64-assem.S Log Message: more nearly correct assembler glue should stop pthread_getspecific from trashing registers we were going to use Index: gencgc.c =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/gencgc.c,v retrieving revision 1.64.6.1 retrieving revision 1.64.6.2 diff -u -d -r1.64.6.1 -r1.64.6.2 --- gencgc.c 6 Feb 2005 00:00:37 -0000 1.64.6.1 +++ gencgc.c 8 Feb 2005 00:27:42 -0000 1.64.6.2 @@ -431,7 +431,7 @@ * e.g. boxed/unboxed, generation, ages; there may need to be many * allocation regions. * - * Each allocation region may be start within a partly used page. Many + * Each allocation region may start within a partly used page. Many * features of memory use are noted on a page wise basis, e.g. the * generation; so if a region starts within an existing allocated page * it must be consistent with this page. Index: x86-64-assem.S =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-64-assem.S,v retrieving revision 1.3.2.2 retrieving revision 1.3.2.3 diff -u -d -r1.3.2.2 -r1.3.2.3 --- x86-64-assem.S 6 Feb 2005 01:07:25 -0000 1.3.2.2 +++ x86-64-assem.S 8 Feb 2005 00:27:42 -0000 1.3.2.3 @@ -117,28 +117,26 @@ mov %rsp,%rbp # Establish new frame. Lstack: /* FIXME x86 saves FPU state here */ - push %rbx - push %r12 - push %r13 - push %r14 - push %r15 - push %rdi - push %rax + push %rbx /* these regs are callee-saved according to C + push %r12 * so must be preserved and restored when + push %r13 * the lisp function returns + push %r14 * + push %r15 */ + + mov %rsp,%rbx # remember current stack + push %rbx # Save entry stack on (maybe) new stack. + + push %rdi # args from C + push %rsi # + push %rdx # mov specials,%rdi call pthread_getspecific mov %rax,%r12 - pop %rax - pop %rdi + pop %rcx # num args + pop %rbx # arg vector + pop %rax # function ptr/lexenv - mov %rsp,%rbx # remember current stack - push %rbx # Save entry stack on (maybe) new stack. - - /* Establish Lisp args. */ - mov %rdi,%rax # lexenv? - mov %rsi,%rbx # address of arg vec - mov %rdx,%rcx # num args - xor %rdx,%rdx # clear any descriptor registers xor %rdi,%rdi # that we can't be sure we'll xor %rsi,%rsi # initialise properly. XX do r8-r15 too? @@ -183,8 +181,9 @@ pop %rbx /* FIXME Restore the NPX state. */ - pop %rbp # c-sp + /* return value is already in rax where lisp expects it */ + leave ret .size GNAME(call_into_lisp), . - GNAME(call_into_lisp) |