Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Burst Arm Neon intrinsics reference

Read time 6 minutesLast updated 4 days ago

The following tables list the major Arm Neon intrinsic operations available in Burst. The Operation column contains the primary naming prefix for intrinsics of this type. For the full list of intrinsics available for each operation, refer to the
Unity.Burst.Intrinsics.Arm.Neon
API reference.
For information on how to use these intrinsics, refer to Processor specific SIMD extensions.

Intrinsics type creation and conversion

Operation

Description

vcreateCreate vector
vdup_nDuplicate (splat) value
vdup_laneDuplicate (splat) vector element
vmov_nDuplicate (splat) value
vcopy_laneInsert vector element from another vector element
vcombineJoin two vectors into a larger vector
vget_highGet the higher half of the vector
vget_lowGet the lower half of the vector

Arithmetic

Operation

Description

vaddAdd
vaddvAdd across vector
vaddlAdd long
vaddlvAdd long across Vector
vaddwAdd wide
vhaddHalving add
vrhaddRounding halving add
vqaddSaturating add
vsqaddUnsigned saturating Accumulate of signed value
vuqaddSigned saturating Accumulate of unsigned value
vaddhnAdd returning high narrow
vraddhnRounding add returning high narrow
vpaddAdd pairwise (vector)
vpaddlSigned add long pairwise
vpadalSigned add and accumulate long pairwise
vsublSubtract long
vsubwSubtract wide
vhsubHalving subtract
vqsubSaturating subtract
vsubhnSubtract returning high narrow
vrsubhnRounding subtract returning high narrow

Multiply

Operation

Description

vmulMultiply (vector)
vmul_nVector multiply by scalar
vmul_laneMultiply (vector)
vmullMultiply long (vector)
vmull_nVector long multiply by scalar
vmull_laneMultiply long (vector)
vmulxFloating-point multiply extended
vmlaMultiply-add to accumulator (vector)
vmla_laneVector multiply accumulate with scalar
vmla_nVector multiply accumulate with scalar
vmlalMultiply-accumulate long (vector)
vmlal_laneMultiply-accumulate long with scalar
vmlal_nMultiply-accumulate long with scalar
vmlsMultiply-subtract from accumulator (vector)
vmls_laneVector multiply subtract with scalar
vmls_nVector multiply subtract with scalar
vmlslMultiply-subtract long (vector)
vmlsl_laneVector multiply-subtract long with scalar
vmlsl_nVector multiply-subtract long with scalar
vqdmullSigned saturating doubling multiply long
vqdmull_laneVector saturating doubling multiply long with scalar
vqdmull_nVector saturating doubling multiply long with scalar
vqdmulhSaturating doubling multiply returning high half
vqdmulh_laneVector saturating doubling multiply high by scalar
vqdmulh_nVector saturating doubling multiply high by scalar
vqrdmulhSaturating rounding doubling multiply returning high half
vqrdmulh_laneVector saturating rounding doubling multiply high with scalar
vqrdmulh_nVector saturating rounding doubling multiply high with scalar
vqdmlalSaturating doubling multiply-add long
vqdmlal_laneVector saturating doubling multiply-accumulate long
with scalar
vqdmlal_nVector saturating doubling multiply-accumulate long
with scalar
vqdmlslSigned saturating doubling multiply-subtract long
vqdmlsl_laneVector saturating doubling multiply-subtract long
with scalar
vqdmlsl_nVector saturating doubling multiply-subtract long
with scalar
vqrdmlahSaturating rounding doubling multiply accumulate
returning high half (vector)
vqrdmlah_laneSaturating rounding doubling multiply accumulate
returning high half (vector)
vqrdmlshSaturating rounding doubling multiply subtract
returning high half (vector)
vqrdmlsh_laneSaturating rounding doubling multiply subtract
returning high half (vector)
vfmaFloating-point fused multiply-add to accumulator (vector)
vfma_nFloating-point fused multiply-add to accumulator (vector)
vfma_laneFloating-point fused multiply-add to accumulator (vector)
vfmsFloating-point fused multiply-subtract
from accumulator (vector)
vfms_nFloating-point fused multiply-subtract
from accumulator (vector)
vfms_laneFloating-point fused multiply-subtract
from accumulator (vector)
vdivFloating-point divide (vector)

Data processing

Operation

Description

vpmaxMaximum pairwise
vpmaxnmFloating-point maximum number pairwise (vector)
vpminMinimum pairwise
vpminnmFloating-point minimum number pairwise (vector)
vabdAbsolute difference
vabdlAbsolute difference long
vabaAbsolute difference and accumulate
vabalAbsolute difference and accumulate long
vmaxMaximum
vmaxnmFloating-point maximum number
vmaxvMaximum across vector
vminMinimum
vminnmFloating-point minimum number
vminvMinimum across vector
vabsAbsolute value
vqabsSaturating absolute value
vnegNegate
vqnegSaturating negate
vclsCount leading sign bits
vclzCount leading zero bits
vcntPopulation count per byte
vrecpeReciprocal estimate
vrecpsReciprocal step
vrecpxFloating-point reciprocal exponent
vrsqrteReciprocal square root estimate
vrsqrtsReciprocal square root step
vmovnExtract narrow
vmovlExtract long
vqmovnSaturating extract narrow
vqmovunSigned saturating extract unsigned narrow

Comparison

Operation

Description

vceqCompare bitwise equal
vceqzCompare bitwise equal to zero
vcgeCompare greater than or equal
vcgezCompare greater than or equal to zero
vcleCompare less than or equal
vclezCompare less than or equal to zero
vcgtCompare greater than
vcgtzCompare greater than zero
vcltCompare less than
vcltzCompare less than zero
vcageFloating-point absolute compare greater than or equal
vcagtFloating-point absolute compare greater than
vcaleFloating-point absolute compare less than or equal
vcaltFloating-point absolute compare less than

Bitwise

Operation

Description

vtstTest bits nonzero
vmvnBitwise NOT
vandBitwise AND
vorrBitwise OR
vornBitwise OR NOT
veorBitwise exclusive OR
vbicBitwise bit clear
vbslBitwise select

Shift

Operation

Description

vshlShift left (register)
vqshlSaturating shift left (register)
vqshl_nSaturating shift left (immediate)
vqshlu_nSaturating shift left unsigned (immediate)
vrshlRounding shift left (register)
vqrshlSaturating rounding shift left (register)
vshl_nShift left (immediate)
vshll_nShift left long (immediate)
vshr_nShift right (immediate)
vrshr_nRounding right left (register)
vshrn_nShift right narrow (immediate)
vqshrun_nSigned saturating shift right
unsigned narrow (immediate)
vqrshrun_nSigned saturating rounded shift right
unsigned narrow (immediate)
vqshrn_nSigned saturating shift right narrow (immediate)
vrshrn_nRounding shift right narrow (immediate)
vqrshrn_nSigned saturating rounded shift right narrow (immediate)
vsra_nSigned shift right and accumulate (immediate)
vrsra_nSigned rounding shift right and accumulate (immediate)
vsri_nShift right and insert (immediate)
vsli_nShift left and insert (immediate)

Floating-point

Operation

Description

vcvtConvert to/from another precision or fixed point,
rounding towards zero
vcvtaConvert to integer, rounding to nearest with ties to away
vcvtmConvert to integer, rounding towards minus infinity
vcvtnConvert to integer, rounding to nearest with ties to even
vcvtpConvert to integer, rounding towards plus infinity
vcvtxConvert to lower precision,
rounding to nearest with ties to odd
vcvt_nConvert to/from fixed point, rounding towards zero
vrndRound to Integral, toward zero
vrndaRound to Integral, with ties to away
vrndiRound to Integral, using current rounding mode
vrndmRound to Integral, towards minus infinity
vrndnRound to Integral, with ties to even
vrndpRound to Integral, towards plus infinity
vrndxRound to Integral exact

Load and store

Operation

Description

vld1Load vector from memory
vst1Store vector to memory
vget_laneGet vector element
vset_laneSet vector element

Permutation

Operation

Description

vextExtract vector from pair of vectors
vtbl1Table vector Lookup
vtbx1Table vector lookup extension
vqtbl1Table vector Lookup
vqtbx1Table vector lookup extension
vrbitReverse bit order
vrev16Reverse elements in 16-bit halfwords
vrev32Reverse elements in 32-bit words
vrev64Reverse elements in 64-bit doublewords
vtrn1Transpose vectors (primary)
vtrn2Transpose vectors (secondary)
vzip1Zip vectors (primary)
vzip2Zip vectors (secondary)
vuzp1Unzip vectors (primary)
vuzp2Unzip vectors (secondary)

Cryptographic

Operation

Description

CRC32Cyclic redundancy check (CRC) calculations.
SHA1SHA1 calculations.
SHA256SHA256 calculations.
AESAES calculations.

Miscellaneous

Operation

Description

vsqrtSquare root
vdotDot product
vdot_laneDot product

Additional resources