diff options
author | Craig Topper <craig.topper@gmail.com> | 2011-12-25 07:27:12 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2011-12-25 07:27:12 +0000 |
commit | 0b269c1f3641511fb397488f8b82850416892fc9 (patch) | |
tree | 0093418723e8a5c1572a311b2693dbd183741e69 /lib/Headers/bmiintrin.h | |
parent | 5c75208a5b88c835bce0a1671015c7e22c72f35f (diff) |
Add the rest of the BMI intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147265 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Headers/bmiintrin.h')
-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); |