10#if !defined X86GPRINTRIN_H_
11#error "Never use <bmi2intrin.h> directly; include <x86gprintrin.h> instead."
17extern __inline
unsigned int
20 return ((__X << (32 -
__Y)) >> (32 -
__Y));
23extern __inline
unsigned int
24 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
26 unsigned long long __res = (
unsigned long long)__X *
__Y;
27 *
__P = (
unsigned int)(__res >> 32);
28 return (
unsigned int)__res;
32extern __inline
unsigned long long
33 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
34 _bzhi_u64(
unsigned long long __X,
unsigned long long __Y) {
35 return ((__X << (64 -
__Y)) >> (64 -
__Y));
39extern __inline
unsigned long long
40 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
41 _mulx_u64(
unsigned long long __X,
unsigned long long __Y,
42 unsigned long long *
__P) {
43 unsigned __int128 __res = (
unsigned __int128)__X *
__Y;
44 *
__P = (
unsigned long long)(__res >> 64);
45 return (
unsigned long long)__res;
50extern __inline
unsigned long long
51 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
52 _pdep_u64(
unsigned long long __X,
unsigned long long __M) {
53 unsigned long __result = 0x0UL;
54 const unsigned long __mask = 0x8000000000000000UL;
55 unsigned long __m = __M;
56 unsigned long __c, __t;
62 __p = 64 - __builtin_popcountl(__M);
67 __c = __builtin_clzl(__m);
69 __m ^= (__mask >>
__c);
70 __result |= (__t & (__mask >>
__c));
76extern __inline
unsigned long long
77 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
78 _pext_u64(
unsigned long long __X,
unsigned long long __M) {
79 unsigned long __p = 0x4040404040404040UL;
80 const unsigned long __mask = 0x8000000000000000UL;
81 unsigned long __m = __M;
83 unsigned long __result;
87 if (__builtin_constant_p(__M) && (__builtin_popcountl(__M) <= 8)) {
92 for (__i = 0; __i < __builtin_popcountl(__M); __i++) {
93 __c = __builtin_clzl(__m);
95 __m ^= (__mask >>
__c);
97 __result = __builtin_bpermd(
__p, __X);
99 __p = 64 - __builtin_popcountl(__M);
108 __c = __builtin_clzl(__m);
109 __t = (__X & (__mask >>
__c)) >> (
__p -
__c);
110 __m ^= (__mask >>
__c);
120extern __inline
unsigned int
121 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
123 return _pdep_u64(__X,
__Y);
126extern __inline
unsigned int
127 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
129 return _pext_u64(__X,
__Y);
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
static __inline__ vector float vector float vector float __c
static __inline__ uint32_t volatile uint32_t * __p
static __inline__ unsigned int __DEFAULT_FN_ATTRS _pext_u32(unsigned int __X, unsigned int __Y)
Extract (gather) bits from the unsigned 32-bit integer __X into the low-order bits of the 32-bit resu...
static __inline__ unsigned int __DEFAULT_FN_ATTRS _bzhi_u32(unsigned int __X, unsigned int __Y)
Copies the unsigned 32-bit integer __X and zeroes the upper bits starting at bit number __Y.
static __inline__ unsigned int __DEFAULT_FN_ATTRS _mulx_u32(unsigned int __X, unsigned int __Y, unsigned int *__P)
Multiplies the unsigned 32-bit integers __X and __Y to form a 64-bit product.
static __inline__ unsigned int __DEFAULT_FN_ATTRS _pdep_u32(unsigned int __X, unsigned int __Y)
Deposit (scatter) low-order bits from the unsigned 32-bit integer __X into the 32-bit result,...
__inline unsigned int unsigned int unsigned int * __P
__inline unsigned int unsigned int __Y