diff -urpN src.old/winsup/cygwin/Makefile.in src/winsup/cygwin/Makefile.in --- src.old/winsup/cygwin/Makefile.in Tue Aug 6 16:27:49 2002 +++ src/winsup/cygwin/Makefile.in Thu Aug 8 14:03:03 2002 @@ -135,7 +135,7 @@ DLL_OFILES:=assert.o autoload.o cygheap. select.o shared.o shm.o shortcut.o signal.o sigproc.o smallprint.o \ spawn.o strace.o strsep.o sync.o syscalls.o sysconf.o syslog.o \ termios.o thread.o times.o tty.o uinfo.o uname.o v8_regexp.o \ - v8_regerror.o v8_regsub.o wait.o wincap.o window.o \ + v8_regerror.o v8_regsub.o wait.o winbase.o wincap.o window.o \ $(EXTRA_DLL_OFILES) $(EXTRA_OFILES) $(MALLOC_OFILES) $(MT_SAFE_OBJECTS) GMON_OFILES:=gmon.o mcount.o profil.o diff -urpN src.old/winsup/cygwin/winbase.c src/winsup/cygwin/winbase.c --- src.old/winsup/cygwin/winbase.c Thu Jan 1 01:00:00 1970 +++ src/winsup/cygwin/winbase.c Thu Aug 8 14:03:00 2002 @@ -0,0 +1,55 @@ +#include "winsup.h" + +#ifndef __NO_INTERLOCKED__ + +long ilockincr (long *m) +{ + int __res; + __asm__("\n\ + movl $1,%0\n\ + lock xadd %0,(%1)\n\ + inc %0\n" + : "=a" (__res), "=q" (m) + : "1" (m) + : "memory" ); + return __res; +} + +long ilockdecr (long *m) +{ + int __res; + __asm__("\n\ + movl $0xffffffff,%0\n\ + lock xadd %0,(%1)\n\ + dec %0\n" + : "=a" (__res), "=q" (m) + : "1" (m) + : "memory" ); + return __res; +} + +long ilockexch (long *t, long v) +{ + int __res; + __asm__("\n\ + movl (%1),%0\n\ +1: lock cmpxchgl %3,(%1)\n\ + jne 1b\n" + : "=a" (__res), "=q" (t) + : "1" (t), "q" (v) + : "memory" ); + return __res; +} + +long ilockcmpexch (long *t, long v, long c) +{ + int __res; + __asm__("\n\ + lock cmpxchgl %3,(%1)\n" + : "=a" (__res), "=q" (t) + : "1" (t), "q" (v), "0" (c) + : "memory" ); + return __res; +} + +#endif /*__NO_INTERLOCKED__*/ diff -urpN src.old/winsup/cygwin/winbase.h src/winsup/cygwin/winbase.h --- src.old/winsup/cygwin/winbase.h Mon Jun 24 17:52:17 2002 +++ src/winsup/cygwin/winbase.h Thu Aug 8 14:03:01 2002 @@ -7,39 +7,23 @@ #define _WINBASE2_H #endif -#ifndef _WINBASE2_H -#define _WINBASE2_H +#if defined(__INSIDE_CYGWIN__) && !defined (__NO_INTERLOCKED__) -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)); - return __res; -} -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)); - return __res; -} -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)); - return __res; +#ifndef __INTERLOCKED_DEFINED__ +#define __INTERLOCKED_DEFINED__ + +#ifdef __cplusplus +extern "C" { +#endif + +long ilockincr (long *m); +long ilockdecr (long *m); +long ilockexch (long *t, long v); +long ilockcmpexch (long *t, long v, long c); + +#ifdef __cplusplus } +#endif #undef InterlockedIncrement #define InterlockedIncrement ilockincr @@ -47,6 +31,15 @@ extern __inline__ long ilockexch (long * #define InterlockedDecrement ilockdecr #undef InterlockedExchange #define InterlockedExchange ilockexch +#undef InterlockedCompareExchange +#define InterlockedCompareExchange ilockcmpexch + +#endif /*__INTERLOCKED_DEFINED__*/ + +#endif /*defined(__INSIDE_CYGWIN__) && !defined (__NO_INTERLOCKED__)*/ + +#ifndef _WINBASE2_H +#define _WINBASE2_H extern long tls_ix; extern char * volatile *__stackbase __asm__ ("%fs:4");