50 lines
		
	
	
		
			789 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			789 B
		
	
	
	
		
			C
		
	
	
	
	
	
/* extern (library) versions of inline functions defined in winnt.h */
 | 
						|
 | 
						|
#if defined(__GNUC__)
 | 
						|
 | 
						|
void* GetCurrentFiber(void)
 | 
						|
{
 | 
						|
    void* ret;
 | 
						|
    __asm__ volatile (
 | 
						|
	"movl	%%fs:0x10,%0"
 | 
						|
	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
 | 
						|
	);
 | 
						|
    return ret;
 | 
						|
}
 | 
						|
 | 
						|
void* GetFiberData(void)
 | 
						|
{
 | 
						|
    void* ret;
 | 
						|
    __asm__ volatile (            
 | 
						|
	"movl	%%fs:0x10,%0\n"
 | 
						|
	"movl	(%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__ */
 |