- Fix some x64 GCC intrinsics

svn path=/trunk/; revision=67652
This commit is contained in:
Thomas Faber 2015-05-11 12:10:19 +00:00
parent 6fb47e311b
commit 4b07b445ac

View file

@ -953,15 +953,19 @@ __INTRIN_INLINE unsigned char _bittest(const long * a, long b)
} }
#ifdef __x86_64__ #ifdef __x86_64__
__INTRIN_INLINE unsigned char _BitScanForward64(unsigned long * Index, unsigned long long Mask); __INTRIN_INLINE unsigned char _BitScanForward64(unsigned long * Index, unsigned long long Mask)
{ {
__asm__("bsfq %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask)); unsigned long long Index64;
__asm__("bsfq %[Mask], %[Index]" : [Index] "=r" (Index64) : [Mask] "mr" (Mask));
*Index = Index64;
return Mask ? 1 : 0; return Mask ? 1 : 0;
} }
__INTRIN_INLINE unsigned char _BitScanReverse64(unsigned long * Index, unsigned long long Mask); __INTRIN_INLINE unsigned char _BitScanReverse64(unsigned long * Index, unsigned long long Mask)
{ {
__asm__("bsrq %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask)); unsigned long long Index64;
__asm__("bsrq %[Mask], %[Index]" : [Index] "=r" (Index64) : [Mask] "mr" (Mask));
*Index = Index64;
return Mask ? 1 : 0; return Mask ? 1 : 0;
} }
@ -1016,7 +1020,7 @@ __INTRIN_INLINE unsigned char _bittestandset(long * a, long b)
#ifdef __x86_64__ #ifdef __x86_64__
__INTRIN_INLINE unsigned char _bittestandset64(long long * a, long long b); __INTRIN_INLINE unsigned char _bittestandset64(long long * a, long long b)
{ {
unsigned char retval; unsigned char retval;
@ -1028,7 +1032,7 @@ __INTRIN_INLINE unsigned char _bittestandset64(long long * a, long long b);
return retval; return retval;
} }
__INTRIN_INLINE unsigned char _bittestandreset64(long long * a, long long b); __INTRIN_INLINE unsigned char _bittestandreset64(long long * a, long long b)
{ {
unsigned char retval; unsigned char retval;
@ -1040,7 +1044,7 @@ __INTRIN_INLINE unsigned char _bittestandreset64(long long * a, long long b);
return retval; return retval;
} }
__INTRIN_INLINE unsigned char _bittestandcomplement64(long long * a, long long b); __INTRIN_INLINE unsigned char _bittestandcomplement64(long long * a, long long b)
{ {
unsigned char retval; unsigned char retval;