]> sourceware.org Git - newlib-cygwin.git/commitdiff
* winbase.h: Turn on inline versions of Interlocked* by default.
authorChristopher Faylor <me@cgf.cx>
Sat, 14 Dec 2002 05:06:59 +0000 (05:06 +0000)
committerChristopher Faylor <me@cgf.cx>
Sat, 14 Dec 2002 05:06:59 +0000 (05:06 +0000)
* winbase.h: Fixup inline asm functions.  Add ilockcmpexch.

winsup/cygwin/ChangeLog
winsup/cygwin/string.h
winsup/cygwin/winbase.h

index e107aaed122522d2ecf53962e9f97d2913bfef5d..1a98713cd0797d951294e8da51cad0fe91f0595d 100644 (file)
@@ -1,3 +1,11 @@
+2002-12-14  Christopher Faylor  <cgf@redhat.com>
+
+       * winbase.h: Turn on inline versions of Interlocked* by default.
+
+2002-12-14  Gary R. Van Sickle <g.r.vansickle@worldnet.att.net>
+
+       * winbase.h: Fixup inline asm functions.  Add ilockcmpexch.
+
 2002-12-13  Christopher Faylor  <cgf@redhat.com>
 
        Throughout, change fhandler_*::read and fhandler_*::raw_read to void
index 778bb40acea09f42ab9515adda9f3f14211cd7e5..6e410249b3ca046b799ab8d6502226b7c6cf700b 100644 (file)
@@ -24,15 +24,15 @@ strchr (const char *s, int c)
 {
   register char * res;
   __asm__ __volatile__ ("\
-               movb    %%al,%%ah\n\
-       1:      movb    (%1),%%al\n\
-               cmpb    %%ah,%%al\n\
-               je      2f\n\
-               incl    %1\n\
-               testb   %%al,%%al\n\
-               jne     1b\n\
-               xorl    %1,%1\n\
-       2:      movl    %1,%0\n\
+       movb    %%al,%%ah\n\
+1:     movb    (%1),%%al\n\
+       cmpb    %%ah,%%al\n\
+       je      2f\n\
+       incl    %1\n\
+       testb   %%al,%%al\n\
+       jne     1b\n\
+       xorl    %1,%1\n\
+2:     movl    %1,%0\n\
        ":"=a" (res), "=r" (s)
        :"0" (c), "1" (s));
   return res;
index 15d16a4292b1876569452effb12b0f11bdb63e39..351d320a4db30a94d29b094ec352d941d7e3b8e7 100644 (file)
@@ -1,43 +1,50 @@
 #include_next "winbase.h"
 
-#ifdef EXPCGF
-#define DECLARE_TLS_STORAGE char **tls[4096] __attribute__ ((unused))
-#else
-#define DECLARE_TLS_STORAGE do {} while (0)
-#define _WINBASE2_H
-#endif
-
 #ifndef _WINBASE2_H
 #define _WINBASE2_H
 
-extern __inline__ long ilockincr (long *m)
+extern __inline__ long
+ilockincr (long *m)
 {
   register int __res;
   __asm__ __volatile__ ("\n\
        movl    $1,%0\n\
        lock    xadd %0,(%1)\n\
        inc     %0\n\
-       ": "=a" (__res), "=r" (m): "1" (m));
+       ": "=a" (__res), "=q" (m): "1" (m));
   return __res;
 }
-extern __inline__ long ilockdecr (long *m)
+
+extern __inline__ long
+ilockdecr (long *m)
 {
   register int __res;
   __asm__ __volatile__ ("\n\
        movl    $0xffffffff,%0\n\
        lock    xadd %0,(%1)\n\
        dec     %0\n\
-       ": "=a" (__res), "=r" (m): "1" (m));
+       ": "=a" (__res), "=q" (m): "1" (m));
   return __res;
 }
-extern __inline__ long ilockexch (long *t, long v)
+
+extern __inline__ long
+ilockexch (long *t, long v)
 {
   register int __res;
   __asm__ __volatile__ ("\n\
-       movl    (%2),%0\n\
 1:     lock    cmpxchgl %3,(%1)\n\
        jne 1b\n\
-       ": "=a" (__res), "=c" (t): "1" (t), "d" (v));
+       ": "=a" (__res), "=q" (t): "1" (t), "q" (v), "0" (*t));
+  return __res;
+}
+
+extern __inline__ long
+ilockcmpexch (long *t, long v, long c)
+{
+  register int __res;
+  __asm__ __volatile__ ("\n\
+       lock cmpxchgl %3,(%1)\n\
+       ": "=a" (__res), "=q" (t) : "1" (t), "q" (v), "0" (c));
   return __res;
 }
 
@@ -47,7 +54,13 @@ extern __inline__ long ilockexch (long *t, long v)
 #define InterlockedDecrement ilockdecr
 #undef InterlockedExchange
 #define InterlockedExchange ilockexch
+#undef InterlockedCompareExchange
+#define InterlockedCompareExchange ilockcmpexch
 
+#ifndef EXPCGf
+#define DECLARE_TLS_STORAGE do {} while (0)
+#else
+#define DECLARE_TLS_STORAGE char **tls[4096] __attribute__ ((unused))
 extern long tls_ix;
 extern char * volatile *__stackbase __asm__ ("%fs:4");
 
@@ -87,4 +100,5 @@ my_tlsfree (DWORD ix)
 #define TlsSetValue my_tlssetvalue
 #undef TlsFree
 #define TlsFree my_tlsfree
+#endif /*EXPCGF*/
 #endif /*_WINBASE2_H*/
This page took 0.042991 seconds and 5 git commands to generate.