background image

INSTRUCTION SET REFERENCE, A-L

3-14 Vol. 2A

_epu16, which indicates a function that operates on packed 16-bit unsigned integer values. Packed 16-bit 
unsigned integers correspond to an array of unsigned short with 8, 16 or 32 elements.

_epu32, which indicates a function that operates on packed 32-bit unsigned integer values. Packed 32-bit 
unsigned integers correspond to an array of unsigned with 4, 8 or 16 elements.

_epu64, which indicates a function that operates on packed 64-bit unsigned integer values. Packed 64-bit 
unsigned integers correspond to an array of unsigned long long (or unsigned long if it is a 64-bit data type) with 
2, 4 or 8 elements.

_si128, which indicates a function that operates on a single 128-bit value of type __m128i.

_si256, which indicates a function that operates on a single a 256-bit value of type __m256i.

_si512, which indicates a function that operates on a single a 512-bit value of type __m512i.

Values of any packed integer type can be loaded from an array using the _mm_loadu_si128, 
_mm256_loadu_si256, 
or _mm512_loadu_si512 functions, and they can be stored in an array using 
_mm_storeu_si128, _mm256_storeu_si256, or _mm512_storeu_si512.
These functions and data types are used with the SSE, AVX, and AVX-512 instruction set extension families. In 
addition there are similar functions that correspond to MMX instructions. These are less frequently used because 
they require additional state management, and only operate on 64-bit packed integer values.
The declarations of Intel C/C++ compiler intrinsic functions may reference some non-standard data types, such as 

__int64. The C Standard header stdint.h defines similar platform-independent types, and the documentation for 
that header gives characteristics that apply to corresponding non-standard types according to the following table. 

For a more detailed description of each intrinsic function and additional information related to its usage, refer to the 
online Intel Intrinsics Guide, 

https://software.intel.com/sites/landingpage/IntrinsicsGuide

.

3.1.1.11   Flags Affected Section 

The “Flags Affected” section lists the flags in the EFLAGS register that are affected by the instruction. When a flag 
is cleared, it is equal to 0; when it is set, it is equal to 1. The arithmetic and logical instructions usually assign values 
to the status flags in a uniform manner (see Appendix A, “EFLAGS Cross-Reference,” in the Intel® 64 and IA-32 
Architectures Software Developer’s Manual, Volume 1
). 
Non-conventional assignments are described in the “Oper-
ation” section. The values of flags listed as undefined may be changed by the instruction in an indeterminate 
manner. Flags that are not listed are unchanged by the instruction.

3.1.1.12   FPU Flags Affected Section 

The floating-point instructions have an “FPU Flags Affected” section that describes how each instruction can affect 
the four condition code flags of the FPU status word.

3.1.1.13   Protected Mode Exceptions Section

The “Protected Mode Exceptions” section lists the exceptions that can occur when the instruction is executed in 
protected mode and the reasons for the exceptions. Each exception is given a mnemonic that consists of a pound 

Table 3-3.  Standard and Non-standard Data Types

Non-standard Type

Standard Type (from stdint.h)

__int64

int64_t

unsigned __int64

uint64_t

__int32

int32_t

unsigned __int32

uint32_t

__int16

int16_t

unsigned __int16

uint16_t