Developer Guide and Reference


Naming and Usage Syntax

Most intrinsic names use the following notational convention:
The following table explains each item in the syntax.
Indicates the basic operation of the intrinsic; for example,
for addition and
for subtraction.
Denotes the type of data the instruction operates on. The first one or two letters of each suffix denote whether the data is packed (
), extended packed (
), or scalar (
). The remaining letters and numbers denote the type, with notation as follows:
  • s
    single-precision floating point
  • d
    double-precision floating point
  • i128
    signed 128-bit integer
  • i64
    signed 64-bit integer
  • u64
    unsigned 64-bit integer
  • i32
    signed 32-bit integer
  • u32
    unsigned 32-bit integer
  • i16
    signed 16-bit integer
  • u16
    unsigned 16-bit integer
  • i8
    signed 8-bit integer
  • u8
    unsigned 8-bit integer
A number appended to a variable name indicates the element of a packed object. For example,
is the lowest word of
. Some intrinsics are "composites" because they require more than one instruction to implement them.
The packed values are represented in right-to-left order, with the lowest value being used for scalar operations. Consider the following example operation:
double a[2] = {1.0, 2.0}; __m128d t = _mm_load_pd(a);
The result is the same as either of the following:
__m128d t = _mm_set_pd(2.0, 1.0); __m128d t = _mm_setr_pd(1.0, 2.0);
In other words, the
register that holds the value
appears as follows: