]> sourceware.org Git - newlib-cygwin.git/commitdiff
* include/winnt.h (GetCurrentFiber): Support -masm=intel.
authorDanny Smith <dannysmith@users.sourceforge.net>
Mon, 8 Nov 2004 10:08:13 +0000 (10:08 +0000)
committerDanny Smith <dannysmith@users.sourceforge.net>
Mon, 8 Nov 2004 10:08:13 +0000 (10:08 +0000)
(GetFiberData): Likewise.
(NtCurrentTeb): Likewise.

winsup/w32api/ChangeLog
winsup/w32api/include/winnt.h

index a6ab54ed8051b921047233ee393cf58a4c2a7f6b..0f863cbe68f4d6dc6df265665534b35edc276723 100644 (file)
@@ -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.
index 0248313543074631bfc6fed9624ee441d16828cc..01fe572acf1fd7eb2117fa31315762dce39b0a93 100644 (file)
@@ -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]" \
This page took 0.044824 seconds and 5 git commands to generate.