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 Intrinsics 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