/* extern (library) versions of inline functions defined in winnt.h */ | |
#if 0 | |
#if defined(__GNUC__) | |
void* GetCurrentFiber(void) | |
{ | |
void* ret; | |
__asm__ volatile ( | |
"movq %%fs:0x10,%0" | |
: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ | |
); | |
return ret; | |
} | |
void* GetFiberData(void) | |
{ | |
void* ret; | |
__asm__ volatile ( | |
"movq %%fs:0x10,%0\n" | |
"movq (%0),%0" | |
: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ | |
); | |
return ret; | |
} | |
#elif !defined (__WATCOMC__) | |
void* GetCurrentFiber(void) | |
{ | |
void* res; | |
_asm { | |
mov eax, dword ptr fs:0x10 | |
mov res, eax | |
}; | |
return res; | |
} | |
void* GetFiberData(void) | |
{ | |
void* res; | |
_asm { | |
mov eax, dword ptr fs:0x10 | |
mov eax, [eax] | |
mov res, eax | |
}; | |
return res; | |
} | |
#endif /* __GNUC__ */ | |
#endif |