Expand description
x86 SSE-family SIMD intrinsics reimplemented on ARM NEON.
This crate mirrors the Intel _mm_* intrinsic surface (SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AES, CRC32C) on top of core::arch::aarch64 NEON.
Most functions reproduce the observable x86 lane semantics under
little-endian memory ordering. The float min/max functions use NEON min/max:
they propagate NaN operands and order -0.0 below +0.0.
The SSE4.2 surface covers 64-bit compare (_mm_cmpgt_epi64), CRC32C
(_mm_crc32_u8/u16/u32/u64), and population count (_mm_popcnt_u32/u64).
The packed string-compare instructions (_mm_cmpistr* and _mm_cmpestr*)
are not provided.
§Types
Four vector types match the Intel ABI. Each wraps a NEON register:
__m128holds fourf32lanes overfloat32x4_t.__m128dholds twof64lanes overfloat64x2_t.__m128iholds a 128-bit integer vector overint64x2_t.__m64holds a 64-bit integer vector overint64x1_t.
§Lane ordering
_mm_set_ps(w, z, y, x) places x in lane 0 and w in lane 3. Arguments
read most-significant lane first. Memory stores least-significant lane
first. _mm_setr_* reverses the argument order. Every set/setr
function preserves this exact mapping.
§Platform
AArch64 only. The intrinsics use NEON registers that exist on ARMv8. The target must be little-endian, which every AArch64 target is.
§Safety
The public functions are safe. They wrap unsafe NEON intrinsic calls that
carry no memory-safety preconditions when the target supports NEON, which is
guaranteed on AArch64. Load and store functions that take raw pointers are
marked unsafe and document their alignment and length requirements.
§no_std
The crate is #![no_std]. It depends only on core::arch::aarch64 and pulls
in no allocator. Rounding for the float-to-int conversions uses NEON rounding
ops that read the FPCR mode, so no libm dependency is needed.
Structs§
- __m64
- 64-bit integer vector.
- __m128
- 128-bit vector of four
f32lanes. - __m128d
- 128-bit vector of two
f64lanes. - __m128i
- 128-bit integer vector.
Constants§
- _MM_
DENORMALS_ ZERO_ MASK - Mask selecting the denormals-are-zero bit.
- _MM_
DENORMALS_ ZERO_ OFF - Denormals-are-zero disabled.
- _MM_
DENORMALS_ ZERO_ ON - Denormals-are-zero enabled.
- _MM_
FLUSH_ ZERO_ MASK - Mask selecting the flush-to-zero bit.
- _MM_
FLUSH_ ZERO_ OFF - Flush-to-zero disabled.
- _MM_
FLUSH_ ZERO_ ON - Flush-to-zero enabled.
- _MM_
FROUND_ CEIL - Round toward positive infinity and raise exceptions.
- _MM_
FROUND_ CUR_ DIRECTION - Use the current MXCSR rounding mode.
- _MM_
FROUND_ FLOOR - Round toward negative infinity and raise exceptions.
- _MM_
FROUND_ NEARBYINT - Round with the current direction and suppress exceptions.
- _MM_
FROUND_ NINT - Round to nearest and raise exceptions.
- _MM_
FROUND_ NO_ EXC - Suppress floating-point exceptions.
- _MM_
FROUND_ RAISE_ EXC - Raise floating-point exceptions (the default, value zero).
- _MM_
FROUND_ RINT - Round with the current direction and raise exceptions.
- _MM_
FROUND_ TO_ NEAREST_ INT - Round to nearest, ties to even.
- _MM_
FROUND_ TO_ NEG_ INF - Round toward negative infinity.
- _MM_
FROUND_ TO_ POS_ INF - Round toward positive infinity.
- _MM_
FROUND_ TO_ ZERO - Round toward zero (truncate).
- _MM_
FROUND_ TRUNC - Round toward zero and raise exceptions.
- _MM_
HINT_ NTA - Cache hint: non-temporal.
- _MM_
HINT_ T0 - Cache hint: prefetch to all levels.
- _MM_
HINT_ T1 - Cache hint: prefetch to L2 and higher.
- _MM_
HINT_ T2 - Cache hint: prefetch to L3 and higher.
- _MM_
ROUND_ DOWN - MXCSR rounding mode: toward negative infinity.
- _MM_
ROUND_ MASK - Mask selecting the MXCSR rounding-mode bits.
- _MM_
ROUND_ NEAREST - MXCSR rounding mode: nearest.
- _MM_
ROUND_ TOWARD_ ZERO - MXCSR rounding mode: toward zero.
- _MM_
ROUND_ UP - MXCSR rounding mode: toward positive infinity.
- _SIDD_
BIT_ MASK - Mask output: one bit per element.
- _SIDD_
CMP_ EQUAL_ ANY - Comparison: any element of b equals any element of a.
- _SIDD_
CMP_ EQUAL_ EACH - Comparison: elements compare equal lane by lane.
- _SIDD_
CMP_ EQUAL_ ORDERED - Comparison: substring search.
- _SIDD_
CMP_ RANGES - Comparison: elements of b fall inside ranges from a.
- _SIDD_
LEAST_ SIGNIFICANT - Index output: least significant set bit.
- _SIDD_
MASKED_ NEGATIVE_ POLARITY - Polarity: negate, masked to valid b elements.
- _SIDD_
MASKED_ POSITIVE_ POLARITY - Polarity: keep, masked to valid b elements.
- _SIDD_
MOST_ SIGNIFICANT - Index output: most significant set bit.
- _SIDD_
NEGATIVE_ POLARITY - Polarity: negate the match bits.
- _SIDD_
POSITIVE_ POLARITY - Polarity: keep the match bits as computed.
- _SIDD_
SBYTE_ OPS - String data format: signed bytes.
- _SIDD_
SWORD_ OPS - String data format: signed words.
- _SIDD_
UBYTE_ OPS - String data format: unsigned bytes.
- _SIDD_
UNIT_ MASK - Mask output: one full element per bit.
- _SIDD_
UWORD_ OPS - String data format: unsigned words.
Functions§
- _MM_
GET_ DENORMALS_ ZERO_ MODE - Read the denormals-are-zero mode. ARM ties DAZ to the same bit as FTZ.
- _MM_
GET_ FLUSH_ ZERO_ MODE - Read the flush-to-zero mode as
_MM_FLUSH_ZERO_ONor_MM_FLUSH_ZERO_OFF. - _MM_
GET_ ROUNDING_ MODE - Read the current rounding mode as one of the
_MM_ROUND_*values. - _MM_
SET_ DENORMALS_ ZERO_ MODE - Set the denormals-are-zero mode. Matches
_MM_SET_DENORMALS_ZERO_MODE. - _MM_
SET_ FLUSH_ ZERO_ MODE - Set the flush-to-zero mode. Matches
_MM_SET_FLUSH_ZERO_MODE. - _MM_
SET_ ROUNDING_ MODE - Set the rounding mode from a
_MM_ROUND_*value. - _MM_
SHUFFLE - Pack four 2-bit lane selectors into a shuffle immediate.
- _MM_
SHUFFL E2 - Pack two 1-bit lane selectors into a shuffle immediate for
_mm_shuffle_pd. - _mm_
abs_ epi8 - Absolute value of sixteen
i8lanes. Matches_mm_abs_epi8. - _mm_
abs_ epi16 - Absolute value of eight
i16lanes. Matches_mm_abs_epi16. - _mm_
abs_ epi32 - Absolute value of four
i32lanes. Matches_mm_abs_epi32. - _mm_
add_ epi8 - Add sixteen
i8lanes with wraparound. Matches_mm_add_epi8. - _mm_
add_ epi16 - Add eight
i16lanes with wraparound. Matches_mm_add_epi16. - _mm_
add_ epi32 - Add four
i32lanes with wraparound. Matches_mm_add_epi32. - _mm_
add_ epi64 - Add two
i64lanes with wraparound. Matches_mm_add_epi64. - _mm_
add_ pd - Add two
f64lanes. Matches_mm_add_pd. - _mm_
add_ pi16 - Add four
i16lanes with wraparound. Matches_mm_add_pi16. - _mm_
add_ pi32 - Add two
i32lanes with wraparound. Matches_mm_add_pi32. - _mm_
add_ ps - Add four packed
f32lanes. Matches_mm_add_ps. - _mm_
add_ sd - Add the low lanes, copy the high lane from
a. Matches_mm_add_sd. - _mm_
add_ ss - Add the low lanes and copy the upper three from
a. Matches_mm_add_ss. - _mm_
adds_ epi8 - Add sixteen
i8lanes with signed saturation. Matches_mm_adds_epi8. - _mm_
adds_ epi16 - Add eight
i16lanes with signed saturation. Matches_mm_adds_epi16. - _mm_
adds_ epu8 - Add sixteen
u8lanes with unsigned saturation. Matches_mm_adds_epu8. - _mm_
adds_ epu16 - Add eight
u16lanes with unsigned saturation. Matches_mm_adds_epu16. - _mm_
addsub_ pd - Add odd lane, subtract even lane:
a0-b0, a1+b1. Matches_mm_addsub_pd. - _mm_
addsub_ ps - Add odd lanes and subtract even lanes:
a0-b0, a1+b1, a2-b2, a3+b3. Matches_mm_addsub_ps. - _mm_
aesdec_ si128 - One AES decryption round: InvShiftRows, InvSubBytes, InvMixColumns, XOR key.
Matches
_mm_aesdec_si128. - _mm_
aesdeclast_ si128 - Last AES decryption round: InvShiftRows, InvSubBytes, then XOR the key.
Matches
_mm_aesdeclast_si128. - _mm_
aesenc_ si128 - One AES encryption round: ShiftRows, SubBytes, MixColumns, then XOR the key.
Matches
_mm_aesenc_si128. - _mm_
aesenclast_ si128 - Last AES encryption round: ShiftRows, SubBytes, then XOR the key.
Matches
_mm_aesenclast_si128. - _mm_
aesimc_ si128 - Apply InvMixColumns to
a. Matches_mm_aesimc_si128. - _mm_
aeskeygenassist_ si128 - Assist AES key expansion. Matches
_mm_aeskeygenassist_si128. - _mm_
alignr_ epi8 - Concatenate
b:a, shift right byIMMbytes, keep the low 16. Matches_mm_alignr_epi8. - _mm_
and_ pd - Bitwise AND of two
f64vectors. Matches_mm_and_pd. - _mm_
and_ ps - Bitwise AND of two
f32vectors. Matches_mm_and_ps. - _mm_
and_ si128 - Bitwise AND of two integer vectors. Matches
_mm_and_si128. - _mm_
andnot_ pd - Bitwise
(!a) & b. The NOT applies toa. Matches_mm_andnot_pd. - _mm_
andnot_ ps - Bitwise
(!a) & b. The NOT applies toa. Matches_mm_andnot_ps. - _mm_
andnot_ si128 - Bitwise
(!a) & b. The NOT applies toa. Matches_mm_andnot_si128. - _mm_
avg_ epu8 - Rounded average of sixteen
u8lanes. Matches_mm_avg_epu8. - _mm_
avg_ epu16 - Rounded average of eight
u16lanes. Matches_mm_avg_epu16. - _mm_
avg_ pu8 - Rounded average of eight
u8lanes. Matches_mm_avg_pu8. - _mm_
avg_ pu16 - Rounded average of four
u16lanes. Matches_mm_avg_pu16. - _mm_
blend_ epi16 - Blend eight
i16lanes by the immediate mask. Matches_mm_blend_epi16. - _mm_
blend_ pd - Blend two
f64lanes by the immediate mask. Matches_mm_blend_pd. - _mm_
blend_ ps - Blend four
f32lanes by the immediate mask. Matches_mm_blend_ps. - _mm_
blendv_ epi8 - Blend sixteen
i8lanes by the sign bit of eachmasklane. Matches_mm_blendv_epi8. - _mm_
blendv_ pd - Blend two
f64lanes by the sign bit of eachmasklane. Matches_mm_blendv_pd. - _mm_
blendv_ ps - Blend four
f32lanes by the sign bit of eachmasklane. Matches_mm_blendv_ps. - _mm_
bslli_ si128 - Alias of
_mm_slli_si128. Matches_mm_bslli_si128. - _mm_
bsrli_ si128 - Alias of
_mm_srli_si128. Matches_mm_bsrli_si128. - _mm_
castpd_ ps - Cast between vector types without changing bits. Matches
_mm_castpd_ps. - _mm_
castpd_ si128 - Cast between vector types without changing bits. Matches
_mm_castpd_si128. - _mm_
castps_ pd - Cast between vector types without changing bits. Matches
_mm_castps_pd. - _mm_
castps_ si128 - Cast between vector types without changing bits.
- _mm_
castsi128_ pd - Cast between vector types without changing bits. Matches
_mm_castsi128_pd. - _mm_
castsi128_ ps - Cast between vector types without changing bits. Matches
_mm_castsi128_ps. - _mm_
ceil_ pd - Round two
f64lanes toward positive infinity. Matches_mm_ceil_pd. - _mm_
ceil_ ps - Round four
f32lanes toward positive infinity. Matches_mm_ceil_ps. - _mm_
ceil_ sd - Ceil lane 0 of
b, high lane froma. Matches_mm_ceil_sd. - _mm_
ceil_ ss - Ceil lane 0 of
b, upper lanes froma. Matches_mm_ceil_ss. - _mm_
clmulepi64_ si128 - Carry-less multiply of selected 64-bit halves. Matches
_mm_clmulepi64_si128. - _mm_
cmpeq_ epi8 - Lanes where sixteen
i8are equal become all-ones. Matches_mm_cmpeq_epi8. - _mm_
cmpeq_ epi16 - Lanes where eight
i16are equal become all-ones. Matches_mm_cmpeq_epi16. - _mm_
cmpeq_ epi32 - Lanes where four
i32are equal become all-ones. Matches_mm_cmpeq_epi32. - _mm_
cmpeq_ epi64 - Compare two
i64lanes for equality. Matches_mm_cmpeq_epi64. - _mm_
cmpeq_ pd - Compare
a == blane-wise. Matches_mm_cmpeq_pd. - _mm_
cmpeq_ ps - Lanes where
a == bbecome all-ones, else all-zeros. Matches_mm_cmpeq_ps. - _mm_
cmpeq_ ss - Scalar
==on lane 0. Matches_mm_cmpeq_ss. - _mm_
cmpge_ pd - Compare
a >= blane-wise. Matches_mm_cmpge_pd. - _mm_
cmpge_ ps - Compare
a >= blane-wise. Matches_mm_cmpge_ps. - _mm_
cmpge_ ss - Scalar
>=on lane 0. Matches_mm_cmpge_ss. - _mm_
cmpgt_ epi8 - Signed
a > bfor sixteeni8lanes. Matches_mm_cmpgt_epi8. - _mm_
cmpgt_ epi16 - Signed
a > bfor eighti16lanes. Matches_mm_cmpgt_epi16. - _mm_
cmpgt_ epi32 - Signed
a > bfor fouri32lanes. Matches_mm_cmpgt_epi32. - _mm_
cmpgt_ epi64 - Signed
a > bfor twoi64lanes. Matches_mm_cmpgt_epi64. - _mm_
cmpgt_ pd - Compare
a > blane-wise. Matches_mm_cmpgt_pd. - _mm_
cmpgt_ ps - Compare
a > blane-wise. Matches_mm_cmpgt_ps. - _mm_
cmpgt_ ss - Scalar
>on lane 0. Matches_mm_cmpgt_ss. - _mm_
cmple_ pd - Compare
a <= blane-wise. Matches_mm_cmple_pd. - _mm_
cmple_ ps - Compare
a <= blane-wise. Matches_mm_cmple_ps. - _mm_
cmple_ ss - Scalar
<=on lane 0. Matches_mm_cmple_ss. - _mm_
cmplt_ epi8 - Signed
a < bfor sixteeni8lanes. Matches_mm_cmplt_epi8. - _mm_
cmplt_ epi16 - Signed
a < bfor eighti16lanes. Matches_mm_cmplt_epi16. - _mm_
cmplt_ epi32 - Signed
a < bfor fouri32lanes. Matches_mm_cmplt_epi32. - _mm_
cmplt_ pd - Compare
a < blane-wise. Matches_mm_cmplt_pd. - _mm_
cmplt_ ps - Compare
a < blane-wise. Matches_mm_cmplt_ps. - _mm_
cmplt_ ss - Scalar
<on lane 0. Matches_mm_cmplt_ss. - _mm_
cmpneq_ pd - Compare
a != blane-wise. Matches_mm_cmpneq_pd. - _mm_
cmpneq_ ps - Compare
a != blane-wise. Matches_mm_cmpneq_ps. - _mm_
cmpneq_ ss - Scalar
!=on lane 0. Matches_mm_cmpneq_ss. - _mm_
cmpnge_ ps - Compare
!(a >= b)lane-wise. Matches_mm_cmpnge_ps. - _mm_
cmpnge_ ss - Scalar
!(>=)on lane 0. Matches_mm_cmpnge_ss. - _mm_
cmpngt_ ps - Compare
!(a > b)lane-wise. Matches_mm_cmpngt_ps. - _mm_
cmpngt_ ss - Scalar
!(>)on lane 0. Matches_mm_cmpngt_ss. - _mm_
cmpnle_ ps - Compare
!(a <= b)lane-wise. Matches_mm_cmpnle_ps. - _mm_
cmpnle_ ss - Scalar
!(<=)on lane 0. Matches_mm_cmpnle_ss. - _mm_
cmpnlt_ ps - Compare
!(a < b)lane-wise. Matches_mm_cmpnlt_ps. - _mm_
cmpnlt_ ss - Scalar
!(<)on lane 0. Matches_mm_cmpnlt_ss. - _mm_
cmpord_ pd - Ordered compare: all-ones where neither lane is NaN. Matches
_mm_cmpord_pd. - _mm_
cmpord_ ps - Ordered compare: all-ones where neither lane is NaN. Matches
_mm_cmpord_ps. - _mm_
cmpord_ ss - Scalar ordered test on lane 0. Matches
_mm_cmpord_ss. - _mm_
cmpunord_ pd - Unordered compare: all-ones where either lane is NaN. Matches
_mm_cmpunord_pd. - _mm_
cmpunord_ ps - Unordered compare: all-ones where either lane is NaN. Matches
_mm_cmpunord_ps. - _mm_
cmpunord_ ss - Scalar unordered test on lane 0. Matches
_mm_cmpunord_ss. - _mm_
comieq_ ss - Compare lane 0 for equality. Returns 1 or 0. NaN yields 0. Matches
_mm_comieq_ss. - _mm_
comige_ ss - Compare lane 0 with
>=. Returns 1 or 0. Matches_mm_comige_ss. - _mm_
comigt_ ss - Compare lane 0 with
>. Returns 1 or 0. Matches_mm_comigt_ss. - _mm_
comile_ ss - Compare lane 0 with
<=. Returns 1 or 0. Matches_mm_comile_ss. - _mm_
comilt_ ss - Compare lane 0 with
<. Returns 1 or 0. Matches_mm_comilt_ss. - _mm_
comineq_ ss - Compare lane 0 for inequality. NaN yields 1. Matches
_mm_comineq_ss. - _mm_
crc32_ u8 - Accumulate one byte into a CRC-32C checksum. Matches
_mm_crc32_u8. - _mm_
crc32_ u16 - Accumulate two bytes into a CRC-32C checksum. Matches
_mm_crc32_u16. - _mm_
crc32_ u32 - Accumulate four bytes into a CRC-32C checksum. Matches
_mm_crc32_u32. - _mm_
crc32_ u64 - Accumulate eight bytes into a CRC-32C checksum. Matches
_mm_crc32_u64. - _mm_
cvtepi8_ epi16 - Sign-extend the low eight
i8toi16. Matches_mm_cvtepi8_epi16. - _mm_
cvtepi8_ epi32 - Sign-extend the low four
i8toi32. Matches_mm_cvtepi8_epi32. - _mm_
cvtepi16_ epi32 - Sign-extend the low four
i16toi32. Matches_mm_cvtepi16_epi32. - _mm_
cvtepi32_ epi64 - Sign-extend the low two
i32toi64. Matches_mm_cvtepi32_epi64. - _mm_
cvtepi32_ pd - Convert two
i32(low lanes) to twof64. Matches_mm_cvtepi32_pd. - _mm_
cvtepi32_ ps - Convert four
i32tof32. Matches_mm_cvtepi32_ps. - _mm_
cvtepu8_ epi16 - Zero-extend the low eight
u8tou16. Matches_mm_cvtepu8_epi16. - _mm_
cvtepu8_ epi32 - Zero-extend the low four
u8tou32. Matches_mm_cvtepu8_epi32. - _mm_
cvtepu16_ epi32 - Zero-extend the low four
u16tou32. Matches_mm_cvtepu16_epi32. - _mm_
cvtepu32_ epi64 - Zero-extend the low two
u32tou64. Matches_mm_cvtepu32_epi64. - _mm_
cvtpd_ epi32 - Convert two
f64to twoi32in the low lanes using the MXCSR rounding mode. - _mm_
cvtpd_ ps - Convert two
f64to twof32in the low lanes, zero the high two. Matches_mm_cvtpd_ps. - _mm_
cvtps_ epi32 - Convert four
f32toi32using the current MXCSR rounding mode. - _mm_
cvtps_ pd - Convert two
f32(low lanes) to twof64. Matches_mm_cvtps_pd. - _mm_
cvtsd_ f64 - Extract lane 0 as
f64. Matches_mm_cvtsd_f64. - _mm_
cvtsd_ si32 - Convert lane 0 of
atoi32using the MXCSR rounding mode. Matches_mm_cvtsd_si32. - _mm_
cvtsd_ ss - Convert lane 0 of
a(f64) tof32in lane 0, upper lanes fromb. Matches_mm_cvtsd_ss. - _mm_
cvtsi32_ sd - Set lane 0 to
bconverted tof64, high lane froma. Matches_mm_cvtsi32_sd. - _mm_
cvtsi32_ si128 - Set lane 0 to
w, zero the rest. Matches_mm_cvtsi32_si128. - _mm_
cvtsi64_ sd - Set lane 0 to
bconverted tof64, high lane froma. Matches_mm_cvtsi64_sd. - _mm_
cvtsi64_ si32 - Extract lane 0 as
i32. Matches_mm_cvtsi64_si32. - _mm_
cvtsi64_ si128 - Set lane 0 to
w, zero the high lane. Matches_mm_cvtsi64_si128. - _mm_
cvtsi128_ si32 - Extract the low
i32lane. Matches_mm_cvtsi128_si32. - _mm_
cvtsi128_ si64 - Extract the low
i64lane. Matches_mm_cvtsi128_si64. - _mm_
cvtss_ f32 - Extract lane 0 as
f32. Matches_mm_cvtss_f32. - _mm_
cvtss_ sd - Convert lane 0 of
b(f32) tof64in lane 0, high lane froma. Matches_mm_cvtss_sd. - _mm_
cvttpd_ epi32 - Convert two
f64to twoi32in the low lanes by truncation. - _mm_
cvttps_ epi32 - Convert four
f32toi32by truncation toward zero. - _mm_
cvttsd_ si32 - Convert lane 0 of
atoi32by truncation. Matches_mm_cvttsd_si32. - _mm_
div_ pd - Divide two
f64lanes,a / b. Matches_mm_div_pd. - _mm_
div_ ps - Divide packed
f32lanes,a / b. Matches_mm_div_ps. - _mm_
div_ sd - Divide the low lanes, copy the high lane from
a. Matches_mm_div_sd. - _mm_
div_ ss - Divide the low lanes and copy the upper three from
a. Matches_mm_div_ss. - _mm_
dp_ pd - Dot product of two
f64lanes with mask select. Matches_mm_dp_pd. - _mm_
dp_ ps - Dot product of four
f32lanes with mask select. Matches_mm_dp_ps. - _mm_
extract_ epi8 - Extract one
i8lane, zero-extended. Matches_mm_extract_epi8. - _mm_
extract_ epi16 - Extract one
i16lane, zero-extended. Matches_mm_extract_epi16. - _mm_
extract_ epi32 - Extract one
i32lane. Matches_mm_extract_epi32. - _mm_
extract_ epi64 - Extract one
i64lane. Matches_mm_extract_epi64. - _mm_
floor_ pd - Round two
f64lanes toward negative infinity. Matches_mm_floor_pd. - _mm_
floor_ ps - Round four
f32lanes toward negative infinity. Matches_mm_floor_ps. - _mm_
floor_ sd - Floor lane 0 of
b, high lane froma. Matches_mm_floor_sd. - _mm_
floor_ ss - Floor lane 0 of
b, upper lanes froma. Matches_mm_floor_ss. - _mm_
getcsr - Read the MXCSR register value. Reports rounding, FTZ, and DAZ modes.
- _mm_
hadd_ epi16 - Horizontally add adjacent
i16pairs fromathenb. Matches_mm_hadd_epi16. - _mm_
hadd_ epi32 - Horizontally add adjacent
i32pairs fromathenb. Matches_mm_hadd_epi32. - _mm_
hadd_ pd - Horizontally add the two
f64lanes ofathenb. Matches_mm_hadd_pd. - _mm_
hadd_ ps - Horizontally add adjacent
f32pairs fromathenb. Matches_mm_hadd_ps. - _mm_
hsub_ epi16 - Horizontally subtract adjacent
i16pairs. Matches_mm_hsub_epi16. - _mm_
hsub_ epi32 - Horizontally subtract adjacent
i32pairs. Matches_mm_hsub_epi32. - _mm_
hsub_ pd - Horizontally subtract the two
f64lanes ofathenb. Matches_mm_hsub_pd. - _mm_
hsub_ ps - Horizontally subtract adjacent
f32pairs. Matches_mm_hsub_ps. - _mm_
insert_ epi8 - Insert
iinto onei8lane. Matches_mm_insert_epi8. - _mm_
insert_ epi16 - Insert
iinto onei16lane. Matches_mm_insert_epi16. - _mm_
insert_ epi32 - Insert
iinto onei32lane. Matches_mm_insert_epi32. - _mm_
insert_ epi64 - Insert
iinto onei64lane. Matches_mm_insert_epi64. - _mm_
load1_ ⚠ps - Broadcast one
f32from memory to all lanes. Matches_mm_load1_ps. - _mm_
load_ ⚠pd - Load two
f64from a 16-byte aligned pointer. Matches_mm_load_pd. - _mm_
load_ ⚠ps - Load four
f32from a 16-byte aligned pointer. Matches_mm_load_ps. - _mm_
load_ ⚠ps1 - Alias of
_mm_load1_ps. Matches_mm_load_ps1. - _mm_
load_ ⚠si128 - Load a 128-bit integer vector from a 16-byte aligned pointer. Matches
_mm_load_si128. - _mm_
load_ ⚠ss - Load one
f32into lane 0, zero the rest. Matches_mm_load_ss. - _mm_
loadl_ ⚠epi64 - Load the low 64 bits, zero the high 64 bits. Matches
_mm_loadl_epi64. - _mm_
loadu_ ⚠pd - Load two
f64from an unaligned pointer. Matches_mm_loadu_pd. - _mm_
loadu_ ⚠ps - Load four
f32from an unaligned pointer. Matches_mm_loadu_ps. - _mm_
loadu_ ⚠si128 - Load a 128-bit integer vector from an unaligned pointer. Matches
_mm_loadu_si128. - _mm_
madd_ epi16 - Multiply pairs of
i16, add adjacent products toi32. Matches_mm_madd_epi16. - _mm_
maddubs_ epi16 - Multiply unsigned
aby signedbbytes, add adjacent pairs with signed saturation intoi16. Matches_mm_maddubs_epi16. - _mm_
max_ epi8 - Packed maximum of sixteen
i8lanes. Matches_mm_max_epi8. - _mm_
max_ epi16 - Packed maximum of eight
i16lanes. Matches_mm_max_epi16. - _mm_
max_ epi32 - Packed maximum of four
i32lanes. Matches_mm_max_epi32. - _mm_
max_ epu8 - Packed maximum of sixteen
u8lanes. Matches_mm_max_epu8. - _mm_
max_ epu16 - Packed maximum of eight
u16lanes. Matches_mm_max_epu16. - _mm_
max_ epu32 - Packed maximum of four
u32lanes. Matches_mm_max_epu32. - _mm_
max_ pd - Packed maximum of two
f64lanes. Uses NEON max: a NaN operand propagates, and-0.0is below+0.0. - _mm_
max_ pi16 - Packed maximum of four
i16lanes. Matches_mm_max_pi16. - _mm_
max_ ps - Packed maximum.
Uses NEON max: a NaN operand propagates, and
-0.0is below+0.0. - _mm_
max_ pu8 - Packed maximum of eight
u8lanes. Matches_mm_max_pu8. - _mm_
max_ ss - Scalar maximum on lane 0. Upper lanes come from
a. Uses NEON max on lane 0: a NaN operand propagates, and-0.0is below+0.0. - _mm_
min_ epi8 - Packed minimum of sixteen
i8lanes. Matches_mm_min_epi8. - _mm_
min_ epi16 - Packed minimum of eight
i16lanes. Matches_mm_min_epi16. - _mm_
min_ epi32 - Packed minimum of four
i32lanes. Matches_mm_min_epi32. - _mm_
min_ epu8 - Packed minimum of sixteen
u8lanes. Matches_mm_min_epu8. - _mm_
min_ epu16 - Packed minimum of eight
u16lanes. Matches_mm_min_epu16. - _mm_
min_ epu32 - Packed minimum of four
u32lanes. Matches_mm_min_epu32. - _mm_
min_ pd - Packed minimum of two
f64lanes. Uses NEON min: a NaN operand propagates, and-0.0is below+0.0. - _mm_
min_ pi16 - Packed minimum of four
i16lanes. Matches_mm_min_pi16. - _mm_
min_ ps - Packed minimum.
Uses NEON min: a NaN operand propagates, and
-0.0is below+0.0. - _mm_
min_ pu8 - Packed minimum of eight
u8lanes. Matches_mm_min_pu8. - _mm_
min_ ss - Scalar minimum on lane 0. Upper lanes come from
a. Uses NEON min on lane 0: a NaN operand propagates, and-0.0is below+0.0. - _mm_
minpos_ epu16 - Find the minimum
u16lane and its index. Matches_mm_minpos_epu16. - _mm_
move_ epi64 - Copy the low
i64lane, zero the high lane. Matches_mm_move_epi64. - _mm_
move_ sd - Copy the low lane from
b, the high lane froma. Matches_mm_move_sd. - _mm_
move_ ss - Copy lane 0 from
b, lanes 1-3 froma. Matches_mm_move_ss. - _mm_
movedup_ pd - Duplicate the low
f64lane to both lanes. Matches_mm_movedup_pd. - _mm_
movehdup_ ps - Duplicate the odd
f32lanes:a1, a1, a3, a3. Matches_mm_movehdup_ps. - _mm_
movehl_ ps - Move the two high lanes of
binto the two low lanes, high froma. Matches_mm_movehl_ps. - _mm_
moveldup_ ps - Duplicate the even
f32lanes:a0, a0, a2, a2. Matches_mm_moveldup_ps. - _mm_
movelh_ ps - Move the two low lanes of
binto the two high lanes, low froma. Matches_mm_movelh_ps. - _mm_
movemask_ epi8 - Gather the sign bit of each of the sixteen
i8lanes into 16 bits. Matches_mm_movemask_epi8. - _mm_
movemask_ pd - Gather the sign bit of each
f64lane into 2 bits. Matches_mm_movemask_pd. - _mm_
movemask_ pi8 - Gather the sign bit of each of the eight
i8lanes into 8 bits. Matches_mm_movemask_pi8. - _mm_
movemask_ ps - Gather the sign bit of each of the four lanes into the low 4 bits.
Matches
_mm_movemask_ps. - _mm_
movepi64_ pi64 - Take the low 64 bits of a
__m128ias a__m64. Matches_mm_movepi64_pi64. - _mm_
movpi64_ epi64 - Widen a
__m64into the low 64 bits of a__m128i, zeroing the high half. Matches_mm_movpi64_epi64. - _mm_
mul_ epi32 - Multiply the even
i32lanes toi64. Matches_mm_mul_epi32. - _mm_
mul_ epu32 - Multiply the low
u32of each 64-bit lane, produceu64. Matches_mm_mul_epu32. - _mm_
mul_ pd - Multiply two
f64lanes. Matches_mm_mul_pd. - _mm_
mul_ ps - Multiply packed
f32lanes. Matches_mm_mul_ps. - _mm_
mul_ sd - Multiply the low lanes, copy the high lane from
a. Matches_mm_mul_sd. - _mm_
mul_ ss - Multiply the low lanes and copy the upper three from
a. Matches_mm_mul_ss. - _mm_
mulhi_ epi16 - Multiply eight
i16lanes, keep the high 16 bits. Matches_mm_mulhi_epi16. - _mm_
mulhi_ epu16 - Multiply eight
u16lanes, keep the high 16 bits. Matches_mm_mulhi_epu16. - _mm_
mulhrs_ epi16 - Multiply eight
i16pairs, keep bits 16-30, round. Matches_mm_mulhrs_epi16. - _mm_
mullo_ epi16 - Multiply eight
i16lanes, keep the low 16 bits. Matches_mm_mullo_epi16. - _mm_
mullo_ epi32 - Multiply four
i32lanes, keep the low 32 bits. Matches_mm_mullo_epi32. - _mm_
or_ pd - Bitwise OR of two
f64vectors. Matches_mm_or_pd. - _mm_
or_ ps - Bitwise OR of two
f32vectors. Matches_mm_or_ps. - _mm_
or_ si128 - Bitwise OR of two integer vectors. Matches
_mm_or_si128. - _mm_
packs_ epi16 - Pack eight
i16from each input to sixteeni8with signed saturation. Matches_mm_packs_epi16. - _mm_
packs_ epi32 - Pack four
i32from each input to eighti16with signed saturation. Matches_mm_packs_epi32. - _mm_
packus_ epi16 - Pack eight
i16from each input to sixteenu8with unsigned saturation. Matches_mm_packus_epi16. - _mm_
packus_ epi32 - Pack four
i32from each input to eightu16with unsigned saturation. Matches_mm_packus_epi32. - _mm_
popcnt_ u32 - Count set bits in a 32-bit value. Matches
_mm_popcnt_u32. - _mm_
popcnt_ u64 - Count set bits in a 64-bit value. Matches
_mm_popcnt_u64. - _mm_
rcp_ ps - Approximate reciprocal of each lane. About 12 bits. Matches
_mm_rcp_ps. - _mm_
rcp_ ss - Approximate reciprocal of lane 0, upper lanes from
a. Matches_mm_rcp_ss. - _mm_
round_ pd - Round two
f64lanes per theROUNDINGmode. Matches_mm_round_pd. - _mm_
round_ ps - Round four
f32lanes per theROUNDINGmode. Matches_mm_round_ps. - _mm_
round_ sd - Round lane 0 per
ROUNDING, high lane froma. Matches_mm_round_sd. - _mm_
round_ ss - Round lane 0 per
ROUNDING, copy upper lanes froma. Matches_mm_round_ss. - _mm_
rsqrt_ ps - Approximate reciprocal square root of each lane. Matches
_mm_rsqrt_ps. - _mm_
rsqrt_ ss - Approximate reciprocal square root of lane 0, upper from
a. Matches_mm_rsqrt_ss. - _mm_
sad_ epu8 - Sum absolute differences of
u8lanes into twou16totals. Matches_mm_sad_epu8. - _mm_
sad_ pu8 - Sum absolute differences of eight
u8lanes into a singleu16total in lane 0. Matches_mm_sad_pu8. - _mm_
set1_ epi8 - Broadcast one
i8to all lanes. Matches_mm_set1_epi8. - _mm_
set1_ epi16 - Broadcast one
i16to all lanes. Matches_mm_set1_epi16. - _mm_
set1_ epi32 - Broadcast one
i32to all lanes. Matches_mm_set1_epi32. - _mm_
set1_ epi64x - Broadcast one
i64to both lanes. Matches_mm_set1_epi64x. - _mm_
set1_ pd - Broadcast one
f64to both lanes. Matches_mm_set1_pd. - _mm_
set1_ pi32 - Broadcast one
i32to both lanes. Matches_mm_set1_pi32. - _mm_
set1_ ps - Broadcast one
f32to all four lanes. Matches_mm_set1_ps. - _mm_
set_ epi8 - Set sixteen
i8lanes, most significant first. Lane 0 ise0. Matches_mm_set_epi8. - _mm_
set_ epi16 - Set eight
i16lanes, most significant first. Lane 0 ise0. Matches_mm_set_epi16. - _mm_
set_ epi32 - Set four
i32lanes, most significant first. Lane 0 ise0. Matches_mm_set_epi32. - _mm_
set_ epi64x - Set two
i64lanes, most significant first. Lane 0 ise0. Matches_mm_set_epi64x. - _mm_
set_ pd - Set two
f64lanes, most significant first. Lane 0 ise0. Matches_mm_set_pd. - _mm_
set_ pi8 - Set eight
i8lanes, most significant first. Lane 0 ise0. Matches_mm_set_pi8. - _mm_
set_ pi16 - Set four
i16lanes, most significant first. Lane 0 ise0. Matches_mm_set_pi16. - _mm_
set_ pi32 - Set two
i32lanes, most significant first. Lane 0 ise0. Matches_mm_set_pi32. - _mm_
set_ ps - Set four lanes, most significant first. Lane 0 is
x. Matches_mm_set_ps. - _mm_
set_ ps1 - Alias of
_mm_set1_ps. Matches_mm_set_ps1. - _mm_
set_ sd - Set lane 0 to
w, zero the high lane. Matches_mm_set_sd. - _mm_
set_ ss - Set lane 0 to
w, upper lanes to zero. Matches_mm_set_ss. - _mm_
setcsr - Write the MXCSR register. Applies the rounding, FTZ, and DAZ fields.
- _mm_
setr_ epi32 - Set four
i32lanes in order. Lane 0 ise3. Matches_mm_setr_epi32. - _mm_
setr_ pd - Set two
f64lanes in order. Lane 0 ise1. Matches_mm_setr_pd. - _mm_
setr_ ps - Set four lanes in order. Lane 0 is
w. Matches_mm_setr_ps. - _mm_
setzero_ pd - Return a zeroed
f64vector. Matches_mm_setzero_pd. - _mm_
setzero_ ps - Return a zeroed vector. Matches
_mm_setzero_ps. - _mm_
setzero_ si64 - Return a zeroed
__m64. Matches_mm_setzero_si64. - _mm_
setzero_ si128 - Return a zeroed integer vector. Matches
_mm_setzero_si128. - _mm_
shuffle_ epi8 - Shuffle bytes of
aby the indices inb. Matches_mm_shuffle_epi8. - _mm_
shuffle_ epi32 - Shuffle four
i32lanes byIMM. Matches_mm_shuffle_epi32. - _mm_
shuffle_ ps - Shuffle four
f32lanes.IMMpicks lanes 0-1 froma, 2-3 fromb. - _mm_
shufflehi_ epi16 - Shuffle the high four
i16lanes byIMM, keep the low four. Matches_mm_shufflehi_epi16.IMMis a compile-time constant in0..256. - _mm_
shufflelo_ epi16 - Shuffle the low four
i16lanes byIMM, keep the high four. Matches_mm_shufflelo_epi16.IMMis a compile-time constant in0..256. - _mm_
sign_ epi8 - Sign sixteen
i8lanes ofaby the sign ofb. Matches_mm_sign_epi8. - _mm_
sign_ epi16 - Sign eight
i16lanes ofaby the sign ofb. Matches_mm_sign_epi16. - _mm_
sign_ epi32 - Sign four
i32lanes ofaby the sign ofb. Matches_mm_sign_epi32. - _mm_
slli_ epi16 - Shift eight
i16lanes left byIMM. Count >= 16 yields zero. Matches_mm_slli_epi16. - _mm_
slli_ epi32 - Shift four
i32lanes left byIMM. Count >= 32 yields zero. Matches_mm_slli_epi32. - _mm_
slli_ epi64 - Shift two
i64lanes left byIMM. Count >= 64 yields zero. Matches_mm_slli_epi64. - _mm_
slli_ si128 - Shift the whole vector left by
IMMbytes. Matches_mm_slli_si128. - _mm_
sqrt_ pd - Square root of two
f64lanes. Matches_mm_sqrt_pd. - _mm_
sqrt_ ps - Square root of each lane. Matches
_mm_sqrt_ps. - _mm_
sqrt_ ss - Square root of lane 0, upper lanes from
a. Matches_mm_sqrt_ss. - _mm_
srai_ epi16 - Arithmetic shift eight
i16lanes right byIMM. Count >= 16 fills sign. Matches_mm_srai_epi16. - _mm_
srai_ epi32 - Arithmetic shift four
i32lanes right byIMM. Count >= 32 fills sign. Matches_mm_srai_epi32. - _mm_
srli_ epi16 - Logical shift eight
u16lanes right byIMM. Matches_mm_srli_epi16. - _mm_
srli_ epi32 - Logical shift four
u32lanes right byIMM. Matches_mm_srli_epi32. - _mm_
srli_ epi64 - Logical shift two
u64lanes right byIMM. Matches_mm_srli_epi64. - _mm_
srli_ si128 - Shift the whole vector right by
IMMbytes. Matches_mm_srli_si128. - _mm_
store_ ⚠pd - Store two
f64to a 16-byte aligned pointer. Matches_mm_store_pd. - _mm_
store_ ⚠ps - Store four
f32to a 16-byte aligned pointer. Matches_mm_store_ps. - _mm_
store_ ⚠si128 - Store a 128-bit integer vector to a 16-byte aligned pointer. Matches
_mm_store_si128. - _mm_
store_ ⚠ss - Store lane 0 to memory. Matches
_mm_store_ss. - _mm_
storel_ ⚠epi64 - Store the low 64 bits to memory. Matches
_mm_storel_epi64. - _mm_
storeu_ ⚠pd - Store two
f64to an unaligned pointer. Matches_mm_storeu_pd. - _mm_
storeu_ ⚠ps - Store four
f32to an unaligned pointer. Matches_mm_storeu_ps. - _mm_
storeu_ ⚠si128 - Store a 128-bit integer vector to an unaligned pointer. Matches
_mm_storeu_si128. - _mm_
sub_ epi8 - Subtract sixteen
i8lanes with wraparound. Matches_mm_sub_epi8. - _mm_
sub_ epi16 - Subtract eight
i16lanes with wraparound. Matches_mm_sub_epi16. - _mm_
sub_ epi32 - Subtract four
i32lanes with wraparound. Matches_mm_sub_epi32. - _mm_
sub_ epi64 - Subtract two
i64lanes with wraparound. Matches_mm_sub_epi64. - _mm_
sub_ pd - Subtract two
f64lanes,a - b. Matches_mm_sub_pd. - _mm_
sub_ pi16 - Subtract four
i16lanes with wraparound. Matches_mm_sub_pi16. - _mm_
sub_ ps - Subtract packed
f32lanes,a - b. Matches_mm_sub_ps. - _mm_
sub_ sd - Subtract the low lanes, copy the high lane from
a. Matches_mm_sub_sd. - _mm_
sub_ ss - Subtract the low lanes and copy the upper three from
a. Matches_mm_sub_ss. - _mm_
subs_ epi8 - Subtract sixteen
i8lanes with signed saturation. Matches_mm_subs_epi8. - _mm_
subs_ epi16 - Subtract eight
i16lanes with signed saturation. Matches_mm_subs_epi16. - _mm_
subs_ epu8 - Subtract sixteen
u8lanes with unsigned saturation. Matches_mm_subs_epu8. - _mm_
subs_ epu16 - Subtract eight
u16lanes with unsigned saturation. Matches_mm_subs_epu16. - _mm_
test_ all_ ones - True if all bits are one. Matches
_mm_test_all_ones. - _mm_
test_ all_ zeros - True if
(a & mask) == 0. Matches_mm_test_all_zeros. - _mm_
test_ mix_ ones_ zeros - True if
a & maskhas both set and clear bits. Matches_mm_test_mix_ones_zeros. - _mm_
testc_ si128 - True if
((!a) & b) == 0. Matches_mm_testc_si128. - _mm_
testnzc_ si128 - True if both
a & band(!a) & bare nonzero. Matches_mm_testnzc_si128. - _mm_
testz_ si128 - True if
(a & b) == 0. Matches_mm_testz_si128. - _mm_
ucomieq_ ss - Alias of
_mm_comieq_ss. Matches_mm_ucomieq_ss. - _mm_
ucomige_ ss - Alias of
_mm_comige_ss. Matches_mm_ucomige_ss. - _mm_
ucomigt_ ss - Alias of
_mm_comigt_ss. Matches_mm_ucomigt_ss. - _mm_
ucomile_ ss - Alias of
_mm_comile_ss. Matches_mm_ucomile_ss. - _mm_
ucomilt_ ss - Alias of
_mm_comilt_ss. Matches_mm_ucomilt_ss. - _mm_
ucomineq_ ss - Alias of
_mm_comineq_ss. Matches_mm_ucomineq_ss. - _mm_
unpackhi_ epi8 - Interleave the high eight
i8lanes. Matches_mm_unpackhi_epi8. - _mm_
unpackhi_ epi16 - Interleave the high four
i16lanes. Matches_mm_unpackhi_epi16. - _mm_
unpackhi_ epi32 - Interleave the high two
i32lanes. Matches_mm_unpackhi_epi32. - _mm_
unpackhi_ epi64 - Interleave the high
i64lane. Matches_mm_unpackhi_epi64. - _mm_
unpackhi_ pd - Interleave the high
f64lanes. Matches_mm_unpackhi_pd. - _mm_
unpackhi_ ps - Interleave the high two lanes of
aandb. Matches_mm_unpackhi_ps. - _mm_
unpacklo_ epi8 - Interleave the low eight
i8lanes. Matches_mm_unpacklo_epi8. - _mm_
unpacklo_ epi16 - Interleave the low four
i16lanes. Matches_mm_unpacklo_epi16. - _mm_
unpacklo_ epi32 - Interleave the low two
i32lanes. Matches_mm_unpacklo_epi32. - _mm_
unpacklo_ epi64 - Interleave the low
i64lane. Matches_mm_unpacklo_epi64. - _mm_
unpacklo_ pd - Interleave the low
f64lanes. Matches_mm_unpacklo_pd. - _mm_
unpacklo_ ps - Interleave the low two lanes of
aandb. Matches_mm_unpacklo_ps. - _mm_
xor_ pd - Bitwise XOR of two
f64vectors. Matches_mm_xor_pd. - _mm_
xor_ ps - Bitwise XOR of two
f32vectors. Matches_mm_xor_ps. - _mm_
xor_ si128 - Bitwise XOR of two integer vectors. Matches
_mm_xor_si128.