24 #if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
25 #error "Never use <bmi2intrin.h> directly; include <x86intrin.h> instead."
29 # error "BMI2 instruction set not enabled"
32 #ifndef __BMI2INTRIN_H
33 #define __BMI2INTRIN_H
36 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
41 return __builtin_ia32_bzhi_si(__X, __Y);
47 return __builtin_ia32_pdep_si(__X, __Y);
53 return __builtin_ia32_pext_si(__X, __Y);
59 _bzhi_u64(
unsigned long long __X,
unsigned long long __Y)
61 return __builtin_ia32_bzhi_di(__X, __Y);
65 _pdep_u64(
unsigned long long __X,
unsigned long long __Y)
67 return __builtin_ia32_pdep_di(__X, __Y);
71 _pext_u64(
unsigned long long __X,
unsigned long long __Y)
73 return __builtin_ia32_pext_di(__X, __Y);
77 _mulx_u64 (
unsigned long long __X,
unsigned long long __Y,
78 unsigned long long *__P)
80 unsigned __int128 __res = (
unsigned __int128) __X * __Y;
81 *__P = (
unsigned long long) (__res >> 64);
82 return (
unsigned long long) __res;
88 _mulx_u32 (
unsigned int __X,
unsigned int __Y,
unsigned int *__P)
90 unsigned long long __res = (
unsigned long long) __X * __Y;
91 *__P = (
unsigned int) (__res >> 32);
92 return (
unsigned int) __res;
97 #undef __DEFAULT_FN_ATTRS
#define __DEFAULT_FN_ATTRS
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mulx_u32(unsigned int __X, unsigned int __Y, unsigned int *__P)
static __inline__ unsigned int __DEFAULT_FN_ATTRS _pdep_u32(unsigned int __X, unsigned int __Y)
static __inline__ unsigned int __DEFAULT_FN_ATTRS _bzhi_u32(unsigned int __X, unsigned int __Y)
static __inline__ unsigned int __DEFAULT_FN_ATTRS _pext_u32(unsigned int __X, unsigned int __Y)