Re-sending since SF seems to have eaten the first one.
A while back snow_xmas reported a problem compiling mingw-w64 with
clang. I made a change, but he disappeared before approving the fix. I
have just had a clang expert take a look, and while he had some comments
about the coding style, functionally he was ok with the change.
This won't completely fix snow_xmas' problem, since he was trying to
re-build mingw-w64 from scratch with clang. I believe that still won't
work (for other reasons). However, if people are using clang with a
pre-built mingw-w64 (which I'm told *is* a supported scenario), the
attached patch should help.
dw
>From f5ab3539141364be67ab27ec9393fa6fdb3faf09 Mon Sep 17 00:00:00 2001
From: David Wohlferd <d...@limegreensocks.com>
Date: Thu, 4 Dec 2014 17:46:56 -0800
Subject: [PATCH] Resolve problem where clang doesn't support %z in asm
templates.
Signed-off-by: David Wohlferd <d...@limegreensocks.com>
---
mingw-w64-headers/include/psdk_inc/intrin-impl.h | 158 ++++++++++++-----------
1 file changed, 82 insertions(+), 76 deletions(-)
diff --git a/mingw-w64-headers/include/psdk_inc/intrin-impl.h b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
index 32a001b..f570638 100644
--- a/mingw-w64-headers/include/psdk_inc/intrin-impl.h
+++ b/mingw-w64-headers/include/psdk_inc/intrin-impl.h
@@ -71,13 +71,13 @@ __INTRINSICS_USEINLINE
/* Parameters: (FunctionName, DataType, Operator)
FunctionName: Any valid function name
DataType: BYTE, WORD, DWORD or DWORD64
- InstructionSizeIntel: b, w, d, q (not b,w,l,q) */
+ InstructionSize: b|b, w|w, l|d, q|q */
/* While we don't need the output values for Dest or Count, we
must still inform the compiler the asm changes them. */
#define __buildstos(x, y, z) void x(y *Dest, y Data, size_t Count) \
{ \
- __asm__ __volatile__ ("rep stos{%z[Data]|" z "}" \
+ __asm__ __volatile__ ("rep stos{" z "}" \
: "+D" (Dest), "+c" (Count) \
: [Data] "a" (Data) \
: "memory"); \
@@ -105,10 +105,10 @@ __INTRINSICS_USEINLINE
OffsetConstraint: either "I" for 32bit data types or "J" for 64.
Volatile: either volatile or blank. */
#if defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_)
-#define __buildbittesti(x, y, z, a, b) unsigned char x(b y *Base, y Offset) \
+#define __buildbittesti(x, y, z, a, b) unsigned char x(y *Base, b Offset) \
{ \
unsigned char old; \
- __asm__ __volatile__ (z "%z[Base] {%[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
+ __asm__ __volatile__ (z \
: [old] "=qm" (old), [Base] "+m" (*Base) \
: [Offset] a "r" (Offset) \
: "memory", "cc"); \
@@ -158,11 +158,13 @@ __asm__ __volatile__("xchg{b %%| }al, %0" :"=m" (Barrier) : /* no inputs */ : "e
Parameters: (FunctionName, DataType, Segment)
FunctionName: Any valid function name
DataType: char, short, __LONG32 or __int64
- Segment: fs or gs */
+ Segment: fs or gs
+ Type: b, w, l, q
+ */
-#define __buildreadseg(x, y, z) y x(unsigned __LONG32 Offset) { \
+#define __buildreadseg(x, y, z, a) y x(unsigned __LONG32 Offset) { \
y ret; \
- __asm__ ("mov{%z[ret] %%" z ":%[offset], %[ret] | %[ret], %%" z ":%[offset]}" \
+ __asm__ ("mov{" a " %%" z ":%[offset], %[ret] | %[ret], %%" z ":%[offset]}" \
: [ret] "=r" (ret) \
: [offset] "m" ((*(y *) (size_t) Offset))); \
return ret; \
@@ -174,10 +176,12 @@ Parameters: (FunctionName, DataType, Segment)
Parameters: (FunctionName, DataType, Segment)
FunctionName: Any valid function name
DataType: char, short, __LONG32 or __int64
- Segment: fs or gs */
+ Segment: fs or gs
+ Type: b, w, l, q
+ */
-#define __buildwriteseg(x, y, z) void x(unsigned __LONG32 Offset, y Data) { \
- __asm__ ("mov{%z[offset] %[Data], %%" z ":%[offset] | %%" z ":%[offset], %[Data]}" \
+#define __buildwriteseg(x, y, z, a) void x(unsigned __LONG32 Offset, y Data) { \
+ __asm__ ("mov{" a " %[Data], %%" z ":%[offset] | %%" z ":%[offset], %[Data]}" \
: [offset] "=m" ((*(y *) (size_t) Offset)) \
: [Data] "ri" (Data)); \
}
@@ -192,7 +196,7 @@ Parameters: (FunctionName, DataType, Segment)
#define __buildbitscan(x, y, z) unsigned char x(unsigned __LONG32 *Index, y Mask) \
{ \
y n; \
- __asm__ (z "{%z[Mask] %[Mask],%[Index] | %[Index],%[Mask]}" \
+ __asm__ (z \
: [Index] "=r" (n) \
: [Mask] "r" (Mask) \
: "cc"); \
@@ -205,13 +209,14 @@ Parameters: (FunctionName, DataType, Segment)
Parameters: (FunctionName, DataType, OffsetConstraint)
FunctionName: Any valid function name
DataType: __LONG32 or __int64
+ Type: l, q
OffsetConstraint: either "I" for 32bit data types or "J" for 64.
*/
-#define __buildbittest(x, y, a) unsigned char x(const y *Base, y Offset) \
+#define __buildbittest(x, y, z, a) unsigned char x(const y *Base, y Offset) \
{ \
unsigned char old; \
- __asm__ ("bt{%z[Base] %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
+ __asm__ ("bt{" z " %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
: [old] "=rm" (old) \
: [Offset] a "r" (Offset), [Base] "rm" (*Base) \
: "cc"); \
@@ -226,12 +231,12 @@ Parameters: (FunctionName, DataType, Statement, OffsetConstraint)
DataType: __LONG32 or __int64
Statement: asm statement (bts, btr, btc)
OffsetConstraint: either "I" for 32bit data types or "J" for 64.
-
+ Type: l, q
*/
-#define __buildbittestand(x, y, z, a) unsigned char x(y *Base, y Offset) \
+#define __buildbittestand(x, y, z, a, b) unsigned char x(y *Base, y Offset) \
{ \
unsigned char old; \
- __asm__ (z "%z[Base] {%[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
+ __asm__ (z "{" b " %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]" \
: [old] "=r" (old), [Base] "+rm" (*Base) \
: [Offset] a "r" (Offset) \
: "cc"); \
@@ -243,13 +248,13 @@ Parameters: (FunctionName, DataType, Statement, OffsetConstraint)
Parameters: (FunctionName, DataType)
FunctionName: Any valid function name
DataType: unsigned char, unsigned short, unsigned __LONG32
-
+ Type: b, w, l
*/
-#define __build_inport(x, y) y x(unsigned short Port) { \
+#define __build_inport(x, y, z) y x(unsigned short Port) { \
y value; \
- __asm__ __volatile__ ("in{%z0 %w1,%0| %0,%w1}" \
- : "=a" (value) \
- : "Nd" (Port)); \
+ __asm__ __volatile__ ("in{" z " %w[port],%[value]| %[value],%w[port]}" \
+ : [value] "=a" (value) \
+ : [port] "Nd" (Port)); \
return value; \
}
@@ -258,12 +263,12 @@ Parameters: (FunctionName, DataType)
Parameters: (FunctionName, DataType)
FunctionName: Any valid function name
DataType: unsigned char, unsigned short, unsigned __LONG32
-
+ Type: b, w, l
*/
-#define __build_outport(x, y) void x(unsigned short Port, y Data) { \
- __asm__ __volatile__ ("out{%z0 %0,%w1| %w1,%0}" \
+#define __build_outport(x, y, z) void x(unsigned short Port, y Data) { \
+ __asm__ __volatile__ ("out{" z " %[data],%w[port]| %w[port],%[data]}" \
: \
- : "a" (Data), "Nd" (Port)); \
+ : [data] "a" (Data), [port] "Nd" (Port)); \
}
/* This macro is used by __inbytestring, __inwordstring, __indwordstring
@@ -273,12 +278,12 @@ Parameters: (FunctionName, DataType, InstructionSizeAtt, InstructionSizeIntel)
DataType: unsigned char, unsigned short, unsigned __LONG32
InstructionSizeAtt: b, w, l
InstructionSizeIntel: b, w, d (not b,w,l)
-
*/
#define __build_inportstring(x, y, z, a) void x(unsigned short Port, y *Buffer, unsigned __LONG32 Count) { \
__asm__ __volatile__ ("cld ; rep ins{" z "|" a "}" \
: "=D" (Buffer), "=c" (Count) \
- : "d"(Port), "0"(Buffer), "1" (Count)); \
+ : "d"(Port), "0"(Buffer), "1" (Count) \
+ : "memory"); \
}
/* This macro is used by __outbytestring, __outwordstring, __outdwordstring
@@ -293,7 +298,8 @@ Parameters: (FunctionName, DataType, InstructionSizeAtt, InstructionSizeIntel)
#define __build_outportstring(x, y, z, a) void x(unsigned short Port, y *Buffer, unsigned __LONG32 Count) { \
__asm__ __volatile__ ("cld ; rep outs{" z "|" a "}" \
: "=S" (Buffer), "=c" (Count) \
- : "d"(Port), "0"(Buffer), "1" (Count)); \
+ : "d"(Port), "0"(Buffer), "1" (Count) \
+ : "memory"); \
}
/* This macro is used by __readcr0, __readcr2, __readcr3, __readcr4, __readcr8
@@ -515,49 +521,49 @@ void __faststorefence(void) {
#if __INTRINSIC_PROLOG(__stosq)
__MINGW_EXTENSION void __stosq(unsigned __int64 *, unsigned __int64, size_t);
__INTRINSICS_USEINLINE
-__buildstos(__stosq, unsigned __int64, "q")
+__buildstos(__stosq, unsigned __int64, "q|q")
#define __INTRINSIC_DEFINED___stosq
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandset64)
__MINGW_EXTENSION unsigned char _interlockedbittestandset64(__int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandset64, __int64, "lock bts", "J", /* unused param */)
+__buildbittesti(_interlockedbittestandset64, __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED__interlockedbittestandset64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandreset64)
__MINGW_EXTENSION unsigned char _interlockedbittestandreset64(__int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandreset64, __int64, "lock btr", "J", /* unused param */)
+__buildbittesti(_interlockedbittestandreset64, __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED__interlockedbittestandreset64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandcomplement64)
__MINGW_EXTENSION unsigned char _interlockedbittestandcomplement64(__int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandcomplement64, __int64, "lock btc", "J", /* unused param */)
+__buildbittesti(_interlockedbittestandcomplement64, __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED__interlockedbittestandcomplement64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndSet64)
__MINGW_EXTENSION unsigned char InterlockedBitTestAndSet64(volatile __int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndSet64, __int64, "lock bts", "J", volatile)
+__buildbittesti(InterlockedBitTestAndSet64, volatile __int64, "lock bts{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndSet64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndReset64)
__MINGW_EXTENSION unsigned char InterlockedBitTestAndReset64(volatile __int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndReset64, __int64, "lock btr", "J", volatile)
+__buildbittesti(InterlockedBitTestAndReset64, volatile __int64, "lock btr{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndReset64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndComplement64)
__MINGW_EXTENSION unsigned char InterlockedBitTestAndComplement64(volatile __int64 *a, __int64 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndComplement64, __int64, "lock btc", "J", volatile)
+__buildbittesti(InterlockedBitTestAndComplement64, volatile __int64, "lock btc{q %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "J", __int64)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndComplement64
#endif /* __INTRINSIC_PROLOG */
@@ -621,98 +627,98 @@ __int64 _InterlockedExchangeAdd64(__int64 volatile *Addend, __int64 Value) {
#if __INTRINSIC_PROLOG(__readgsbyte)
unsigned char __readgsbyte(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readgsbyte, unsigned char, "gs")
+__buildreadseg(__readgsbyte, unsigned char, "gs", "b")
#define __INTRINSIC_DEFINED___readgsbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__readgsword)
unsigned short __readgsword(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readgsword, unsigned short, "gs")
+__buildreadseg(__readgsword, unsigned short, "gs", "w")
#define __INTRINSIC_DEFINED___readgsword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__readgsdword)
unsigned __LONG32 __readgsdword(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readgsdword, unsigned __LONG32, "gs")
+__buildreadseg(__readgsdword, unsigned __LONG32, "gs", "l")
#define __INTRINSIC_DEFINED___readgsdword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__readgsqword)
__MINGW_EXTENSION unsigned __int64 __readgsqword(unsigned __LONG32 Offset);
__MINGW_EXTENSION __INTRINSICS_USEINLINE
-__buildreadseg(__readgsqword, unsigned __int64, "gs")
+__buildreadseg(__readgsqword, unsigned __int64, "gs", "q")
#define __INTRINSIC_DEFINED___readgsqword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writegsbyte)
void __writegsbyte(unsigned __LONG32 Offset,unsigned char Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writegsbyte, unsigned char, "gs")
+__buildwriteseg(__writegsbyte, unsigned char, "gs", "b")
#define __INTRINSIC_DEFINED___writegsbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writegsword)
void __writegsword(unsigned __LONG32 Offset,unsigned short Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writegsword, unsigned short, "gs")
+__buildwriteseg(__writegsword, unsigned short, "gs", "w")
#define __INTRINSIC_DEFINED___writegsword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writegsdword)
void __writegsdword(unsigned __LONG32 Offset,unsigned __LONG32 Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writegsdword, unsigned __LONG32, "gs")
+__buildwriteseg(__writegsdword, unsigned __LONG32, "gs", "l")
#define __INTRINSIC_DEFINED___writegsdword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writegsqword)
__MINGW_EXTENSION void __writegsqword(unsigned __LONG32 Offset,unsigned __int64 Data);
__MINGW_EXTENSION __INTRINSICS_USEINLINE
-__buildwriteseg(__writegsqword, unsigned __int64, "gs")
+__buildwriteseg(__writegsqword, unsigned __int64, "gs", "q")
#define __INTRINSIC_DEFINED___writegsqword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_BitScanForward64)
__MINGW_EXTENSION unsigned char _BitScanForward64(unsigned __LONG32 *Index, unsigned __int64 Mask);
__MINGW_EXTENSION __INTRINSICS_USEINLINE
-__buildbitscan(_BitScanForward64, unsigned __int64, "bsf")
+__buildbitscan(_BitScanForward64, unsigned __int64, "bsf{q %[Mask],%[Index] | %[Index],%[Mask]}")
#define __INTRINSIC_DEFINED__BitScanForward64
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_BitScanReverse64)
__MINGW_EXTENSION unsigned char _BitScanReverse64(unsigned __LONG32 *Index, unsigned __int64 Mask);
__MINGW_EXTENSION __INTRINSICS_USEINLINE
-__buildbitscan(_BitScanReverse64, unsigned __int64, "bsr")
+__buildbitscan(_BitScanReverse64, unsigned __int64, "bsr{q %[Mask],%[Index] | %[Index],%[Mask]}")
#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")
+__buildbittest(_bittest64, __int64, "q", "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")
+__buildbittestand(_bittestandset64, __int64, "bts", "J", "q")
#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")
+__buildbittestand(_bittestandreset64, __int64, "btr", "J", "q")
#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")
+__buildbittestand(_bittestandcomplement64, __int64, "btc", "J", "q")
#define __INTRINSIC_DEFINED__bittestandcomplement64
#endif /* __INTRINSIC_PROLOG */
@@ -1038,147 +1044,147 @@ void __int2c(void) {
#if __INTRINSIC_PROLOG(__stosb)
void __stosb(unsigned char *, unsigned char, size_t);
__INTRINSICS_USEINLINE
-__buildstos(__stosb, unsigned char, "b")
+__buildstos(__stosb, unsigned char, "b|b")
#define __INTRINSIC_DEFINED___stosb
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__stosw)
void __stosw(unsigned short *, unsigned short, size_t);
__INTRINSICS_USEINLINE
-__buildstos(__stosw, unsigned short, "w")
+__buildstos(__stosw, unsigned short, "w|w")
#define __INTRINSIC_DEFINED___stosw
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__stosd)
void __stosd(unsigned __LONG32 *, unsigned __LONG32, size_t);
__INTRINSICS_USEINLINE
-__buildstos(__stosd, unsigned __LONG32, "d")
+__buildstos(__stosd, unsigned __LONG32, "l|d")
#define __INTRINSIC_DEFINED___stosd
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandset)
unsigned char _interlockedbittestandset(__LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandset, __LONG32, "lock bts", "I", /* unused param */)
+__buildbittesti(_interlockedbittestandset, __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED__interlockedbittestandset
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandreset)
unsigned char _interlockedbittestandreset(__LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandreset, __LONG32, "lock btr", "I", /* unused param */)
+__buildbittesti(_interlockedbittestandreset, __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED__interlockedbittestandreset
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_interlockedbittestandcomplement)
unsigned char _interlockedbittestandcomplement(__LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(_interlockedbittestandcomplement, __LONG32, "lock btc", "I", /* unused param */)
+__buildbittesti(_interlockedbittestandcomplement, __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED__interlockedbittestandcomplement
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndSet)
unsigned char InterlockedBitTestAndSet(volatile __LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndSet, __LONG32, "lock bts", "I", volatile)
+__buildbittesti(InterlockedBitTestAndSet, volatile __LONG32, "lock bts{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndSet
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndReset)
unsigned char InterlockedBitTestAndReset(volatile __LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndReset, __LONG32, "lock btr", "I", volatile)
+__buildbittesti(InterlockedBitTestAndReset, volatile __LONG32, "lock btr{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndReset
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(InterlockedBitTestAndComplement)
unsigned char InterlockedBitTestAndComplement(volatile __LONG32 *a, __LONG32 b);
__INTRINSICS_USEINLINE
-__buildbittesti(InterlockedBitTestAndComplement, __LONG32, "lock btc", "I", volatile)
+__buildbittesti(InterlockedBitTestAndComplement, volatile __LONG32, "lock btc{l %[Offset],%[Base] | %[Base],%[Offset]} ; setc %[old]", "I", __LONG32)
#define __INTRINSIC_DEFINED_InterlockedBitTestAndComplement
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_BitScanForward)
unsigned char _BitScanForward(unsigned __LONG32 *Index, unsigned __LONG32 Mask);
__INTRINSICS_USEINLINE
-__buildbitscan(_BitScanForward, unsigned __LONG32, "bsf")
+__buildbitscan(_BitScanForward, unsigned __LONG32, "bsf{l %[Mask],%[Index] | %[Index],%[Mask]}")
#define __INTRINSIC_DEFINED__BitScanForward
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(_BitScanReverse)
unsigned char _BitScanReverse(unsigned __LONG32 *Index, unsigned __LONG32 Mask);
__INTRINSICS_USEINLINE
-__buildbitscan(_BitScanReverse, unsigned __LONG32, "bsr")
+__buildbitscan(_BitScanReverse, unsigned __LONG32, "bsr{l %[Mask],%[Index] | %[Index],%[Mask]}")
#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")
+__buildbittest(_bittest, __LONG32, "l", "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")
+__buildbittestand(_bittestandset, __LONG32, "bts", "I", "l")
#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")
+__buildbittestand(_bittestandreset, __LONG32, "btr", "I", "l")
#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")
+__buildbittestand(_bittestandcomplement, __LONG32, "btc", "I", "l")
#define __INTRINSIC_DEFINED__bittestandcomplement
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__inbyte)
unsigned char __inbyte(unsigned short Port);
__INTRINSICS_USEINLINE
-__build_inport(__inbyte, unsigned char)
+__build_inport(__inbyte, unsigned char, "b")
#define __INTRINSIC_DEFINED___inbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__inword)
unsigned short __inword(unsigned short Port);
__INTRINSICS_USEINLINE
-__build_inport(__inword, unsigned short)
+__build_inport(__inword, unsigned short, "w")
#define __INTRINSIC_DEFINED___inword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__indword)
unsigned __LONG32 __indword(unsigned short Port);
__INTRINSICS_USEINLINE
-__build_inport(__indword, unsigned __LONG32)
+__build_inport(__indword, unsigned __LONG32, "l")
#define __INTRINSIC_DEFINED___indword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__outbyte)
void __outbyte(unsigned short Port, unsigned char Data);
__INTRINSICS_USEINLINE
-__build_outport(__outbyte, unsigned char)
+__build_outport(__outbyte, unsigned char, "b")
#define __INTRINSIC_DEFINED___outbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__outword)
void __outword(unsigned short Port, unsigned short Data);
__INTRINSICS_USEINLINE
-__build_outport(__outword, unsigned short)
+__build_outport(__outword, unsigned short, "w")
#define __INTRINSIC_DEFINED___outword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__outdword)
void __outdword(unsigned short Port, unsigned __LONG32 Data);
__INTRINSICS_USEINLINE
-__build_outport(__outdword, unsigned __LONG32)
+__build_outport(__outdword, unsigned __LONG32, "l")
#define __INTRINSIC_DEFINED___outdword
#endif /* __INTRINSIC_PROLOG */
@@ -1301,42 +1307,42 @@ __buildmov(__movsd, unsigned __LONG32, "d")
#if __INTRINSIC_PROLOG(__readfsbyte)
unsigned char __readfsbyte(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readfsbyte, unsigned char, "fs")
+__buildreadseg(__readfsbyte, unsigned char, "fs", "b")
#define __INTRINSIC_DEFINED___readfsbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__readfsword)
unsigned short __readfsword(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readfsword, unsigned short, "fs")
+__buildreadseg(__readfsword, unsigned short, "fs", "w")
#define __INTRINSIC_DEFINED___readfsword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__readfsdword)
unsigned __LONG32 __readfsdword(unsigned __LONG32 Offset);
__INTRINSICS_USEINLINE
-__buildreadseg(__readfsdword, unsigned __LONG32, "fs")
+__buildreadseg(__readfsdword, unsigned __LONG32, "fs", "l")
#define __INTRINSIC_DEFINED___readfsdword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writefsbyte)
void __writefsbyte(unsigned __LONG32 Offset,unsigned char Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writefsbyte, unsigned char, "fs")
+__buildwriteseg(__writefsbyte, unsigned char, "fs", "b")
#define __INTRINSIC_DEFINED___writefsbyte
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writefsword)
void __writefsword(unsigned __LONG32 Offset,unsigned short Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writefsword, unsigned short, "fs")
+__buildwriteseg(__writefsword, unsigned short, "fs", "w")
#define __INTRINSIC_DEFINED___writefsword
#endif /* __INTRINSIC_PROLOG */
#if __INTRINSIC_PROLOG(__writefsdword)
void __writefsdword(unsigned __LONG32 Offset,unsigned __LONG32 Data);
__INTRINSICS_USEINLINE
-__buildwriteseg(__writefsdword, unsigned __LONG32, "fs")
+__buildwriteseg(__writefsdword, unsigned __LONG32, "fs", "l")
#define __INTRINSIC_DEFINED___writefsdword
#endif /* __INTRINSIC_PROLOG */
--
1.9.4.msysgit.0
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public