Non-Confidential | PDF version | ARM DUI0375E | ||

| ||||

Home > ARMv6 SIMD Instruction Intrinsics > ARMv6 SIMD intrinsics, summary descriptions, byte lanes, affected flags |

The following table describes each ARMv6 SIMD intrinsic, providing a summary description together with information about byte lanes and affected flags.

**Table 12-2 ARMv6 SIMD intrinsics, summary descriptions, byte lanes,
affected flags**

Intrinsic | Summary description | Byte lanes | Affected flags | |
---|---|---|---|---|

Returns | Operands | |||

`__qadd16` |
2 x 16-bit addition, saturated to range -2^{15} ≤ x ≤
2^{15} - 1. |
int16x2 | int16x2, int16x2 | None |

`__qadd8` |
4 x 8-bit addition, saturated to range -2^{7} ≤ x ≤
2^{7} - 1. |
int8x4 | int8x4, int8x4 | None |

`__qasx` |
Exchange halfwords of second operand, add high halfwords, subtract low halfwords, saturating in each case. | int16x2 | int16x2, int16x2 | None |

`__qsax` |
Exchange halfwords of second operand, subtract high halfwords, add low halfwords, saturating in each case. | int16x2 | int16x2, int16x2 | None |

`__qsub16` |
2 x 16-bit subtraction with saturation. | int16x2 | int16x2, int16x2 | None |

`__qsub8` |
4 x 8-bit subtraction with saturation. | int8x4 | int8x4, int8x4 | None |

`__sadd16` |
2 x 16-bit signed addition. | int16x2 | int16x2, int16x2 | APSR.GE bits |

`__sadd8` |
4 x 8-bit signed addition. | int8x4 | int8x4, int8x4 | APSR.GE bits |

`__sasx` |
Exchange halfwords of second operand, add high halfwords, subtract low halfwords. | int16x2 | int16x2, int16x2 | APSR.GE bits |

`__sel` |
Select each byte of the result from either
the first operand or the second operand, according to the values
of the GE bits. For each result byte, if the corresponding GE bit
is set, the byte from the first operand is selected, otherwise the
byte from the second operand is selected. Because of the way that
int16x2 operations set two (duplicate) GE bits per value, the `__sel` intrinsic
works equally well on (u)int16x2 and (u)int8x4 data. |
uint8x4 | uint8x4, uint8x4 | None |

`__shadd16` |
2x16-bit signed addition, halving the results. | int16x2 | int16x2, int16x2 | None |

`__shadd8` |
4x8-bit signed addition, halving the results. | int8x4 | int8x4, int8x4 | None |

`__shasx` |
Exchange halfwords of the second operand, add high halfwords and subtract low halfwords, halving the results. | int16x2 | int16x2, int16x2 | None |

`__shsax` |
Exchange halfwords of the second operand, subtract high halfwords and add low halfwords, halving the results. | int16x2 | int16x2, int16x2 | None |

`__shsub16` |
2x16-bit signed subtraction, halving the results. | int16x2 | int16x2, int16x2 | None |

`__shsub8` |
4x8-bit signed subtraction, halving the results. | int8x4 | int8x4, int8x4 | None |

`__smlad` |
2x16-bit multiplication, adding both results to third operand. | int32 | int16x2, int16x2, int32 | Q bit |

`__smladx` |
Exchange halfwords of the second operand, 2x16-bit multiplication, adding both results to third operand. | int16x2 | int16x2, int16x2 | Q bit |

`__smlald` |
2x16-bit multiplication, adding both results to third operand. Overflow in addition is not detected. | int64 | int16x2, int16x2, int64 | None |

`__smlaldx` |
Exchange halfwords of second operand, perform 2x16-bit multiplication, adding both results to third operand. Overflow in addition is not detected. | int64 | int16x2, int16x2, int64 | None |

`__smlsd` |
2x16-bit signed multiplications. Take difference of products, subtract high halfword product from low halfword product, add difference to third operand. | int32 | int16x2, int16x2, int32 | Q bit |

`__smlsdx` |
Exchange halfwords of second operand, then 2x16-bit signed multiplications. Product difference is added to a third accumulate operand. | int32 | int16x2, int16x2, int32 | Q bit |

`__smlsld` |
2x16-bit signed multiplications. Take difference of products, subtracting high halfword product from low halfword product, and add difference to third operand. Overflow in addition is not detected. | int64 | int16x2, int16x2, int64 | None |

`__smlsldx` |
Exchange halfwords of second operand, then 2x16-bit signed multiplications. Take difference of products, subtracting high halfword product from low halfword product, and add difference to third operand. Overflow in addition is not detected. | int64 | int16x2, int16x2, u64 | None |

`__smuad` |
2x16-bit signed multiplications, adding the products together. | int32 | int16x2, int16x2 | Q bit |

`__smusd` |
2x16-bit signed multiplications. Take difference of products, subtracting high halfword product from low halfword product. | int32 | int16x2, int16x2 | None |

`__smusdx` |
2x16-bit signed multiplications. Product of high halfword of first operand and low halfword of second operand is subtracted from product of low halfword of first operand and high halfword of second operand, and difference is added to third operand. | int32 | int16x2, int16x2 | None |

`__ssat16` |
2x16-bit signed saturation to a selected width. | int16x2 | int16x2, /*constant*/ unsigned int | Q bit |

`__ssax` |
Exchange halfwords of second operand, subtract high halfwords and add low halfwords. | int16x2 | int16x2, int16x2 | APSR.GE bits |

`__ssub16` |
2x16-bit signed subtraction. | int16x2 | int16x2, int16x2 | APSR.GE bits |

`__ssub8` |
4x8-bit signed subtraction. | int8x4 | int8x4 | APSR.GE bits |

`__smuadx` |
Exchange halfwords of second operand, perform 2x16-bit signed multiplications, and add products together. | int32 | int16x2, int16x2 | Q bit |

`__sxtab16` |
Two values at bit positions [23:16][7:0] are extracted from second operand, sign-extended to 16 bits, and added to first operand. | int16x2 | int8x4, int16x2 | None |

`__sxtb16` |
Two values at bit positions [23:16][7:0] are extracted from the operand and sign-extended to 16 bits. | int16x2 | int8x4 | None |

`__uadd16` |
2x16-bit unsigned addition. | uint16x2 | uint16x2, uint16x2 | APSR.GE bits |

`__uadd8` |
4x8-bit unsigned addition. | uint8x4 | uint8x4, uint8x4 | APSR.GE bits |

`__uasx` |
Exchange halfwords of second operand, add high halfwords and subtract low halfwords. | uint16x2 | uint16x2, uint16x2 | APSR.GE bits |

`__uhadd16` |
2x16-bit unsigned addition, halving the results. | uint16x2 | uint16x2, uint16x2 | None |

`__uhadd8` |
4x8-bit unsigned addition, halving the results. | uint8x4 | uint8x4, uint8x4 | None |

`__uhasx` |
Exchange halfwords of second operand, add high halfwords and subtract low halfwords, halving the results. | uint16x2 | uint16x2, uint16x2 | None |

`__uhsax` |
Exchange halfwords of second operand, subtract high halfwords and add low halfwords, halving the results. | uint16x2 | uint16x2, uint16x2 | None |

`__uhsub16` |
2x16-bit unsigned subtraction, halving the results. | uint16x2 | uint16x2, uint16x2 | None |

`__uhsub8` |
4x8-bit unsigned subtraction, halving the results. | uint8x4 | uint8x4 | None |

`__uqadd16` |
2x16-bit unsigned addition, saturating to range
0 ≤ x ≤ 2^{16} - 1. |
uint16x2 | uint16x2, uint16x2 | None |

`__uqadd8` |
4x8-bit unsigned addition, saturating to range
0 ≤ x ≤ 2^{8} - 1. |
uint8x4 | uint8x4, uint8x4 | None |

`__uqasx` |
Exchange halfwords of second operand, perform saturating unsigned addition on high halfwords and saturating unsigned subtraction on low halfwords. | uint16x2 | uint16x2, uint16x2 | None |

`__uqsax` |
Exchange halfwords of second operand, perform saturating unsigned subtraction on high halfwords and saturating unsigned addition on low halfwords. | uint16x2 | uint16x2, uint16x2 | None |

`__uqsub16` |
2x16-bit unsigned subtraction, saturating to
range 0 ≤ x ≤ 2^{16} -
1. |
uint16x2 | uint16x2, uint16x2 | None |

`__uqsub8` |
4x8-bit unsigned subtraction, saturating to
range 0 ≤ x ≤ 2^{8} -
1. |
uint8x4 | uint8x4, uint8x4 | None |

`__usad8` |
4x8-bit unsigned subtraction, add absolute values of the differences together, return result as single unsigned integer. | uint32 | uint8x4, uint8x4 | None |

`__usada8` |
4x8-bit unsigned subtraction, add absolute values of the differences together, and add result to third operand. | uint32 | uint8x4, uint8x4, uint32 | None |

`__usax` |
Exchange halfwords of second operand, subtract high halfwords and add low halfwords. | uint16x2 | uint16x2, uint16x2 | APSR.GE bits |

`__usat16` |
Saturate two 16-bit values to a selected unsigned range. Input values are signed and output values are non-negative. | int16x2 | int16x2, /*constant*/ unsigned int | Q flag |

`__usub16` |
2x16-bit unsigned subtraction. | uint16x2 | uint16x2, uint16x2 | APSR.GE bits |

`__usub8` |
4x8-bit unsigned subtraction. | uint8x4 | uint8x4, uint8x4 | APSR.GE bits |

`__uxtab16` |
Two values at bit positions [23:16][7:0] are extracted from the second operand, zero-extended to 16 bits, and added to the first operand. | uint16x2 | uint8x4, uint16x2 | None |

`__uxtb16` |
Two values at bit positions [23:16][7:0] are extracted from the operand and zero-extended to 16 bits. | uint16x2 | uint8x4 | None |