__qadd16 | 2 x 16-bit addition, saturated to range -215 ≤ x ≤
215 - 1 | int16x2 | int16x2, int16x2 | None |
__qadd8 | 4 x 8-bit addition, saturated to range -27 ≤ x ≤
27 - 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 ≤ 216 - 1 | uint16x2 | uint16x2, uint16x2 | None |
__uqadd8 | 4x8-bit unsigned addition, saturating to range
0 ≤ x ≤ 28 - 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 ≤ 216 -
1 | uint16x2 | uint16x2, uint16x2 | None |
__uqsub8 | 4x8-bit unsigned subtraction, saturating to
range 0 ≤ x ≤ 28 -
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 |