1) Move these functions from winnt.h to intrin-impl.h:
_bittest, _bittest64
_bittestandset, _bittestandreset, _bittestandcomplement
_bittestandset64, _bittestandreset64, _bittestandcomplement64
2) Update inline asm code:
*a) Remove "memory" clobber*.
*b) Remove volatile keyword.*
c) Several changes to inputs, outputs, constraints and clobbers.
d) Use macros & symbolic names.
e) Support both att and intel asm formats.
dw
Index: mingw-w64-crt/intrincs/bittest.c
===================================================================
--- mingw-w64-crt/intrincs/bittest.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittest.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittest // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittest(__LONG32 const *Base, __LONG32 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittest64.c
===================================================================
--- mingw-w64-crt/intrincs/bittest64.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittest64.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittest64 // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittest64(__int64 const *Base, __int64 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile long long *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittestc.c
===================================================================
--- mingw-w64-crt/intrincs/bittestc.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittestc.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandcomplement // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandcomplement(__LONG32 *Base, __LONG32 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btcl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittestc64.c
===================================================================
--- mingw-w64-crt/intrincs/bittestc64.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittestc64.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandcomplement64 // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandcomplement64(__int64 *Base, __int64 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btcq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile long long *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittestr.c
===================================================================
--- mingw-w64-crt/intrincs/bittestr.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittestr.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandreset // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandreset(__LONG32 *Base, __LONG32 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittestr64.c
===================================================================
--- mingw-w64-crt/intrincs/bittestr64.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittestr64.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandreset64 // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandreset64(__int64 *Base, __int64 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btrq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile long long *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittests.c
===================================================================
--- mingw-w64-crt/intrincs/bittests.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittests.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandset // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandset(__LONG32 *Base, __LONG32 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-crt/intrincs/bittests64.c
===================================================================
--- mingw-w64-crt/intrincs/bittests64.c (revision 5980)
+++ mingw-w64-crt/intrincs/bittests64.c (working copy)
@@ -1,11 +1,4 @@
+#define __INTRINSIC_ONLYSPECIAL
+#define __INTRINSIC_SPECIAL__bittestandset64 // Causes code generation in intrin-impl.h
+
#include <intrin.h>
-
-unsigned char _bittestandset64(__int64 *Base, __int64 Offset)
-{
- int old = 0;
- __asm__ __volatile__("btsq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile long long *) Base))
- :"Ir" (Offset) : "memory");
- return (old != 0);
-}
-
Index: mingw-w64-headers/crt/intrin.h
===================================================================
--- mingw-w64-headers/crt/intrin.h (revision 5980)
+++ mingw-w64-headers/crt/intrin.h (working copy)
@@ -1060,20 +1060,20 @@
/* __MACHINEI(void __stosw(unsigned short *,unsigned short,size_t)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(void __stosd(unsigned __LONG32 *,unsigned __LONG32,size_t)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEX64(__MINGW_EXTENSION void __stosq(unsigned __int64 *,unsigned __int64,size_t)) moved to psdk_inc/intrin-impl.h */
- __MACHINEIW64(unsigned char _bittest(__LONG32 const *a,__LONG32 b))
- __MACHINEIW64(unsigned char _bittestandset(__LONG32 *a,__LONG32 b))
- __MACHINEIW64(unsigned char _bittestandreset(__LONG32 *a,__LONG32 b))
- __MACHINEIW64(unsigned char _bittestandcomplement(__LONG32 *a,__LONG32 b))
+ /* __MACHINEIW64(unsigned char _bittest(__LONG32 const *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEIW64(unsigned char _bittestandset(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEIW64(unsigned char _bittestandreset(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEIW64(unsigned char _bittestandcomplement(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char InterlockedBitTestAndSet(volatile __LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char InterlockedBitTestAndReset(volatile __LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char InterlockedBitTestAndComplement(volatile __LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char _interlockedbittestandset(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char _interlockedbittestandreset(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEI(unsigned char _interlockedbittestandcomplement(__LONG32 *a,__LONG32 b)) moved to psdk_inc/intrin-impl.h */
- __MACHINEW64(__MINGW_EXTENSION unsigned char _bittest64(__int64 const *a,__int64 b))
- __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandset64(__int64 *a,__int64 b))
- __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandreset64(__int64 *a,__int64 b))
- __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandcomplement64(__int64 *a,__int64 b))
+ /* __MACHINEW64(__MINGW_EXTENSION unsigned char _bittest64(__int64 const *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandset64(__int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandreset64(__int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
+ /* __MACHINEW64(__MINGW_EXTENSION unsigned char _bittestandcomplement64(__int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEX64(__MINGW_EXTENSION unsigned char InterlockedBitTestAndSet64(volatile __int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEX64(__MINGW_EXTENSION unsigned char InterlockedBitTestAndReset64(volatile __int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
/* __MACHINEX64(__MINGW_EXTENSION unsigned char InterlockedBitTestAndComplement64(volatile __int64 *a,__int64 b)) moved to psdk_inc/intrin-impl.h */
Index: mingw-w64-headers/include/psdk_inc/intrin-impl.h
===================================================================
--- mingw-w64-headers/include/psdk_inc/intrin-impl.h (revision 5980)
+++ mingw-w64-headers/include/psdk_inc/intrin-impl.h (working copy)
@@ -86,7 +86,7 @@
/* Parameters: (FunctionName, DataType, Operator)
FunctionName: Any valid function name
- DataType: __LONG32 or LONG64
+ DataType: __LONG32 or __int64
Operator: One of xor, or, and */
#define __buildlogicali(x, y, o) y x(volatile y *Destination, y Value) \
{ \
@@ -100,7 +100,7 @@
/* Parameters: (FunctionName, DataType, AsmCode, OffsetConstraint, Volatile)
FunctionName: Any valid function name
- DataType: __LONG32 or LONG64
+ DataType: __LONG32 or __int64
OffsetConstraint: either "I" for 32bit data types or "J" for 64.
Volatile: either volatile or blank. */
#define __buildbittesti(x, y, z, a, b) unsigned char x(b y *Base, y Offset) \
@@ -163,9 +163,10 @@
/* This macro is used by _BitScanForward, _BitScanForward64, _BitScanReverse _BitScanReverse64
+Parameters: (FunctionName, DataType, Segment)
FunctionName: Any valid function name
DataType: unsigned __LONG32 or unsigned __int64
- Segment: BSF or BSR */
+ Statement: BSF or BSR */
#define __buildbitscan(x, y, z) unsigned char x(unsigned __LONG32 *Index, y Mask) \
{ \
@@ -178,6 +179,44 @@
return Mask!=0; \
}
+/* This macro is used by _bittest & _bittest64
+
+Parameters: (FunctionName, DataType, OffsetConstraint)
+ FunctionName: Any valid function name
+ DataType: __LONG32 or __int64
+ OffsetConstraint: either "I" for 32bit data types or "J" for 64.
+
+ */
+#define __buildbittest(x, y, a) unsigned char x(const y *Base, y Offset) \
+{ \
+ unsigned char old; \
+ __asm__ ("bt{%z[Base] %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
+ : [old] "=rm" (old) \
+ : [Offset] a "r" (Offset), [Base] "rm" (*Base) \
+ : "cc"); \
+ return old; \
+}
+
+/* This macro is used by _bittestandset, _bittestandreset, _bittestandcomplement,
+ _bittestandset64, _bittestandreset64, _bittestandcomplement64
+
+Parameters: (FunctionName, DataType, Statement, OffsetConstraint)
+ FunctionName: Any valid function name
+ DataType: __LONG32 or __int64
+ Statement: asm statement (bts, btr, btc)
+ OffsetConstraint: either "I" for 32bit data types or "J" for 64.
+
+ */
+#define __buildbittestand(x, y, z, a) unsigned char x(y *Base, y Offset) \
+{ \
+ unsigned char old; \
+ __asm__ (z "%z[Base] {%[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
+ : [old] "=r" (old), [Base] "+rm" (*Base) \
+ : [Offset] a "r" (Offset) \
+ : "cc"); \
+ return old; \
+}
+
#endif /* _INTRIN_MAC_ */
/* The Barrier functions can never be in the library. Since gcc only
@@ -217,7 +256,7 @@
there can be overlap (definitions that appear in more than one
file). This is handled by __INTRINSIC_DEFINED_*
- If no groups are defined (such as what happens when including intrin.h,
+ If no groups are defined (such as what happens when including intrin.h),
all intrinsics are defined. */
/* If __INTRINSIC_ONLYSPECIAL is defined at this point, we are processing case 2. In
@@ -287,6 +326,14 @@
#define __INTRINSIC_SPECIAL__BitScanForward64
#define __INTRINSIC_SPECIAL__BitScanReverse
#define __INTRINSIC_SPECIAL__BitScanReverse64
+#define __INTRINSIC_SPECIAL__bittest
+#define __INTRINSIC_SPECIAL__bittestandset
+#define __INTRINSIC_SPECIAL__bittestandreset
+#define __INTRINSIC_SPECIAL__bittestandcomplement
+#define __INTRINSIC_SPECIAL__bittest64
+#define __INTRINSIC_SPECIAL__bittestandset64
+#define __INTRINSIC_SPECIAL__bittestandreset64
+#define __INTRINSIC_SPECIAL__bittestandcomplement64
#endif /* __INTRINSIC_GROUP_WINNT */
@@ -511,6 +558,34 @@
#define __INTRINSIC_DEFINED__BitScanReverse64
#endif /* __INTRINSIC_PROLOG */
+#if __INTRINSIC_PROLOG(_bittest64)
+__MINGW_EXTENSION unsigned char _bittest64(__int64 const *a, __int64 b);
+__MINGW_EXTENSION __INTRINSICS_USEINLINE
+__buildbittest(_bittest64, __int64, "J")
+#define __INTRINSIC_DEFINED__bittest64
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandset64)
+__MINGW_EXTENSION unsigned char _bittestandset64(__int64 *a, __int64 b);
+__MINGW_EXTENSION __INTRINSICS_USEINLINE
+__buildbittestand(_bittestandset64, __int64, "bts", "J")
+#define __INTRINSIC_DEFINED__bittestandset64
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandreset64)
+__MINGW_EXTENSION unsigned char _bittestandreset64(__int64 *a, __int64 b);
+__MINGW_EXTENSION __INTRINSICS_USEINLINE
+__buildbittestand(_bittestandreset64, __int64, "btr", "J")
+#define __INTRINSIC_DEFINED__bittestandreset64
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandcomplement64)
+__MINGW_EXTENSION unsigned char _bittestandcomplement64(__int64 *a, __int64 b);
+__MINGW_EXTENSION __INTRINSICS_USEINLINE
+__buildbittestand(_bittestandcomplement64, __int64, "btc", "J")
+#define __INTRINSIC_DEFINED__bittestandcomplement64
+#endif /* __INTRINSIC_PROLOG */
+
#endif /* __x86_64__ */
/* ***************************************************** */
@@ -723,8 +798,38 @@
#define __INTRINSIC_DEFINED__BitScanReverse
#endif /* __INTRINSIC_PROLOG */
+#if __INTRINSIC_PROLOG(_bittest)
+unsigned char _bittest(__LONG32 const *a, __LONG32 b);
+__INTRINSICS_USEINLINE
+__buildbittest(_bittest, __LONG32, "I")
+#define __INTRINSIC_DEFINED__bittest
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandset)
+unsigned char _bittestandset(__LONG32 *a, __LONG32 b);
+__INTRINSICS_USEINLINE
+__buildbittestand(_bittestandset, __LONG32, "bts", "I")
+#define __INTRINSIC_DEFINED__bittestandset
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandreset)
+unsigned char _bittestandreset(__LONG32 *a, __LONG32 b);
+__INTRINSICS_USEINLINE
+__buildbittestand(_bittestandreset, __LONG32, "btr", "I")
+#define __INTRINSIC_DEFINED__bittestandreset
+#endif /* __INTRINSIC_PROLOG */
+
+#if __INTRINSIC_PROLOG(_bittestandcomplement)
+unsigned char _bittestandcomplement(__LONG32 *a, __LONG32 b);
+__INTRINSICS_USEINLINE
+__buildbittestand(_bittestandcomplement, __LONG32, "btc", "I")
+#define __INTRINSIC_DEFINED__bittestandcomplement
+#endif /* __INTRINSIC_PROLOG */
+
#endif /* defined(__x86_64__) || (defined(_X86_) */
+/* ***************************************************** */
+
#if defined(_X86_)
#if __INTRINSIC_PROLOG(__readfsbyte)
Index: mingw-w64-headers/include/winnt.h
===================================================================
--- mingw-w64-headers/include/winnt.h (revision 5981)
+++ mingw-w64-headers/include/winnt.h (working copy)
@@ -1185,77 +1185,15 @@
#define BitTestAndSet64 _bittestandset64
#define BitTestAndReset64 _bittestandreset64
- BOOLEAN _bittest(LONG const *Base,LONG Offset);
- BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset);
+ /* BOOLEAN _bittest(LONG const *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandreset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
+ /* BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
-#ifndef __CRT__NO_INLINE
- __CRT_INLINE BOOLEAN _bittest(LONG const *Base,LONG Offset) {
- int old = 0;
- __asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset) {
- int old = 0;
- __asm__ __volatile__("btcl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
-#endif /* __CRT__NO_INLINE */
-
- BOOLEAN _bittestandset(LONG *Base,LONG Offset);
- BOOLEAN _bittestandreset(LONG *Base,LONG Offset);
- BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset);
- BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset);
- BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset);
- BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset);
-#ifndef __CRT__NO_INLINE
- __CRT_INLINE BOOLEAN _bittestandset(LONG *Base,LONG Offset) {
- int old = 0;
- __asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittestandreset(LONG *Base,LONG Offset) {
- int old = 0;
- __asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset) {
- int old = 0;
- __asm__ __volatile__("btq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile LONG64 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset) {
- int old = 0;
- __asm__ __volatile__("btcq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile LONG64 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset) {
- int old = 0;
- __asm__ __volatile__("btsq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile LONG64 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
- __CRT_INLINE BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset) {
- int old = 0;
- __asm__ __volatile__("btrq %2,%1\n\tsbbl %0,%0 "
- :"=r" (old),"=m" ((*(volatile LONG64 *) Base))
- :"Ir" (Offset) : "memory");
- return (BOOLEAN) (old!=0);
- }
-#endif /* !__CRT__NO_INLINE */
-
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
#define BitScanForward64 _BitScanForward64
------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public