Burst Arm Neon intrinsics reference
This page contains an ordered reference for the APIs in Unity.
Intrinsics type creation and conversion
Arithmetic
Operation | Description | APIs |
---|---|---|
vadd | Add | |
vaddv | Add across vector | |
vaddl | Add long | |
vaddlv | Add long across Vector | Click here to expand the API listvaddlv_s16vaddlv_s32 vaddlv_s8 vaddlv_u16 vaddlv_u32 vaddlv_u8 vaddlvq_s16 vaddlvq_s32 vaddlvq_s8 vaddlvq_u16 vaddlvq_u32 vaddlvq_u8 |
vaddw | Add wide | |
vhadd | Halving add | Click here to expand the API listvhadd_s16vhadd_s32 vhadd_s8 vhadd_u16 vhadd_u32 vhadd_u8 vhaddq_s16 vhaddq_s32 vhaddq_s8 vhaddq_u16 vhaddq_u32 vhaddq_u8 |
vrhadd | Rounding halving add | Click here to expand the API listvrhadd_s16vrhadd_s32 vrhadd_s8 vrhadd_u16 vrhadd_u32 vrhadd_u8 vrhaddq_s16 vrhaddq_s32 vrhaddq_s8 vrhaddq_u16 vrhaddq_u32 vrhaddq_u8 |
vqadd | Saturating add | |
vsqadd | Unsigned saturating Accumulate of signed value | Click here to expand the API listvsqadd_u16vsqadd_u32 vsqadd_u64 vsqadd_u8 vsqaddq_u16 vsqaddq_u32 vsqaddq_u64 vsqaddq_u8 vsqaddb_u8 vsqaddh_u16 vsqadds_u32 vsqaddd_u64 |
vuqadd | Signed saturating Accumulate of unsigned value | Click here to expand the API listvuqadd_s16vuqadd_s32 vuqadd_s64 vuqadd_s8 vuqaddq_s16 vuqaddq_s32 vuqaddq_s64 vuqaddq_s8 vuqaddb_s8 vuqaddh_s16 vuqadds_s32 vuqaddd_s64 |
vaddhn | Add returning high narrow | |
vraddhn | Rounding add returning high narrow | |
vpadd | Add pairwise (vector) | |
vpaddl | Signed add long pairwise | Click here to expand the API listvpaddl_s16vpaddl_s32 vpaddl_s8 vpaddl_u16 vpaddl_u32 vpaddl_u8 vpaddlq_s16 vpaddlq_s32 vpaddlq_s8 vpaddlq_u16 vpaddlq_u32 vpaddlq_u8 |
vpadal | Signed add and accumulate long pairwise | Click here to expand the API listvpadal_s16vpadal_s32 vpadal_s8 vpadal_u16 vpadal_u32 vpadal_u8 vpadalq_s16 vpadalq_s32 vpadalq_s8 vpadalq_u16 vpadalq_u32 vpadalq_u8 |
vsub | Subtract | |
vsubl | Subtract long | |
vsubw | Subtract wide | |
vhsub | Halving subtract | Click here to expand the API listvhsub_s16vhsub_s32 vhsub_s8 vhsub_u16 vhsub_u32 vhsub_u8 vhsubq_s16 vhsubq_s32 vhsubq_s8 vhsubq_u16 vhsubq_u32 vhsubq_u8 |
vqsub | Saturating subtract | |
vsubhn | Subtract returning high narrow | |
vrsubhn | Rounding subtract returning high narrow |
Multiply
Operation | Description | APIs |
---|---|---|
vmul | Multiply (vector) | |
vmul_n | Vector multiply by scalar | Click here to expand the API listvmul_n_f32vmul_n_f64 vmul_n_s16 vmul_n_s32 vmul_n_u16 vmul_n_u32 vmulq_n_f32 vmulq_n_f64 vmulq_n_s16 vmulq_n_s32 vmulq_n_u16 vmulq_n_u32 |
vmul_lane | Multiply (vector) | Click here to expand the API listvmul_lane_f32vmul_lane_f64 vmul_lane_s16 vmul_lane_s32 vmul_lane_u16 vmul_lane_u32 vmul_laneq_f32 vmul_laneq_f64 vmul_laneq_s16 vmul_laneq_s32 vmul_laneq_u16 vmul_laneq_u32 vmulq_lane_f32 vmulq_lane_f64 vmulq_lane_s16 vmulq_lane_s32 vmulq_lane_u16 vmulq_lane_u32 vmulq_laneq_f32 vmulq_laneq_f64 vmulq_laneq_s16 vmulq_laneq_s32 vmulq_laneq_u16 vmulq_laneq_u32 vmuls_lane_f32 vmuls_laneq_f32 vmuld_lane_f64 vmuld_laneq_f64 |
vmull | Multiply long (vector) | |
vmull_n | Vector long multiply by scalar | Click here to expand the API listvmull_n_s16vmull_n_s32 vmull_n_u16 vmull_n_u32 vmull_high_n_s16 vmull_high_n_s32 vmull_high_n_u16 vmull_high_n_u32 |
vmull_lane | Multiply long (vector) | Click here to expand the API listvmull_lane_s16vmull_lane_s32 vmull_lane_u16 vmull_lane_u32 vmull_laneq_s16 vmull_laneq_s32 vmull_laneq_u16 vmull_laneq_u32 vmull_high_lane_s16 vmull_high_lane_s32 vmull_high_lane_u16 vmull_high_lane_u32 vmull_high_laneq_s16 vmull_high_laneq_s32 vmull_high_laneq_u16 vmull_high_laneq_u32 |
vmulx | Floating-point multiply extended | |
vmla | Multiply-add to accumulator (vector) | |
vmla_lane | Vector multiply accumulate with scalar | Click here to expand the API listvmla_lane_f32vmla_lane_s16 vmla_lane_s32 vmla_lane_u16 vmla_lane_u32 vmla_laneq_f32 vmla_laneq_s16 vmla_laneq_s32 vmla_laneq_u16 vmla_laneq_u32 vmlaq_lane_f32 vmlaq_lane_s16 vmlaq_lane_s32 vmlaq_lane_u16 vmlaq_lane_u32 vmlaq_laneq_f32 vmlaq_laneq_s16 vmlaq_laneq_s32 vmlaq_laneq_u16 vmlaq_laneq_u32 |
vmla_n | Vector multiply accumulate with scalar | Click here to expand the API listvmla_n_f32vmla_n_s16 vmla_n_s32 vmla_n_u16 vmla_n_u32 vmlaq_n_f32 vmlaq_n_s16 vmlaq_n_s32 vmlaq_n_u16 vmlaq_n_u32 |
vmlal | Multiply-accumulate long (vector) | |
vmlal_lane | Multiply-accumulate long with scalar | Click here to expand the API listvmlal_lane_s16vmlal_lane_s32 vmlal_lane_u16 vmlal_lane_u32 vmlal_laneq_s16 vmlal_laneq_s32 vmlal_laneq_u16 vmlal_laneq_u32 vmlal_high_lane_s16 vmlal_high_lane_s32 vmlal_high_lane_u16 vmlal_high_lane_u32 vmlal_high_laneq_s16 vmlal_high_laneq_s32 vmlal_high_laneq_u16 vmlal_high_laneq_u32 |
vmlal_n | Multiply-accumulate long with scalar | Click here to expand the API listvmlal_n_s16vmlal_n_s32 vmlal_n_u16 vmlal_n_u32 vmlal_high_n_s16 vmlal_high_n_s32 vmlal_high_n_u16 vmlal_high_n_u32 |
vmls | Multiply-subtract from accumulator (vector) | |
vmls_lane | Vector multiply subtract with scalar | Click here to expand the API listvmls_lane_f32vmls_lane_s16 vmls_lane_s32 vmls_lane_u16 vmls_lane_u32 vmls_laneq_f32 vmls_laneq_s16 vmls_laneq_s32 vmls_laneq_u16 vmls_laneq_u32 vmlsq_lane_f32 vmlsq_lane_s16 vmlsq_lane_s32 vmlsq_lane_u16 vmlsq_lane_u32 vmlsq_laneq_f32 vmlsq_laneq_s16 vmlsq_laneq_s32 vmlsq_laneq_u16 vmlsq_laneq_u32 |
vmls_n | Vector multiply subtract with scalar | Click here to expand the API listvmls_n_f32vmls_n_s16 vmls_n_s32 vmls_n_u16 vmls_n_u32 vmlsq_n_f32 vmlsq_n_s16 vmlsq_n_s32 vmlsq_n_u16 vmlsq_n_u32 |
vmlsl | Multiply-subtract long (vector) | |
vmlsl_lane | Vector multiply-subtract long with scalar | Click here to expand the API listvmlsl_lane_s16vmlsl_lane_s32 vmlsl_lane_u16 vmlsl_lane_u32 vmlsl_laneq_s16 vmlsl_laneq_s32 vmlsl_laneq_u16 vmlsl_laneq_u32 vmlsl_high_lane_s16 vmlsl_high_lane_s32 vmlsl_high_lane_u16 vmlsl_high_lane_u32 vmlsl_high_laneq_s16 vmlsl_high_laneq_s32 vmlsl_high_laneq_u16 vmlsl_high_laneq_u32 |
vmlsl_n | Vector multiply-subtract long with scalar | Click here to expand the API listvmlsl_n_s16vmlsl_n_s32 vmlsl_n_u16 vmlsl_n_u32 vmlsl_high_n_s16 vmlsl_high_n_s32 vmlsl_high_n_u16 vmlsl_high_n_u32 |
vqdmull | Signed saturating doubling multiply long | Click here to expand the API listvqdmull_s16vqdmull_s32 vqdmullh_s16 vqdmulls_s32 vqdmull_high_s16 vqdmull_high_s32 |
vqdmull_lane | Vector saturating doubling multiply long with scalar | |
vqdmull_n | Vector saturating doubling multiply long with scalar | |
vqdmulh | Saturating doubling multiply returning high half | Click here to expand the API listvqdmulh_s16vqdmulh_s32 vqdmulhq_s16 vqdmulhq_s32 vqdmulhh_s16 vqdmulhs_s32 |
vqdmulh_lane | Vector saturating doubling multiply high by scalar | |
vqdmulh_n | Vector saturating doubling multiply high by scalar | |
vqrdmulh | Saturating rounding doubling multiply returning high half | Click here to expand the API listvqrdmulh_s16vqrdmulh_s32 vqrdmulhq_s16 vqrdmulhq_s32 vqrdmulhh_s16 vqrdmulhs_s32 |
vqrdmulh_lane | Vector saturating rounding doubling multiply high with scalar | |
vqrdmulh_n | Vector saturating rounding doubling multiply high with scalar | |
vqdmlal | Saturating doubling multiply-add long | Click here to expand the API listvqdmlal_s16vqdmlal_s32 vqdmlalh_s16 vqdmlals_s32 vqdmlal_high_s16 vqdmlal_high_s32 |
vqdmlal_lane | Vector saturating doubling multiply-accumulate long with scalar |
|
vqdmlal_n | Vector saturating doubling multiply-accumulate long with scalar |
|
vqdmlsl | Signed saturating doubling multiply-subtract long | Click here to expand the API listvqdmlsl_s16vqdmlsl_s32 vqdmlslh_s16 vqdmlsls_s32 vqdmlsl_high_s16 vqdmlsl_high_s32 |
vqdmlsl_lane | Vector saturating doubling multiply-subtract long with scalar |
|
vqdmlsl_n | Vector saturating doubling multiply-subtract long with scalar |
|
vqrdmlah | Saturating rounding doubling multiply accumulate returning high half (vector) |
Click here to expand the API listvqrdmlah_s16vqrdmlah_s32 vqrdmlahq_s16 vqrdmlahq_s32 vqrdmlahh_s16 vqrdmlahs_s32 |
vqrdmlah_lane | Saturating rounding doubling multiply accumulate returning high half (vector) |
|
vqrdmlsh | Saturating rounding doubling multiply subtract returning high half (vector) |
Click here to expand the API listvqrdmlsh_s16vqrdmlsh_s32 vqrdmlshq_s16 vqrdmlshq_s32 vqrdmlshh_s16 vqrdmlshs_s32 |
vqrdmlsh_lane | Saturating rounding doubling multiply subtract returning high half (vector) |
|
vfma | Floating-point fused multiply-add to accumulator (vector) | |
vfma_n | Floating-point fused multiply-add to accumulator (vector) | |
vfma_lane | Floating-point fused multiply-add to accumulator (vector) | |
vfms | Floating-point fused multiply-subtract from accumulator (vector) |
|
vfms_n | Floating-point fused multiply-subtract from accumulator (vector) |
|
vfms_lane | Floating-point fused multiply-subtract from accumulator (vector) |
|
vdiv | Floating-point divide (vector) |
Data processing
Operation | Description | APIs |
---|---|---|
vpmax | Maximum pairwise | |
vpmaxnm | Floating-point maximum number pairwise (vector) | |
vpmin | Minimum pairwise | |
vpminnm | Floating-point minimum number pairwise (vector) | |
vabd | Absolute difference | |
vabdl | Absolute difference long | |
vaba | Absolute difference and accumulate | |
vabal | Absolute difference and accumulate long | |
vmax | Maximum | |
vmaxnm | Floating-point maximum number | Click here to expand the API listvmaxnm_f32vmaxnm_f64 vmaxnmq_f32 vmaxnmq_f64 vmaxnmv_f32 vmaxnmvq_f32 vmaxnmvq_f64 |
vmaxv | Maximum across vector | |
vmin | Minimum | |
vminnm | Floating-point minimum number | Click here to expand the API listvminnm_f32vminnm_f64 vminnmq_f32 vminnmq_f64 vminnmv_f32 vminnmvq_f32 vminnmvq_f64 |
vminv | Minimum across vector | |
vabs | Absolute value | |
vqabs | Saturating absolute value | Click here to expand the API listvqabs_s16vqabs_s32 vqabs_s64 vqabs_s8 vqabsq_s16 vqabsq_s32 vqabsq_s64 vqabsq_s8 vqabsb_s8 vqabsh_s16 vqabss_s32 vqabsd_s64 |
vneg | Negate | |
vqneg | Saturating negate | Click here to expand the API listvqneg_s16vqneg_s32 vqneg_s64 vqneg_s8 vqnegq_s16 vqnegq_s32 vqnegq_s64 vqnegq_s8 vqnegb_s8 vqnegh_s16 vqnegs_s32 vqnegd_s64 |
vcls | Count leading sign bits | |
vclz | Count leading zero bits | |
vcnt | Population count per byte | |
vrecpe | Reciprocal estimate | Click here to expand the API listvrecpe_f32vrecpe_f64 vrecpe_u32 vrecpeq_f32 vrecpeq_f64 vrecpeq_u32 vrecpes_f32 vrecped_f64 |
vrecps | Reciprocal step | Click here to expand the API listvrecps_f32vrecps_f64 vrecpsq_f32 vrecpsq_f64 vrecpss_f32 vrecpsd_f64 |
vrecpx | Floating-point reciprocal exponent | |
vrsqrte | Reciprocal square root estimate | Click here to expand the API listvrsqrte_f32vrsqrte_f64 vrsqrte_u32 vrsqrteq_f32 vrsqrteq_f64 vrsqrteq_u32 vrsqrtes_f32 vrsqrted_f64 |
vrsqrts | Reciprocal square root step | Click here to expand the API listvrsqrts_f32vrsqrts_f64 vrsqrtsq_f32 vrsqrtsq_f64 vrsqrtss_f32 vrsqrtsd_f64 |
vmovn | Extract narrow | |
vmovl | Extract long | |
vqmovn | Saturating extract narrow | |
vqmovun | Signed saturating extract unsigned narrow | Click here to expand the API listvqmovun_s16vqmovun_s32 vqmovun_s64 vqmovun_high_s16 vqmovun_high_s32 vqmovun_high_s64 vqmovunh_s16 vqmovuns_s32 vqmovund_s64 |
Comparison
Operation | Description | APIs |
---|---|---|
vceq | Compare bitwise equal | |
vceqz | Compare bitwise equal to zero | |
vcge | Compare greater than or equal | |
vcgez | Compare greater than or equal to zero | |
vcle | Compare less than or equal | |
vclez | Compare less than or equal to zero | |
vcgt | Compare greater than | |
vcgtz | Compare greater than zero | |
vclt | Compare less than | |
vcltz | Compare less than zero | |
vcage | Floating-point absolute compare greater than or equal | |
vcagt | Floating-point absolute compare greater than | |
vcale | Floating-point absolute compare less than or equal | |
vcalt | Floating-point absolute compare less than |
Bitwise
Operation | Description | APIs |
---|---|---|
vtst | Test bits nonzero | |
vmvn | Bitwise NOT | |
vand | Bitwise AND | |
vorr | Bitwise OR | |
vorn | Bitwise OR NOT | |
veor | Bitwise exclusive OR | |
vbic | Bitwise bit clear | |
vbsl | Bitwise select |
Shift
Operation | Description | APIs |
---|---|---|
vshl | Shift left (register) | |
vqshl | Saturating shift left (register) | |
vqshl_n | Saturating shift left (immediate) | Click here to expand the API listvqshl_n_s16vqshl_n_s32 vqshl_n_s64 vqshl_n_s8 vqshl_n_u16 vqshl_n_u32 vqshl_n_u64 vqshl_n_u8 vqshlq_n_s16 vqshlq_n_s32 vqshlq_n_s64 vqshlq_n_s8 vqshlq_n_u16 vqshlq_n_u32 vqshlq_n_u64 vqshlq_n_u8 vqshlb_n_s8 vqshlb_n_u8 vqshlh_n_s16 vqshlh_n_u16 vqshls_n_s32 vqshls_n_u32 vqshld_n_s64 vqshld_n_u64 |
vqshlu_n | Saturating shift left unsigned (immediate) | |
vrshl | Rounding shift left (register) | |
vqrshl | Saturating rounding shift left (register) | |
vshl_n | Shift left (immediate) | |
vshll_n | Shift left long (immediate) | |
vshr_n | Shift right (immediate) | |
vrshr_n | Rounding right left (register) | |
vshrn_n | Shift right narrow (immediate) | |
vqshrun_n | Signed saturating shift right unsigned narrow (immediate) |
Click here to expand the API listvqshrun_n_s16vqshrun_n_s32 vqshrun_n_s64 vqshrunh_n_s16 vqshruns_n_s32 vqshrund_n_s64 vqshrun_high_n_s16 vqshrun_high_n_s32 vqshrun_high_n_s64 |
vqrshrun_n | Signed saturating rounded shift right unsigned narrow (immediate) |
Click here to expand the API listvqrshrun_n_s16vqrshrun_n_s32 vqrshrun_n_s64 vqrshrunh_n_s16 vqrshruns_n_s32 vqrshrund_n_s64 vqrshrun_high_n_s16 vqrshrun_high_n_s32 vqrshrun_high_n_s64 |
vqshrn_n | Signed saturating shift right narrow (immediate) | |
vrshrn_n | Rounding shift right narrow (immediate) | |
vqrshrn_n | Signed saturating rounded shift right narrow (immediate) | Click here to expand the API listvqrshrn_n_s16vqrshrn_n_s32 vqrshrn_n_s64 vqrshrn_n_u16 vqrshrn_n_u32 vqrshrn_n_u64 vqrshrnh_n_s16 vqrshrnh_n_u16 vqrshrns_n_s32 vqrshrns_n_u32 vqrshrnd_n_s64 vqrshrnd_n_u64 vqrshrn_high_n_s16 vqrshrn_high_n_s32 vqrshrn_high_n_s64 vqrshrn_high_n_u16 vqrshrn_high_n_u32 vqrshrn_high_n_u64 |
vsra_n | Signed shift right and accumulate (immediate) | |
vrsra_n | Signed rounding shift right and accumulate (immediate) | |
vsri_n | Shift right and insert (immediate) | |
vsli_n | Shift left and insert (immediate) |
Floating-point
Operation | Description | APIs |
---|---|---|
vcvt | Convert to/from another precision or fixed point, rounding towards zero |
Click here to expand the API listvcvt_f32_f64vcvt_f32_s32 vcvt_f32_u32 vcvt_f64_f32 vcvt_f64_s64 vcvt_f64_u64 vcvt_s32_f32 vcvt_s64_f64 vcvt_u32_f32 vcvt_u64_f64 vcvtq_f32_s32 vcvtq_f32_u32 vcvtq_f64_s64 vcvtq_f64_u64 vcvtq_s32_f32 vcvtq_s64_f64 vcvtq_u32_f32 vcvtq_u64_f64 vcvts_f32_s32 vcvts_f32_u32 vcvts_s32_f32 vcvts_u32_f32 vcvtd_f64_s64 vcvtd_f64_u64 vcvtd_s64_f64 vcvtd_u64_f64 vcvt_high_f32_f64 vcvt_high_f64_f32 |
vcvta | Convert to integer, rounding to nearest with ties to away | |
vcvtm | Convert to integer, rounding towards minus infinity | |
vcvtn | Convert to integer, rounding to nearest with ties to even | |
vcvtp | Convert to integer, rounding towards plus infinity | |
vcvtx | Convert to lower precision, rounding to nearest with ties to odd |
|
vcvt_n | Convert to/from fixed point, rounding towards zero | Click here to expand the API listvcvt_n_f32_s32vcvt_n_f32_u32 vcvt_n_f64_s64 vcvt_n_f64_u64 vcvt_n_s32_f32 vcvt_n_s64_f64 vcvt_n_u32_f32 vcvt_n_u64_f64 vcvtq_n_f32_s32 vcvtq_n_f32_u32 vcvtq_n_f64_s64 vcvtq_n_f64_u64 vcvtq_n_s32_f32 vcvtq_n_s64_f64 vcvtq_n_u32_f32 vcvtq_n_u64_f64 vcvts_n_f32_s32 vcvts_n_f32_u32 vcvts_n_s32_f32 vcvts_n_u32_f32 vcvtd_n_f64_s64 vcvtd_n_f64_u64 vcvtd_n_s64_f64 vcvtd_n_u64_f64 |
vrnd | Round to Integral, toward zero | |
vrnda | Round to Integral, with ties to away | |
vrndi | Round to Integral, using current rounding mode | |
vrndm | Round to Integral, towards minus infinity | |
vrndn | Round to Integral, with ties to even | |
vrndp | Round to Integral, towards plus infinity | |
vrndx | Round to Integral exact |
Load and store
Operation | Description | APIs |
---|---|---|
vld1 | Load vector from memory | |
vst1 | Store vector to memory | |
vget_lane | Get vector element | |
vset_lane | Set vector element |
Permutation
Operation | Description | APIs |
---|---|---|
vext | Extract vector from pair of vectors | |
vtbl1 | Table vector Lookup | |
vtbx1 | Table vector lookup extension | |
vqtbl1 | Table vector Lookup | |
vqtbx1 | Table vector lookup extension | |
vrbit | Reverse bit order | |
vrev16 | Reverse elements in 16-bit halfwords | |
vrev32 | Reverse elements in 32-bit words | Click here to expand the API listvrev32_s16vrev32_s8 vrev32_u16 vrev32_u8 vrev32q_s16 vrev32q_s8 vrev32q_u16 vrev32q_u8 |
vrev64 | Reverse elements in 64-bit doublewords | |
vtrn1 | Transpose vectors (primary) | |
vtrn2 | Transpose vectors (secondary) | |
vzip1 | Zip vectors (primary) | |
vzip2 | Zip vectors (secondary) | |
vuzp1 | Unzip vectors (primary) | |
vuzp2 | Unzip vectors (secondary) |
Cryptographic
Operation | APIs |
---|---|
CRC32 | |
SHA1 | Click here to expand the API listvsha1cq_u32vsha1h_u32 vsha1mq_u32 vsha1pq_u32 vsha1su0q_u32 vsha1su1q_u32 |
SHA256 | |
AES |
Miscellaneous
Operation | Description | APIs |
---|---|---|
vsqrt | Square root | |
vdot | Dot product | |
vdot_lane | Dot product | Click here to expand the API listvdot_lane_s32vdot_lane_u32 vdot_laneq_s32 vdot_laneq_u32 vdotq_lane_s32 vdotq_lane_u32 vdotq_laneq_s32 vdotq_laneq_u32 |