This appendix contains tables listing the class, functionality, and corresponding intrinsics for each class in the Intel® C++ Class Libraries for SIMD Operations. The following table lists all Intel C++ Compiler intrinsics that are not implemented in the C++ SIMD classes.
| Operators | Corresponding Intrinsic |
I128vec1, I64vec2, I32vec4, I16vec8, I8vec16 |
I64vec, I32vec, I16vec, I8vec8 |
F64vec2 | F32vec4 | F32vec1 |
|---|---|---|---|---|---|---|
| &, &= | _mm_and_[x] | si128 | si64 | pd | ps | ps |
| |, |= | _mm_or_[x] | si128 | si64 | pd | ps | ps |
| ^, ^= | _mm_xor_[x] | si128 | si64 | pd | ps | ps |
| Andnot | _mm_andnot_[x] | si128 | si64 | pd | N/A | N/A |
| Operators | Corresponding Intrinsic |
I64vec2 | I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| +, += | _mm_add_[x] | epi64 | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| -, -= | _mm_sub_[x] | epi64 | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| *, *= | _mm_mullo_[x] | N/A | N/A | epi16 | N/A | N/A | pi16 | N/A | pd | ps | ss |
| /, /= | _mm_div_[x] | N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| mul_high | _mm_mulhi_[x] | N/A | N/A | epi16 | N/A | N/A | pi16 | N/A | N/A | N/A | N/A |
| mul_add | _mm_madd_[x] | N/A | N/A | epi16 | N/A | N/A | pi16 | N/A | N/A | N/A | N/A |
| sqrt | _mm_sqrt_[x] | N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| rcp | _mm_rcp_[x] | N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| rcp_nr | _mm_rcp_[x] _mm_add_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| rsqrt | _mm_rsqrt_[x] | N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| rsqrt_nr | _mm_rsqrt_[x] _mm_sub_[x] _mm_mul_[x] |
N/A | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| Operators | Corresponding Intrinsic |
I128vec1 | I64vec2 | I32vec4 | I16vec8 | I8vec16 | I64vec1 | I32vec2 | I16vec4 | I8vec8 |
|---|---|---|---|---|---|---|---|---|---|---|
| >>,>>= | _mm_srl_[x] _mm_srli_[x] _mm_sra__[x] _mm_srai_[x] |
N/A N/A N/A N/A |
epi64 epi64 N/A N/A |
epi32 epi32 epi32 epi32 |
epi16 epi16 epi16 epi16 |
N/A N/A N/A N/A |
si64 si64 N/A N/A |
pi32 pi32 pi32 pi32 |
pi16 pi16 pi16 pi16 |
N/A N/A N/A N/A |
| <<, <<= | _mm_sll_[x] _mm_slli_[x] |
N/A N/A |
epi64 epi64 |
epi32 epi32 |
epi16 epi16 |
N/A N/A |
si64 si64 |
pi32 pi32 |
pi16 pi16 |
N/A N/A |
| Operators | Corresponding Intrinsic |
I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
|---|---|---|---|---|---|---|---|---|---|---|
| cmpeq | _mm_cmpeq_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| cmpneq | _mm_cmpeq_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
pd | ps | ss |
| cmpgt | _mm_cmpgt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| cmpge | _mm_cmpge_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
pd | ps | ss |
| cmplt | _mm_cmplt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| cmple | _mm_cmple_[x] _mm_andnot_[y]* |
epi32 si128 |
epi16 si128 |
epi8 si128 |
pi32 si64 |
pi16 si64 |
pi8 si64 |
pd | ps | ss |
| cmpngt | _mm_cmpngt_[x] | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | ss |
| cmpnge | _mm_cmpnge_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| cmnpnlt | _mm_cmpnlt_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| cmpnle | _mm_cmpnle_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
* Note that _mm_andnot_[y] intrinsics do not apply to the fvec classes.
| Operators | Corresponding Intrinsic |
I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
|---|---|---|---|---|---|---|---|---|---|---|
| select_eq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_neq | _mm_cmpeq_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_gt | _mm_cmpgt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_ge | _mm_cmpge_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_lt | _mm_cmplt_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_le | _mm_cmple_[x] _mm_and_[y] _mm_andnot_[y]* _mm_or_[y] |
epi32 si128 si128 si128 |
epi16 si128 si128 si128 |
epi8 si128 si128 si128 |
pi32 si64 si64 si64 |
pi16 si64 si64 si64 |
pi8 si64 si64 si64 |
pd | ps | ss |
| select_ngt | _mm_cmpgt_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| select_nge | _mm_cmpge_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| select_nlt | _mm_cmplt_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
| select_nle | _mm_cmple_[x] | N/A | N/A | N/A | N/A | N/A | N/A | pd | ps | ss |
* Note that _mm_andnot_[y] intrinsics do not apply to the fvec classes.
| Operators | Corresponding Intrinsic |
I64vec2 | I32vec4 | I16vec8 | I8vec16 | I32vec2 | I16vec4 | I8vec8 | F64vec2 | F32vec4 | F32vec1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| unpack_high | _mm_unpackhi_[x] | epi64 | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | N/A |
| unpack_low | _mm_unpacklo_[x] | epi64 | epi32 | epi16 | epi8 | pi32 | pi16 | pi8 | pd | ps | N/A |
| pack_sat | _mm_packs_[x] | N/A | epi32 | epi16 | N/A | pi32 | pi16 | N/A | N/A | N/A | N/A |
| packu_sat | _mm_packus_[x] | N/A | N/A | epi16 | N/A | N/A | pu16 | N/A | N/A | N/A | N/A |
| sat_add | _mm_adds_[x] | N/A | N/A | epi16 | epi8 | N/A | pi16 | pi8 | pd | ps | ss |
| sat_sub | _mm_subs_[x] | N/A | N/A | epi16 | epi8 | N/A | pi16 | pi8 | pi16 | pi8 | pd |
| Operators | Corresponding Intrinsic |
|---|---|
| F64vec2ToInt | _mm_cvttsd_si32 |
| F32vec4ToF64vec2 | _mm_cvtps_pd |
| F64vec2ToF32vec4 | _mm_cvtpd_ps |
| IntToF64vec2 | _mm_cvtsi32_sd |
| F32vec4ToInt | _mm_cvtt_ss2si |
| F32vec4ToIs32vec2 | _mm_cvttps_pi32 |
| IntToF32vec4 | _mm_cvtsi32_ss |
| Is32vec2ToF32vec4 | _mm_cvtpi32_ps |