diff options
| author | root <root> | 2011-06-13 08:38:16 +0000 | 
|---|---|---|
| committer | root <root> | 2011-06-13 08:38:16 +0000 | 
| commit | 5f9f028d674003ab76fb109876736783e17a05d3 (patch) | |
| tree | 2d1915b57720d0e24d6c9237b0440d227664d465 | |
| parent | 1cd97aef46e75c9b47df834bdd360b634aa20a4e (diff) | |
*** empty log message ***
| -rw-r--r-- | coro.c | 108 | 
1 files changed, 50 insertions, 58 deletions
| @@ -126,74 +126,66 @@ trampoline (int sig)         /* http://blogs.msdn.com/freik/archive/2005/03/17/398200.aspx */         #if __amd64           #ifdef _WIN32 +           /* TODO: xmm6..15 also would need to be saved. sigh. */             #define NUM_SAVED 8 -           "\tpush %rsi\n" -           "\tpush %rdi\n" -           "\tpush %rbp\n" -           "\tpush %rbx\n" -           "\tpush %r12\n" -           "\tpush %r13\n" -           "\tpush %r14\n" -           "\tpush %r15\n" -           #if CORO_WIN_TIB -             "\tpush %gs:0x0\n" -             "\tpush %gs:0x8\n" -             "\tpush %gs:0xc\n" -           #endif -           "\tmov %rsp, (%rcx)\n" -           "\tmov (%rdx), %rsp\n" -           #if CORO_WIN_TIB -             "\tpop %gs:0xc\n" -             "\tpop %gs:0x8\n" -             "\tpop %gs:0x0\n" -           #endif -           "\tpop %r15\n" -           "\tpop %r14\n" -           "\tpop %r13\n" -           "\tpop %r12\n" -           "\tpop %rbx\n" -           "\tpop %rbp\n" -           "\tpop %rdi\n" -           "\tpop %rsi\n" +           #undef CORO_WIN_TIB +           "\tpushq %rsi\n" +           "\tpushq %rdi\n" +           "\tpushq %rbp\n" +           "\tpushq %rbx\n" +           "\tpushq %r12\n" +           "\tpushq %r13\n" +           "\tpushq %r14\n" +           "\tpushq %r15\n" +           "\tmovq %rsp, (%rcx)\n" +           "\tmovq (%rdx), %rsp\n" +           "\tpopq %r15\n" +           "\tpopq %r14\n" +           "\tpopq %r13\n" +           "\tpopq %r12\n" +           "\tpopq %rbx\n" +           "\tpopq %rbp\n" +           "\tpopq %rdi\n" +           "\tpopq %rsi\n"           #else             #define NUM_SAVED 6 -           "\tpush %rbp\n" -           "\tpush %rbx\n" -           "\tpush %r12\n" -           "\tpush %r13\n" -           "\tpush %r14\n" -           "\tpush %r15\n" -           "\tmov %rsp, (%rdi)\n" -           "\tmov (%rsi), %rsp\n" -           "\tpop %r15\n" -           "\tpop %r14\n" -           "\tpop %r13\n" -           "\tpop %r12\n" -           "\tpop %rbx\n" -           "\tpop %rbp\n" +           "\tpushq %rbp\n" +           "\tpushq %rbx\n" +           "\tpushq %r12\n" +           "\tpushq %r13\n" +           "\tpushq %r14\n" +           "\tpushq %r15\n" +           "\tmovq %rsp, (%rdi)\n" +           "\tmovq (%rsi), %rsp\n" +           "\tpopq %r15\n" +           "\tpopq %r14\n" +           "\tpopq %r13\n" +           "\tpopq %r12\n" +           "\tpopq %rbx\n" +           "\tpopq %rbp\n"           #endif         #elif __i386           #define NUM_SAVED 4 -         "\tpush %ebp\n" -         "\tpush %ebx\n" -         "\tpush %esi\n" -         "\tpush %edi\n" +         "\tpushl %ebp\n" +         "\tpushl %ebx\n" +         "\tpushl %esi\n" +         "\tpushl %edi\n"           #if CORO_WIN_TIB -           "\tpush %fs:0\n" -           "\tpush %fs:4\n" -           "\tpush %fs:8\n" +           "\tpushl %fs:0\n" +           "\tpushl %fs:4\n" +           "\tpushl %fs:8\n"           #endif -         "\tmov %esp, (%eax)\n" -         "\tmov (%edx), %esp\n" +         "\tmovl %esp, (%eax)\n" +         "\tmovl (%edx), %esp\n"           #if CORO_WIN_TIB -           "\tpop %fs:8\n" -           "\tpop %fs:4\n" -           "\tpop %fs:0\n" +           "\tpopl %fs:8\n" +           "\tpopl %fs:4\n" +           "\tpopl %fs:0\n"           #endif -         "\tpop %edi\n" -         "\tpop %esi\n" -         "\tpop %ebx\n" -         "\tpop %ebp\n" +         "\tpopl %edi\n" +         "\tpopl %esi\n" +         "\tpopl %ebx\n" +         "\tpopl %ebp\n"         #else           #error unsupported architecture         #endif | 
