24 #if !defined _X86INTRIN_H_INCLUDED && !defined _IMMINTRIN_H_INCLUDED
25 # error "Never use <bmi2intrin.h> directly; include <x86intrin.h> instead."
29 # error "BMI2 instruction set not enabled"
32 #ifndef _BMI2INTRIN_H_INCLUDED
33 #define _BMI2INTRIN_H_INCLUDED
35 extern __inline
unsigned int
36 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
37 _bzhi_u32 (
unsigned int __X,
unsigned int __Y)
42 extern __inline
unsigned int
43 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
44 _pdep_u32 (
unsigned int __X,
unsigned int __Y)
46 return __builtin_ia32_pdep_si (__X, __Y);
49 extern __inline
unsigned int
50 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
51 _pext_u32 (
unsigned int __X,
unsigned int __Y)
53 return __builtin_ia32_pext_si (__X, __Y);
58 extern __inline
unsigned long long
59 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
60 _bzhi_u64 (
unsigned long long __X,
unsigned long long __Y)
62 return __builtin_ia32_bzhi_di (__X, __Y);
65 extern __inline
unsigned long long
66 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
67 _pdep_u64 (
unsigned long long __X,
unsigned long long __Y)
69 return __builtin_ia32_pdep_di (__X, __Y);
72 extern __inline
unsigned long long
73 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
74 _pext_u64 (
unsigned long long __X,
unsigned long long __Y)
76 return __builtin_ia32_pext_di (__X, __Y);
79 extern __inline
unsigned long long
80 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
81 _mulx_u64 (
unsigned long long __X,
unsigned long long __Y,
82 unsigned long long *
__P)
84 unsigned __int128 __res = (
unsigned __int128) __X * __Y;
85 *__P = (
unsigned long long) (__res >> 64);
86 return (
unsigned long long) __res;
91 extern __inline
unsigned int
92 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
93 _mulx_u32 (
unsigned int __X,
unsigned int __Y,
unsigned int *__P)
95 unsigned long long __res = (
unsigned long long) __X * __Y;
96 *__P = (
unsigned int) (__res >> 32);
97 return (
unsigned int) __res;
__inline unsigned int unsigned int __Y return __builtin_ia32_bzhi_si(__X, __Y)
__inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _bzhi_u32(unsigned int __X
__inline unsigned int unsigned int __Y
Definition: bmi2intrin.h:45
__inline unsigned char unsigned int __X
Definition: adxintrin.h:33
__inline unsigned int unsigned int unsigned int * __P
Definition: bmi2intrin.h:94