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 | a06d4a1c40e47ba1b0a1111a149c57ef7b4aa1c6 (patch) | |
| tree | 504b96987cf753975e26944d5061f2dfff05d45c /clang/lib/Headers/bmiintrin.h | |
| parent | 2990ec6e9212f201d135cf167f701bc6d96b6842 (diff) | |
| download | bcm5719-llvm-a06d4a1c40e47ba1b0a1111a149c57ef7b4aa1c6.tar.gz bcm5719-llvm-a06d4a1c40e47ba1b0a1111a149c57ef7b4aa1c6.zip | |
Add the rest of the BMI intrinsics.
llvm-svn: 147265
Diffstat (limited to 'clang/lib/Headers/bmiintrin.h')
| -rw-r--r-- | clang/lib/Headers/bmiintrin.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/clang/lib/Headers/bmiintrin.h b/clang/lib/Headers/bmiintrin.h index f2aae6549c8..2f7db73a7d9 100644 --- a/clang/lib/Headers/bmiintrin.h +++ b/clang/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); |

