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 - 1int16x2int16x2, int16x2None
__qadd84 x 8-bit addition, saturated to range -27 x ≤ 27 - 1int8x4int8x4, int8x4None
__qasxExchange halfwords of second operand, add high halfwords, subtract low halfwords, saturating in each caseint16x2int16x2, int16x2None
__qsaxExchange halfwords of second operand, subtract high halfwords, add low halfwords, saturating in each caseint16x2int16x2, int16x2None
__qsub162 x 16-bit subtraction with saturationint16x2int16x2, int16x2None
__qsub84 x 8-bit subtraction with saturationint8x4int8x4, int8x4None
__sadd162 x 16-bit signed addition.int16x2int16x2, int16x2APSR.GE bits
__sadd84 x 8-bit signed additionint8x4int8x4, int8x4APSR.GE bits
__sasxExchange halfwords of second operand, add high halfwords, subtract low halfwordsint16x2int16x2, 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 resultsint16x2int16x2, int16x2None
__shadd84x8-bit signed addition, halving the resultsint8x4int8x4, int8x4None
__shasxExchange halfwords of the second operand, add high halfwords and subtract low halfwords, halving the resultsint16x2int16x2, int16x2None
__shsaxExchange halfwords of the second operand, subtract high halfwords and add low halfwords, halving the resultsint16x2int16x2, int16x2None
__shsub162x16-bit signed subtraction, halving the resultsint16x2int16x2, int16x2None
__shsub84x8-bit signed subtraction, halving the resultsint8x4int8x4, int8x4None
__smlad2x16-bit multiplication, adding both results to third operandint32int16x2, int16x2, int32Q bit
__smladxExchange halfwords of the second operand, 2x16-bit multiplication, adding both results to third operandint16x2int16x2, 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 widthint16x2int16x2, /*constant*/ unsigned intQ bit
__ssaxExchange halfwords of second operand, subtract high halfwords and add low halfwordsint16x2int16x2, int16x2APSR.GE bits
__ssub162x16-bit signed subtractionint16x2int16x2, int16x2APSR.GE bits
__ssub84x8-bit signed subtractionint8x4int8x4APSR.GE bits
__smuadxExchange halfwords of second operand, perform 2x16-bit signed multiplications, and add products togetherint32int16x2, 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 operandint16x2int8x4, int16x2None
__sxtb16Two values at bit positions [23:16][7:0] are extracted from the operand and sign-extended to 16 bitsint16x2int8x4None
__uadd162x16-bit unsigned additionuint16x2uint16x2, uint16x2APSR.GE bits
__uadd84x8-bit unsigned additionuint8x4uint8x4, uint8x4APSR.GE bits
__uasxExchange halfwords of second operand, add high halfwords and subtract low halfwordsuint16x2uint16x2, uint16x2APSR.GE bits
__uhadd162x16-bit unsigned addition, halving the resultsuint16x2uint16x2, uint16x2None
__uhadd84x8-bit unsigned addition, halving the resultsuint8x4uint8x4, uint8x4None
__uhasxExchange halfwords of second operand, add high halfwords and subtract low halfwords, halving the resultsuint16x2uint16x2, uint16x2None
__uhsaxExchange halfwords of second operand, subtract high halfwords and add low halfwords, halving the resultsuint16x2uint16x2, uint16x2None
__uhsub162x16-bit unsigned subtraction, halving the resultsuint16x2uint16x2, uint16x2None
__uhsub84x8-bit unsigned subtraction, halving the resultsuint8x4uint8x4None
__uqadd162x16-bit unsigned addition, saturating to range 0 ≤ x ≤ 216 - 1uint16x2uint16x2, uint16x2None
__uqadd84x8-bit unsigned addition, saturating to range 0 ≤ x ≤ 28 - 1uint8x4uint8x4, uint8x4None
__uqasxExchange halfwords of second operand, perform saturating unsigned addition on high halfwords and saturating unsigned subtraction on low halfwordsuint16x2uint16x2, uint16x2None
__uqsaxExchange halfwords of second operand, perform saturating unsigned subtraction on high halfwords and saturating unsigned addition on low halfwordsuint16x2uint16x2, uint16x2None
__uqsub162x16-bit unsigned subtraction, saturating to range 0 ≤ x ≤ 216 - 1uint16x2uint16x2, uint16x2None
__uqsub84x8-bit unsigned subtraction, saturating to range 0 ≤ x ≤ 28 - 1uint8x4uint8x4, uint8x4None
__usad84x8-bit unsigned subtraction, add absolute values of the differences together, return result as single unsigned integeruint32uint8x4, uint8x4None
__usada84x8-bit unsigned subtraction, add absolute values of the differences together, and add result to third operanduint32uint8x4, uint8x4, uint32None
__usaxExchange halfwords of second operand, subtract high halfwords and add low halfwordsuint16x2uint16x2, 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 subtractionuint16x2uint16x2, uint16x2APSR.GE bits
__usub84x8-bit unsigned subtractionuint8x4uint8x4, 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 operanduint16x2uint8x4, uint16x2None
__uxtb16Two values at bit positions [23:16][7:0] are extracted from the operand and zero-extended to 16 bitsuint16x2uint8x4None

Was this page helpful? Yes No