* include/winnt.h (GetCurrentFiber): Support -masm=intel.
(GetFiberData): Likewise. (NtCurrentTeb): Likewise.
This commit is contained in:
		| @@ -1,3 +1,9 @@ | ||||
| 2004-11-08  Danny Smith  <dannysmith@users.sourceforge.net> | ||||
|  | ||||
| 	* include/winnt.h (GetCurrentFiber): Support -masm=intel. | ||||
| 	(GetFiberData): Likewise. | ||||
| 	(NtCurrentTeb): Likewise. | ||||
|  | ||||
| 2004-11-04  Danny Smith  <dannysmith@users.sourceforge.net> | ||||
|  | ||||
| 	* include/wingdi.h (NIF_INFO): Add define. | ||||
|   | ||||
| @@ -3324,9 +3324,48 @@ typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX; | ||||
| ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE); | ||||
| #endif | ||||
|  | ||||
| #if defined(__GNUC__) | ||||
|  | ||||
| PVOID GetCurrentFiber(void); | ||||
| PVOID GetFiberData(void); | ||||
|  | ||||
| #if defined(__GNUC__) | ||||
| #if (__GNUC__ >= 3) | ||||
| /* Support -masm=intel.  */ | ||||
| extern __inline__ PVOID GetCurrentFiber(void) | ||||
| { | ||||
|     void* ret; | ||||
|     __asm__ __volatile__ ( | ||||
| 	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}" | ||||
| 	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ | ||||
| 	); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| extern __inline__ PVOID GetFiberData(void) | ||||
| { | ||||
|     void* ret; | ||||
|     __asm__ __volatile__ ( | ||||
| 	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}\n\t" | ||||
| 	"mov{l}	{(%0),%0|%0,[%0]}" | ||||
| 	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ | ||||
| 	); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static __inline__ struct _TEB * NtCurrentTeb(void) | ||||
| { | ||||
|     struct _TEB *ret; | ||||
|  | ||||
|     __asm__ __volatile__ ( | ||||
|         "mov{l} {%%fs:0x18,%0|%0,%%fs:0x18}\n" | ||||
|         : "=r" (ret) | ||||
|         : /* no inputs */ | ||||
|     ); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| #else /* __GNUC__ >= 3 */ | ||||
| extern __inline__ PVOID GetCurrentFiber(void) | ||||
| { | ||||
|     void* ret; | ||||
| @@ -3337,12 +3376,11 @@ extern __inline__ PVOID GetCurrentFiber(void) | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| PVOID GetFiberData(void); | ||||
| extern __inline__ PVOID GetFiberData(void) | ||||
| { | ||||
|     void* ret; | ||||
|     __asm__ __volatile__ ( | ||||
| 	"movl	%%fs:0x10,%0\n" | ||||
| 	"movl	%%fs:0x10,%0\n\t" | ||||
| 	"movl	(%0),%0" | ||||
| 	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */ | ||||
| 	); | ||||
| @@ -3358,19 +3396,17 @@ static __inline__ struct _TEB * NtCurrentTeb(void) | ||||
|         : "=r" (ret) | ||||
|         : /* no inputs */ | ||||
|     ); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
| #endif /* __GNUC__ >= 3 */ | ||||
|  | ||||
| #else | ||||
|  | ||||
| extern PVOID GetCurrentFiber(void); | ||||
| #pragma aux GetCurrentFiber = \ | ||||
|         "mov	eax, dword ptr fs:0x10" \ | ||||
|         value [eax] \ | ||||
|         modify [eax]; | ||||
|  | ||||
| extern PVOID GetFiberData(void); | ||||
| #pragma aux GetFiberData = \ | ||||
| 	"mov	eax, dword ptr fs:0x10" \ | ||||
| 	"mov	eax, [eax]" \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user