Classes Quick Reference

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.

Logical Operators: Corresponding Intrinsics and 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

Arithmetic: Corresponding Intrinsics and Classes

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

Shift Operators: Corresponding Intrinsics and Classes

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

Comparison Operators: Corresponding Intrinsics and Classes

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.

Conditional Select Operators: Corresponding Intrinsics and 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.

Packing and Unpacking Operators: Corresponding Intrinsics and 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

Conversions Operators: Corresponding Intrinsics and Classes

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