diff options
| author | root <root> | 2011-06-13 09:00:15 +0000 | 
|---|---|---|
| committer | root <root> | 2011-06-13 09:00:15 +0000 | 
| commit | fd8d33edb517daa60a65724494b9ce8a6226f89a (patch) | |
| tree | b746e5c4e258a35abb93ca28f98c1b151fa6888b | |
| parent | 5f9f028d674003ab76fb109876736783e17a05d3 (diff) | |
*** empty log message ***rel-6_0
| -rw-r--r-- | coro.c | 22 | 
1 files changed, 17 insertions, 5 deletions
| @@ -117,18 +117,20 @@ trampoline (int sig)  # if CORO_ASM +  #if _WIN32 +    #define CORO_WIN_TIB 1 +  #endif +    asm ( -       ".text\n" -       ".globl coro_transfer\n" -       ".type coro_transfer, @function\n" +       "\t.text\n" +       "\t.globl coro_transfer\n"         "coro_transfer:\n"         /* windows, of course, gives a shit on the amd64 ABI and uses different registers */         /* http://blogs.msdn.com/freik/archive/2005/03/17/398200.aspx */         #if __amd64 -         #ifdef _WIN32 +         #ifdef WIN32             /* TODO: xmm6..15 also would need to be saved. sigh. */             #define NUM_SAVED 8 -           #undef CORO_WIN_TIB             "\tpushq %rsi\n"             "\tpushq %rdi\n"             "\tpushq %rbp\n" @@ -137,8 +139,18 @@ trampoline (int sig)             "\tpushq %r13\n"             "\tpushq %r14\n"             "\tpushq %r15\n" +           #if CORO_WIN_TIB +             "\tpushq %fs:0x0\n" +             "\tpushq %fs:0x8\n" +             "\tpushq %fs:0xc\n" +           #endif             "\tmovq %rsp, (%rcx)\n"             "\tmovq (%rdx), %rsp\n" +           #if CORO_WIN_TIB +             "\tpopq %fs:0xc\n" +             "\tpopq %fs:0x8\n" +             "\tpopq %fs:0x0\n" +           #endif             "\tpopq %r15\n"             "\tpopq %r14\n"             "\tpopq %r13\n" | 
