The following tables list and describe intrinsics that you can use across all Intel® architectures, except where noted. These intrinsics are available for both Intel® and non-Intel microprocessors but they may perform additional optimizations for Intel® microprocessors than they perform for non-Intel microprocessors.
Note support for casting functions for various INT and FP types for use across Intel® architectures intrinsic functions only change the type, do not convert between integer and floating point values.
Intrinsic |
Description |
---|---|
Intrinsics for all Supported Intel® Architectures |
|
__cpuid |
Queries the processor for information about processor type and supported features. The Intel® C++ Compiler supports the Microsoft* implementation of this intrinsic. See the Microsoft documentation for details. |
void *_alloca(int) |
Allocates memory in the local stack frame. The memory is automatically freed upon return from the function. |
int _bit_scan_forward(int x) |
Returns the bit index of the least significant set bit of x. If x is 0, the result is undefined. |
int _bit_scan_reverse(int) |
Returns the bit index of the most significant set bit of x. If xis 0, the result is undefined. |
unsigned char _BitScanForward(unsigned __int32 *p, unsigned __int32 b); and for Intel® 64 architecture only: unsigned char _BitScanForward64(unsigned __int32 *p, unsigned __int64 b); |
Sets *p to the bit index of the least significant set bit of b or leaves it unchanged if b is zero. The function returns a non-zero result when b is non-zero and returns zero when b is zero. |
unsigned char _BitScanReverse(unsigned __int32 *p, unsigned __int32 b); and for Intel® 64 architecture only: unsigned char _BitScanReverse64(unsigned __int32 *p, unsigned __int64 b); |
Sets *p to the bit index of the most significant set bit of b or leaves it unchanged if b is zero. The function returns a non-zero result when b is non-zero and returns zero when b is zero. |
unsigned char _bittest(__int32 *p, __int32 b); and for Intel® 64 architecture only: unsigned char _bittest64(__int64 *p, __int64 b); |
Returns the bit in position b of the memory addressed by p. |
unsigned char _bittestandcomplement(__int32 *p, __int32 b); and for Intel® 64 architecture only: unsigned char _bittestandcomplement64(__int64 *p, __int64 b); |
Returns the bit in position b of the memory addressed by p, then compliments that bit. |
unsigned char _bittestandreset(__int32 *p, __int32 b); and for Intel® 64 architecture only: unsigned char _bittestandreset64(__int64 *p, __int64 b); |
Returns the bit in position b of the memory addressed by p, then resets that bit to 0. |
unsigned char _bittestandset(__int32 *p, __int32 b); and for Intel® 64 architecture only: unsigned char _bittestandset64(__int64 *p, __int64 b); |
Returns the bit in position b of the memory addressed by p, then sets the bit to 1. |
int _bswap(int) |
Reverses the byte order of x. Swaps 4 bytes; bits 0-7 are swapped with bits 24-31, bits 8-15 are swapped with bits 16-23. |
__int64 _bswap64(__int64 x) |
Reverses the byte order of x. Swaps 8 bytes; bits 0-7 are swapped with bits 56-63, bits 8-15 are swapped with bits 48-55, bits 16-23 are swapped with bits 40-47, and bits 24-31 are swapped with bits 32-39. |
int _popcnt32(int x) |
Returns the number of set bits in x. |
int _popcnt64(__int64 x) |
Returns the number of set bits in x. |
__int64 _rdpmc(int p) |
Returns the current value of the 40-bit performance monitoring counter specified by p. |
Intrinsics for Intel® 64 Architectures |
|
__int64 _rdtsc(void) |
Returns the current value of the processor's 64-bit time stamp counter. |
int _setjmp(jmp_buf) |
A fast version of setjmp(), which bypasses the termination handling. Saves the callee-save registers, stack pointer and return address. |
int __pin_value(char *annotation) | Bypasses code that executes only in PIN mode. Especially useful with Intel® Threading Building Blocks, which adds specified annotations to the object file so that code is executed in PIN mode. |