NEON instructions

Table 15 shows a summary of NEON instructions. These instructions are not available in VFP.

Table 15. Location of NEON instructions

MnemonicBrief descriptionSee
VABA, VABDAbsolute difference, Absolute difference and AccumulateVABA{L} and VABD{L}
VABSAbsolute valueV{Q}ABS and V{Q}NEG
VACGE, VACGTAbsolute Compare Greater than or Equal, Greater ThanVACGE and VACGT
VACLE, VACLTAbsolute Compare Less than or Equal, Less Than (pseudo-instructions) VACLE and VACLT
VADDAddV{Q}ADD, VADDL, VADDW, V{Q}SUB, VSUBL, and VSUBW
VADDHNAdd, select High halfV{R}ADDHN and V{R}SUBHN
VANDBitwise ANDVAND, VBIC, VEOR, VORN, and VORR (register)
VANDBitwise AND (pseudo-instruction) VAND and VORN (immediate)
VBICBitwise Bit Clear (register)VAND, VBIC, VEOR, VORN, and VORR (register)
VBICBitwise Bit Clear (immediate)VBIC and VORR (immediate)
VBIF, VBIT, VBSLBitwise Insert if False, Insert if True, SelectVBIF, VBIT, and VBSL
VCEQ, VCLE, VCLTCompare Equal, Less than or Equal, Compare Less ThanVCEQ, VCGE, VCGT, VCLE, and VCLT
VCGE, VCGTCompare Greater than or Equal, Greater ThanVCEQ, VCGE, VCGT, VCLE, and VCLT
VCLE, VCLTCompare Less than or Equal, Compare Less Than (pseudo-instruction) VCLE and VCLT
VCLS, VCLZ, VCNTCount Leading Sign bits, Count Leading Zeros, and Count set bitsVCLS, VCLZ, and VCNT
VCVTConvert fixed-point or integer to floating point, floating-point to integer or fixed-pointVCVT (between fixed-point or integer, and floating-point)
VCVTConvert between half-precision and single-precision floating-point numbersVCVT (between half-precision and single-precision floating-point)
VDUPDuplicate scalar to all lanes of vectorVDUP
VEORBitwise Exclusive ORVAND, VBIC, VEOR, VORN, and VORR (register)
VEXTExtractVEXT
VFMA, VFMSFused Multiply Accumulate, Fused Multiply Subtract (vector)VFMA, VFMS
VHADD, VHSUBHalving Add, Halving SubtractV{R}HADD and VHSUB
VLDVector LoadNEON load and store element and structure instructions
VMAX, VMINMaximum, MinimumVMAX, VMIN, VPMAX, and VPMIN
VMLA, VMLSMultiply Accumulate, Multiply Subtract (vector)VMUL{L}, VMLA{L}, and VMLS{L}
VMLA, VMLSMultiply Accumulate, Multiply Subtract (by scalar)VMUL{L}, VMLA{L}, and VMLS{L} (by scalar)
VMOVMove (immediate)VMOV, VMVN (immediate)
VMOVMove (register)VMOV, VMVN (register)
VMOVL, VMOV{U}NMove Long, Move Narrow (register)VMOVL, V{Q}MOVN, VQMOVUN
VMULMultiply (vector)VMUL{L}, VMLA{L}, and VMLS{L}
VMULMultiply (by scalar)VMUL{L}, VMLA{L}, and VMLS{L} (by scalar)
VMVNMove Negative (immediate)VMOV, VMVN (immediate)
VNEGNegateV{Q}ABS and V{Q}NEG
VORNBitwise OR NOTVAND, VBIC, VEOR, VORN, and VORR (register)
VORNBitwise OR NOT (pseudo-instruction) VAND and VORN (immediate)
VORRBitwise OR (register)VAND, VBIC, VEOR, VORN, and VORR (register)
VORRBitwise OR (immediate)VBIC and VORR (immediate)
VPADD, VPADALPairwise Add, Pairwise Add and AccumulateVPADD{L}, VPADAL
VPMAX, VPMINPairwise Maximum, Pairwise MinimumVMAX, VMIN, VPMAX, and VPMIN
VQABSAbsolute value, saturateV{Q}ABS and V{Q}NEG
VQADDAdd, saturateV{Q}ADD, VADDL, VADDW, V{Q}SUB, VSUBL, and VSUBW
VQDMLAL, VQDMLSLSaturating Doubling Multiply Accumulate, and Multiply SubtractVQDMULL, VQDMLAL, and VQDMLSL (by vector or by scalar)
VQDMULSaturating Doubling MultiplyVQDMULL, VQDMLAL, and VQDMLSL (by vector or by scalar)
VQDMULH

Saturating Doubling Multiply returning High half

VQ{R}DMULH (by vector or by scalar)
VQMOV{U}NSaturating Move (register)VMOVL, V{Q}MOVN, VQMOVUN
VQNEGNegate, saturateV{Q}ABS and V{Q}NEG
VQRDMULH

Saturating Doubling Multiply returning High half

VQ{R}DMULH (by vector or by scalar)
VQRSHLShift Left, Round, saturate (by signed variable)V{Q}{R}SHL (by signed variable)
VQRSHR{U}NShift Right, Round, saturate (by immediate)VQ{R}SHR{U}N (by immediate)
VQSHLShift Left, saturate (by immediate)VSHL, VQSHL, VQSHLU, and VSHLL (by immediate)
VQSHLShift Left, saturate (by signed variable)V{Q}{R}SHL (by signed variable)
VQSHR{U}NShift Right, saturate (by immediate)VQ{R}SHR{U}N (by immediate)
VQSUBSubtract, saturateV{Q}ADD, VADDL, VADDW, V{Q}SUB, VSUBL, and VSUBW
VRADDHNAdd, select High half, RoundV{R}ADDHN and V{R}SUBHN
VRECPEReciprocal EstimateVRECPE and VRSQRTE
VRECPSReciprocal StepVRECPS and VRSQRTS
VREVReverse elementsVREV
VRHADDHalving Add, RoundV{R}HADD and VHSUB
VRSHR, VRSRAShift Right and Round, Shift Right, Round, and Accumulate (by immediate)V{R}SHR{N}, V{R}SRA (by immediate)
VRSQRTEReciprocal Square Root EstimateVRECPE and VRSQRTE
VRSQRTSReciprocal Square Root StepVRECPS and VRSQRTS
VRSUBHNSubtract, select High half, RoundV{R}ADDHN and V{R}SUBHN
VSHLShift Left (by immediate)VSHL, VQSHL, VQSHLU, and VSHLL (by immediate)
VSHRShift Right (by immediate)V{R}SHR{N}, V{R}SRA (by immediate)
VSLIShift Left and InsertVSLI and VSRI
VSRAShift Right, Accumulate (by immediate)V{R}SHR{N}, V{R}SRA (by immediate)
VSRIShift Right and InsertVSLI and VSRI
VSTVector StoreNEON load and store element and structure instructions
VSUBSubtractV{Q}ADD, VADDL, VADDW, V{Q}SUB, VSUBL, and VSUBW
VSUBHNSubtract, select High halfV{R}ADDHN and V{R}SUBHN
VSWPSwap vectorsVSWP
VTBL, VTBXVector table look-upVTBL, VTBX
VTRNVector transposeVTRN
VTSTTest bitsVTST
VUZP, VZIPVector interleave and de-interleaveVUZP, VZIP

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489C
Non-ConfidentialID080411