A32 (DSP) Instructions
64 ARM instructions in this extension - click any row for encoding, pseudocode, and full documentation.
| Mnemonic | Syntax | Format | Summary |
|---|---|---|---|
| pkhbt | PKHBT<c> <Rd>, <Rn>, <Rm> {, LSL #<imm>} | Data Proc | Combines bottom half of Rn with top half of shifted Rm. |
| pkhtb | PKHTB<c> <Rd>, <Rn>, <Rm> {, ASR #<imm>} | Data Proc | Combines top half of Rn with bottom half of shifted Rm. |
| qadd16 | QADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel saturating add of 2 signed halfwords. |
| qadd8 | QADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel saturating add of 4 signed bytes. |
| qsub16 | QSUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel saturating subtract of 2 signed halfwords. |
| qsub8 | QSUB8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel saturating subtract of 4 signed bytes. |
| sadd16 | SADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel add of two signed 16-bit halfwords. |
| sadd8 | SADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel add of four signed 8-bit bytes. |
| sel | SEL<c> <Rd>, <Rn>, <Rm> | Data Proc | Selects bytes from Rn or Rm based on GE flags. |
| shadd16 | SHADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Signed add and halving (average) of 2 halfwords. |
| shadd8 | SHADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Signed add and halving (average) of 4 bytes. |
| shsub16 | SHSUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Signed subtract and halving of 2 halfwords. |
| shsub8 | SHSUB8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Signed subtract and halving of 4 bytes. |
| smlabb | SMLABB<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Accumulates (Rn.B * Rm.B) into Ra. |
| smlabt | SMLABT<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Accumulates (Rn.B * Rm.T) into Ra. |
| smlad | SMLAD{X}<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Dual multiply add + accumulate. |
| smlalbb | SMLALBB<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Accumulates (Rn.B * Rm.B) into 64-bit pair. |
| smlalbt | SMLALBT<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Accumulates (Rn.B * Rm.T) into 64-bit pair. |
| smlald | SMLALD{X}<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Dual multiply add + 64-bit accumulate. |
| smlaltb | SMLALTB<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Accumulates (Rn.T * Rm.B) into 64-bit pair. |
| smlaltt | SMLALTT<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Accumulates (Rn.T * Rm.T) into 64-bit pair. |
| smlatb | SMLATB<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Accumulates (Rn.T * Rm.B) into Ra. |
| smlatt | SMLATT<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Accumulates (Rn.T * Rm.T) into Ra. |
| smlawb | SMLAWB<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Performs SMULWB and adds to accumulator. |
| smlawt | SMLAWT<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Performs SMULWT and adds to accumulator. |
| smlsd | SMLSD{X}<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | Dual multiply subtract + accumulate. |
| smlsld | SMLSLD{X}<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Dual multiply subtract + 64-bit accumulate. |
| smmla | SMMLA{R}<c> <Rd>, <Rn>, <Rm>, <Ra> | Multiply | SMMUL + Accumulate. |
| smmul | SMMUL{R}<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies and returns the top 32-bits of the 64-bit result. |
| smuad | SMUAD{X}<c> <Rd>, <Rn>, <Rm> | Multiply | Performs two 16x16 multiplies and adds results (Top*Top + Bot*Bot). |
| smulbb | SMULBB<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies bottom 16 bits of Rn and Rm. |
| smulbt | SMULBT<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies bottom 16 bits of Rn and top 16 bits of Rm. |
| smultb | SMULTB<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies top 16 bits of Rn and bottom 16 bits of Rm. |
| smultt | SMULTT<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies top 16 bits of Rn and top 16 bits of Rm. |
| smulwb | SMULWB<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies 32-bit Rn by bottom 16-bits of Rm, takes top 32-bits of result. |
| smulwt | SMULWT<c> <Rd>, <Rn>, <Rm> | Multiply | Multiplies 32-bit Rn by top 16-bits of Rm, takes top 32-bits of result. |
| smusd | SMUSD{X}<c> <Rd>, <Rn>, <Rm> | Multiply | Performs two 16x16 multiplies and subtracts results. |
| ssat | SSAT<c> <Rd>, #<imm>, <Rm> {, <shift>} | Data Proc | Saturates a signed value to a specified bit width. |
| ssat16 | SSAT16<c> <Rd>, #<imm>, <Rm> | Data Proc | Saturates two signed 16-bit values. |
| ssub16 | SSUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel sub of two signed 16-bit halfwords. |
| sxtab | SXTAB<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Sign-extends a byte from Rm and adds to Rn. |
| sxtab16 | SXTAB16<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Sign-extends two bytes and adds to two halfwords. |
| sxtah | SXTAH<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Sign-extends a halfword and adds to Rn. |
| sxtb16 | SXTB16<c> <Rd>, <Rm> {, <rotation>} | Data Proc | Sign-extends two bytes to two halfwords. |
| uadd16 | UADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel add of two unsigned 16-bit halfwords. |
| uadd8 | UADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel add of four unsigned 8-bit bytes. |
| uhadd16 | UHADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned average of 2 halfwords. |
| uhadd8 | UHADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned average of 4 bytes. |
| uhsub16 | UHSUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned halving subtract of 2 halfwords. |
| uhsub8 | UHSUB8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned halving subtract of 4 bytes. |
| umaal | UMAAL<c> <RdLo>, <RdHi>, <Rn>, <Rm> | Multiply | Calculates (Rn * Rm) + RdLo + RdHi -> 64-bit result. |
| uqadd16 | UQADD16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned saturating add of 2 halfwords. |
| uqadd8 | UQADD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned saturating add of 4 bytes. |
| uqsub16 | UQSUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned saturating subtract of 2 halfwords. |
| uqsub8 | UQSUB8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Unsigned saturating subtract of 4 bytes. |
| usad8 | USAD8<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Computes sum of absolute differences of bytes (Video Codec). |
| usada8 | USADA8<c> <Rd>, <Rn>, <Rm>, <Ra> | SIMD Integer | USAD8 plus accumulator. |
| usat | USAT<c> <Rd>, #<imm>, <Rm> {, <shift>} | Data Proc | Saturates an unsigned value to a specified bit width. |
| usat16 | USAT16<c> <Rd>, #<imm>, <Rm> | Data Proc | Saturates two unsigned 16-bit values. |
| usub16 | USUB16<c> <Rd>, <Rn>, <Rm> | SIMD Integer | Parallel sub of two unsigned 16-bit halfwords. |
| uxtab | UXTAB<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Zero-extends a byte and adds to Rn. |
| uxtab16 | UXTAB16<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Zero-extends two bytes and adds to two halfwords. |
| uxtah | UXTAH<c> <Rd>, <Rn>, <Rm> {, <rotation>} | Data Proc | Zero-extends a halfword and adds to Rn. |
| uxtb16 | UXTB16<c> <Rd>, <Rm> {, <rotation>} | Data Proc | Zero-extends two bytes to two halfwords. |