* winbase.h: Throughout use LONG rather than long type to prepare for

64 bit.
	(InterlockedCompareExchangePointer): Define.
This commit is contained in:
Corinna Vinschen 2012-07-06 13:51:26 +00:00
parent 6f94526c1c
commit f3a43e7ef0
2 changed files with 26 additions and 15 deletions

View File

@ -1,3 +1,9 @@
2012-07-06 Corinna Vinschen <corinna@vinschen.de>
* winbase.h: Throughout use LONG rather than long type to prepare for
64 bit.
(InterlockedCompareExchangePointer): Define.
2012-07-06 Corinna Vinschen <corinna@vinschen.de> 2012-07-06 Corinna Vinschen <corinna@vinschen.de>
* fhandler_registry.cc (RegOpenUserClassesRoot): Only define when * fhandler_registry.cc (RegOpenUserClassesRoot): Only define when

View File

@ -14,10 +14,10 @@ details. */
/* For some unknown reason, InterlockedAdd is only supported on Itanium /* For some unknown reason, InterlockedAdd is only supported on Itanium
when using the Windows headers. Fortunately we're not restricted to the when using the Windows headers. Fortunately we're not restricted to the
Windows headers :) */ Windows headers :) */
extern __inline__ long extern __inline__ LONG
ilockadd (volatile long *m, long value) ilockadd (volatile LONG *m, LONG value)
{ {
register int __res; register LONG __res;
__asm__ __volatile__ ("\n\ __asm__ __volatile__ ("\n\
movl %3,%0\n\ movl %3,%0\n\
lock xadd %0,%1\n\ lock xadd %0,%1\n\
@ -26,10 +26,10 @@ ilockadd (volatile long *m, long value)
return __res; return __res;
} }
extern __inline__ long extern __inline__ LONG
ilockincr (volatile long *m) ilockincr (volatile LONG *m)
{ {
register int __res; register LONG __res;
__asm__ __volatile__ ("\n\ __asm__ __volatile__ ("\n\
movl $1,%0\n\ movl $1,%0\n\
lock xadd %0,%1\n\ lock xadd %0,%1\n\
@ -38,10 +38,10 @@ ilockincr (volatile long *m)
return __res; return __res;
} }
extern __inline__ long extern __inline__ LONG
ilockdecr (volatile long *m) ilockdecr (volatile LONG *m)
{ {
register int __res; register LONG __res;
__asm__ __volatile__ ("\n\ __asm__ __volatile__ ("\n\
movl $0xffffffff,%0\n\ movl $0xffffffff,%0\n\
lock xadd %0,%1\n\ lock xadd %0,%1\n\
@ -50,12 +50,12 @@ ilockdecr (volatile long *m)
return __res; return __res;
} }
extern __inline__ long extern __inline__ LONG
ilockexch (volatile long *t, long v) ilockexch (volatile LONG *t, long v)
{ {
return return
({ ({
register long ret __asm ("%eax"); register LONG ret __asm ("%eax");
__asm __volatile ("\n" __asm __volatile ("\n"
"1: lock cmpxchgl %2, %1\n" "1: lock cmpxchgl %2, %1\n"
" jne 1b\n" " jne 1b\n"
@ -66,12 +66,12 @@ ilockexch (volatile long *t, long v)
}); });
} }
extern __inline__ long extern __inline__ LONG
ilockcmpexch (volatile long *t, long v, long c) ilockcmpexch (volatile LONG *t, LONG v, LONG c)
{ {
return return
({ ({
register long ret __asm ("%eax"); register LONG ret __asm ("%eax");
__asm __volatile ("lock cmpxchgl %2, %1" __asm __volatile ("lock cmpxchgl %2, %1"
: "=a" (ret), "=m" (*t) : "=a" (ret), "=m" (*t)
: "r" (v), "m" (*t), "0" (c) : "r" (v), "m" (*t), "0" (c)
@ -90,4 +90,9 @@ ilockcmpexch (volatile long *t, long v, long c)
#define InterlockedExchange ilockexch #define InterlockedExchange ilockexch
#undef InterlockedCompareExchange #undef InterlockedCompareExchange
#define InterlockedCompareExchange ilockcmpexch #define InterlockedCompareExchange ilockcmpexch
#undef InterlockedCompareExchangePointer
#ifndef __x86_64
#define InterlockedCompareExchangePointer(d,e,c) \
(PVOID)InterlockedCompareExchange((LONG volatile *)(d),(LONG)(e),(LONG)(c))
#endif /* !__x86_64 */
#endif /*_WINBASE2_H*/ #endif /*_WINBASE2_H*/