Visible to Intel only — GUID: GUID-709099A7-B463-4C60-B404-046AE49606D3
Visible to Intel only — GUID: GUID-709099A7-B463-4C60-B404-046AE49606D3
Naming and Usage Syntax
Most intrinsic names use the following notational convention:
_mm_<intrin_op>_<suffix>
The following table explains each item in the syntax.
<intrin_op> |
Indicates the basic operation of the intrinsic; for example, add for addition and sub for subtraction. |
<suffix> |
Denotes the type of data the instruction operates on. The first one or two letters of each suffix denote whether the data is packed (p), extended packed (ep), or scalar (s). The remaining letters and numbers denote the type, with notation as follows:
|
A number appended to a variable name indicates the element of a packed object. For example, r0 is the lowest word of r. 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 xmm register that holds the value t appears as follows:
The "scalar" element is 1.0. Due to the nature of the instruction, some intrinsics require their arguments to be immediates (constant integer literals).