11 #error "Never use <ia32intrin.h> directly; include <x86intrin.h> instead." 14 #ifndef __IA32INTRIN_H 15 #define __IA32INTRIN_H 31 return __builtin_ctz(__A);
46 static __inline__
int __attribute__((__always_inline__, __nodebug__))
48 return 31 - __builtin_clz(__A);
62 static __inline__
int __attribute__((__always_inline__, __nodebug__))
64 return __builtin_bswap32(__A);
67 static __inline__
int __attribute__((__always_inline__, __nodebug__))
69 return __builtin_bswap32(__A);
72 #define _bit_scan_forward(A) __bsfd((A)) 73 #define _bit_scan_reverse(A) __bsrd((A)) 88 static __inline__
int __attribute__((__always_inline__, __nodebug__))
89 __bsfq(
long long __A) {
90 return __builtin_ctzll(__A);
105 static __inline__
int __attribute__((__always_inline__, __nodebug__))
106 __bsrq(
long long __A) {
107 return 63 - __builtin_clzll(__A);
121 static __inline__
long long __attribute__((__always_inline__, __nodebug__))
122 __bswapq(
long long __A) {
123 return __builtin_bswap64(__A);
126 #define _bswap64(A) __bswapq((A)) 141 static __inline__
int __attribute__((__always_inline__, __nodebug__))
142 __popcntd(
unsigned int __A)
144 return __builtin_popcount(__A);
147 #define _popcnt32(A) __popcntd((A)) 162 static __inline__
long long __attribute__((__always_inline__, __nodebug__))
163 __popcntq(
unsigned long long __A)
165 return __builtin_popcountll(__A);
168 #define _popcnt64(A) __popcntq((A)) 172 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__))
175 return __builtin_ia32_readeflags_u64();
178 static __inline__
void __attribute__((__always_inline__, __nodebug__))
179 __writeeflags(
unsigned long long __f)
181 __builtin_ia32_writeeflags_u64(__f);
185 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__))
188 return __builtin_ia32_readeflags_u32();
191 static __inline__
void __attribute__((__always_inline__, __nodebug__))
192 __writeeflags(
unsigned int __f)
194 __builtin_ia32_writeeflags_u32(__f);
213 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__, __target__(
"sse4.2")))
214 __crc32b(
unsigned int __C,
unsigned char __D)
216 return __builtin_ia32_crc32qi(__C, __D);
234 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__, __target__(
"sse4.2")))
235 __crc32w(
unsigned int __C,
unsigned short __D)
237 return __builtin_ia32_crc32hi(__C, __D);
255 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__, __target__(
"sse4.2")))
256 __crc32d(
unsigned int __C,
unsigned int __D)
258 return __builtin_ia32_crc32si(__C, __D);
277 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__, __target__(
"sse4.2")))
278 __crc32q(
unsigned long long __C,
unsigned long long __D)
280 return __builtin_ia32_crc32di(__C, __D);
284 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__))
286 return __builtin_ia32_rdpmc(__A);
290 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__))
291 __rdtscp(
unsigned int *__A) {
292 return __builtin_ia32_rdtscp(__A);
295 #define _rdtsc() __rdtsc() 297 #define _rdpmc(A) __rdpmc(A) 299 static __inline__
void __attribute__((__always_inline__, __nodebug__))
301 __builtin_ia32_wbinvd();
304 static __inline__
unsigned char __attribute__((__always_inline__, __nodebug__))
305 __rolb(
unsigned char __X,
int __C) {
306 return __builtin_rotateleft8(__X, __C);
309 static __inline__
unsigned char __attribute__((__always_inline__, __nodebug__))
310 __rorb(
unsigned char __X,
int __C) {
311 return __builtin_rotateright8(__X, __C);
314 static __inline__
unsigned short __attribute__((__always_inline__, __nodebug__))
315 __rolw(
unsigned short __X,
int __C) {
316 return __builtin_rotateleft16(__X, __C);
319 static __inline__
unsigned short __attribute__((__always_inline__, __nodebug__))
320 __rorw(
unsigned short __X,
int __C) {
321 return __builtin_rotateright16(__X, __C);
324 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__))
325 __rold(
unsigned int __X,
int __C) {
326 return __builtin_rotateleft32(__X, __C);
329 static __inline__
unsigned int __attribute__((__always_inline__, __nodebug__))
330 __rord(
unsigned int __X,
int __C) {
331 return __builtin_rotateright32(__X, __C);
335 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__))
336 __rolq(
unsigned long long __X,
int __C) {
337 return __builtin_rotateleft64(__X, __C);
340 static __inline__
unsigned long long __attribute__((__always_inline__, __nodebug__))
341 __rorq(
unsigned long long __X,
int __C) {
342 return __builtin_rotateright64(__X, __C);
350 #define _lrotl(a,b) __rolq((a), (b)) 351 #define _lrotr(a,b) __rorq((a), (b)) 353 #define _lrotl(a,b) __rold((a), (b)) 354 #define _lrotr(a,b) __rord((a), (b)) 356 #define _rotl(a,b) __rold((a), (b)) 357 #define _rotr(a,b) __rord((a), (b)) 361 #define _rotwl(a,b) __rolw((a), (b)) 362 #define _rotwr(a,b) __rorw((a), (b)) static __inline__ unsigned char int __C
__inline __m128d double __X
__inline void __m128d __A
static __inline__ unsigned int unsigned char __D
static __inline__ int __attribute__((__always_inline__, __nodebug__)) __bsfd(int __A)
Find the first set bit starting from the lsb.