You copied the Doc URL to your clipboard.

ARMv6 SIMD intrinsics, summary descriptions, byte lanes, affected flags

Table 34. ARMv6 SIMD intrinsics, summary descriptions, byte lanes, affected flags
IntrinsicSummary descriptionByte lanesAffected flags
ReturnsOperands 
__qadd162 x 16-bit addition, saturated to range -215 x ≤ 215 - 1.int16x2int16x2, int16x2None
__qadd84 x 8-bit addition, saturated to range -27 x ≤ 27 - 1.int8x4int8x4, int8x4None
__qasxExchange halfwords of second operand, add high halfwords, subtract low halfwords, saturating in each case.int16x2int16x2, int16x2None
__qsaxExchange halfwords of second operand, subtract high halfwords, add low halfwords, saturating in each case.int16x2int16x2, int16x2None
__qsub162 x 16-bit subtraction with saturation.int16x2int16x2, int16x2None
__qsub84 x 8-bit subtraction with saturation.int8x4int8x4, int8x4None
__sadd162 x 16-bit signed addition.int16x2int16x2, int16x2APSR.GE bits
__sadd84 x 8-bit signed addition.int8x4int8x4, int8x4APSR.GE bits
__sasxExchange halfwords of second operand, add high halfwords, subtract low halfwords.int16x2int16x2, int16x2APSR.GE bits
__selSelect 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.uint8x4uint8x4, uint8x4None
__shadd162x16-bit signed addition, halving the results.int16x2int16x2, int16x2None
__shadd84x8-bit signed addition, halving the results.int8x4int8x4, int8x4None
__shasxExchange halfwords of the second operand, add high halfwords and subtract low halfwords, halving the results.int16x2int16x2, int16x2None
__shsaxExchange halfwords of the second operand, subtract high halfwords and add low halfwords, halving the results.int16x2int16x2, int16x2None
__shsub162x16-bit signed subtraction, halving the results.int16x2int16x2, int16x2None
__shsub84x8-bit signed subtraction, halving the results.int8x4int8x4, int8x4None
__smlad2x16-bit multiplication, adding both results to third operand.int32int16x2, int16x2, int32Q bit
__smladxExchange halfwords of the second operand, 2x16-bit multiplication, adding both results to third operand.int16x2int16x2, int16x2Q bit
__smlald2x16-bit multiplication, adding both results to third operand. Overflow in addition is not detected.int64int16x2, int16x2, int64None
__smlaldxExchange halfwords of second operand, perform 2x16-bit multiplication, adding both results to third operand. Overflow in addition is not detected.int64int16x2, int16x2, int64None
__smlsd2x16-bit signed multiplications. Take difference of products, subtract high halfword product from low halfword product, add difference to third operand.int32int16x2, int16x2, int32Q bit
__smlsdxExchange halfwords of second operand, then 2x16-bit signed multiplications. Product difference is added to a third accumulate operand.int32int16x2, int16x2, int32Q bit
__smlsld2x16-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.int64int16x2, int16x2, int64None
__smlsldxExchange 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.int64int16x2, int16x2, u64None
__smuad2x16-bit signed multiplications, adding the products together.int32int16x2, int16x2Q bit
__smusd2x16-bit signed multiplications. Take difference of products, subtracting high halfword product from low halfword product.int32int16x2, int16x2None
__smusdx2x16-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.int32int16x2, int16x2None
__ssat162x16-bit signed saturation to a selected width.int16x2int16x2, /*constant*/ unsigned intQ bit
__ssaxExchange halfwords of second operand, subtract high halfwords and add low halfwords.int16x2int16x2, int16x2APSR.GE bits
__ssub162x16-bit signed subtraction.int16x2int16x2, int16x2APSR.GE bits
__ssub84x8-bit signed subtraction.int8x4int8x4APSR.GE bits
__smuadxExchange halfwords of second operand, perform 2x16-bit signed multiplications, and add products together.int32int16x2, int16x2Q bit
__sxtab16Two values at bit positions [23:16][7:0] are extracted from second operand, sign-extended to 16 bits, and added to first operand.int16x2int8x4, int16x2None
__sxtb16Two values at bit positions [23:16][7:0] are extracted from the operand and sign-extended to 16 bits.int16x2int8x4None
__uadd162x16-bit unsigned addition.uint16x2uint16x2, uint16x2APSR.GE bits
__uadd84x8-bit unsigned addition.uint8x4uint8x4, uint8x4APSR.GE bits
__uasxExchange halfwords of second operand, add high halfwords and subtract low halfwords.uint16x2uint16x2, uint16x2APSR.GE bits
__uhadd162x16-bit unsigned addition, halving the results.uint16x2uint16x2, uint16x2None
__uhadd84x8-bit unsigned addition, halving the results.uint8x4uint8x4, uint8x4None
__uhasxExchange halfwords of second operand, add high halfwords and subtract low halfwords, halving the results.uint16x2uint16x2, uint16x2None
__uhsaxExchange halfwords of second operand, subtract high halfwords and add low halfwords, halving the results.uint16x2uint16x2, uint16x2None
__uhsub162x16-bit unsigned subtraction, halving the results.uint16x2uint16x2, uint16x2None
__uhsub84x8-bit unsigned subtraction, halving the results.uint8x4uint8x4None
__uqadd162x16-bit unsigned addition, saturating to range 0 ≤ x ≤ 216 - 1.uint16x2uint16x2, uint16x2None
__uqadd84x8-bit unsigned addition, saturating to range 0 ≤ x ≤ 28 - 1.uint8x4uint8x4, uint8x4None
__uqasxExchange halfwords of second operand, perform saturating unsigned addition on high halfwords and saturating unsigned subtraction on low halfwords.uint16x2uint16x2, uint16x2None
__uqsaxExchange halfwords of second operand, perform saturating unsigned subtraction on high halfwords and saturating unsigned addition on low halfwords.uint16x2uint16x2, uint16x2None
__uqsub162x16-bit unsigned subtraction, saturating to range 0 ≤ x ≤ 216 - 1.uint16x2uint16x2, uint16x2None
__uqsub84x8-bit unsigned subtraction, saturating to range 0 ≤ x ≤ 28 - 1.uint8x4uint8x4, uint8x4None
__usad84x8-bit unsigned subtraction, add absolute values of the differences together, return result as single unsigned integer.uint32uint8x4, uint8x4None
__usada84x8-bit unsigned subtraction, add absolute values of the differences together, and add result to third operand.uint32uint8x4, uint8x4, uint32None
__usaxExchange halfwords of second operand, subtract high halfwords and add low halfwords.uint16x2uint16x2, uint16x2APSR.GE bits
__usat16Saturate two 16-bit values to a selected unsigned range. Input values are signed and output values are non-negative.int16x2int16x2, /*constant*/ unsigned intQ flag
__usub162x16-bit unsigned subtraction.uint16x2uint16x2, uint16x2APSR.GE bits
__usub84x8-bit unsigned subtraction.uint8x4uint8x4, uint8x4APSR.GE bits
__uxtab16Two 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.uint16x2uint8x4, uint16x2None
__uxtb16Two values at bit positions [23:16][7:0] are extracted from the operand and zero-extended to 16 bits.uint16x2uint8x4None

Was this page helpful? Yes No