diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Headers/bmiintrin.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/Headers/bmiintrin.h b/lib/Headers/bmiintrin.h index f2aae6549c..2f7db73a7d 100644 --- a/lib/Headers/bmiintrin.h +++ b/lib/Headers/bmiintrin.h @@ -39,6 +39,36 @@ __tzcnt16(unsigned short __X) } static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__andn_u32(unsigned int __X, unsigned int __Y) +{ + return ~__X & __Y; +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__bextr_u32(unsigned int __X, unsigned int __Y) +{ + return __builtin_ia32_bextr_u32(__X, __Y); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsi_u32(unsigned int __X) +{ + return __X & -__X; +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsmsk_u32(unsigned int __X) +{ + return __X ^ (__X - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsr_u32(unsigned int __X) +{ + return __X & (__X - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) __tzcnt32(unsigned int __X) { return __builtin_ctz(__X); @@ -46,6 +76,36 @@ __tzcnt32(unsigned int __X) #ifdef __x86_64__ static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__andn_u64 (unsigned long long __X, unsigned long long __Y) +{ + return ~__X & __Y; +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__bextr_u64(unsigned long long __X, unsigned long long __Y) +{ + return __builtin_ia32_bextr_u64(__X, __Y); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsi_u64(unsigned long long __X) +{ + return __X & -__X; +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsmsk_u64(unsigned long long __X) +{ + return __X ^ (__X - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsr_u64(unsigned long long __X) +{ + return __X & (__X - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) __tzcnt64(unsigned long long __X) { return __builtin_ctzll(__X); |