CMSISCore (CortexM)
Version 5.3.0
CMSISCore support for CortexM processorbased devices

Access to dedicated SIMD instructions. More...
Functions  
uint32_t  __SADD8 (uint32_t val1, uint32_t val2) 
GE setting quad 8bit signed addition. More...  
uint32_t  __QADD8 (uint32_t val1, uint32_t val2) 
Q setting quad 8bit saturating addition. More...  
uint32_t  __SHADD8 (uint32_t val1, uint32_t val2) 
Quad 8bit signed addition with halved results. More...  
uint32_t  __UADD8 (uint32_t val1, uint32_t val2) 
GE setting quad 8bit unsigned addition. More...  
uint32_t  __UQADD8 (uint32_t val1, uint32_t val2) 
Quad 8bit unsigned saturating addition. More...  
uint32_t  __UHADD8 (uint32_t val1, uint32_t val2) 
Quad 8bit unsigned addition with halved results. More...  
uint32_t  __SSUB8 (uint32_t val1, uint32_t val2) 
GE setting quad 8bit signed subtraction. More...  
uint32_t  __QSUB8 (uint32_t val1, uint32_t val2) 
Q setting quad 8bit saturating subtract. More...  
uint32_t  __SHSUB8 (uint32_t val1, uint32_t val2) 
Quad 8bit signed subtraction with halved results. More...  
uint32_t  __USUB8 (uint32_t val1, uint32_t val2) 
GE setting quad 8bit unsigned subtract. More...  
uint32_t  __UQSUB8 (uint32_t val1, uint32_t val2) 
Quad 8bit unsigned saturating subtraction. More...  
uint32_t  __UHSUB8 (uint32_t val1, uint32_t val2) 
Quad 8bit unsigned subtraction with halved results. More...  
uint32_t  __SADD16 (uint32_t val1, uint32_t val2) 
GE setting dual 16bit signed addition. More...  
uint32_t  __QADD16 (uint32_t val1, uint32_t val2) 
Q setting dual 16bit saturating addition. More...  
uint32_t  __SHADD16 (uint32_t val1, uint32_t val2) 
Dual 16bit signed addition with halved results. More...  
uint32_t  __UADD16 (uint32_t val1, uint32_t val2) 
GE setting dual 16bit unsigned addition. More...  
uint32_t  __UQADD16 (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned saturating addition. More...  
uint32_t  __UHADD16 (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned addition with halved results. More...  
uint32_t  __SSUB16 (uint32_t val1, uint32_t val2) 
GE setting dual 16bit signed subtraction. More...  
uint32_t  __QSUB16 (uint32_t val1, uint32_t val2) 
Q setting dual 16bit saturating subtract. More...  
uint32_t  __SHSUB16 (uint32_t val1, uint32_t val2) 
Dual 16bit signed subtraction with halved results. More...  
uint32_t  __USUB16 (uint32_t val1, uint32_t val2) 
GE setting dual 16bit unsigned subtract. More...  
uint32_t  __UQSUB16 (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned saturating subtraction. More...  
uint32_t  __UHSUB16 (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned subtraction with halved results. More...  
uint32_t  __SASX (uint32_t val1, uint32_t val2) 
GE setting dual 16bit addition and subtraction with exchange. More...  
uint32_t  __QASX (uint32_t val1, uint32_t val2) 
Q setting dual 16bit add and subtract with exchange. More...  
uint32_t  __SHASX (uint32_t val1, uint32_t val2) 
Dual 16bit signed addition and subtraction with halved results. More...  
uint32_t  __UASX (uint32_t val1, uint32_t val2) 
GE setting dual 16bit unsigned addition and subtraction with exchange. More...  
uint32_t  __UQASX (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned saturating addition and subtraction with exchange. More...  
uint32_t  __UHASX (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned addition and subtraction with halved results and exchange. More...  
uint32_t  __SSAX (uint32_t val1, uint32_t val2) 
GE setting dual 16bit signed subtraction and addition with exchange. More...  
uint32_t  __QSAX (uint32_t val1, uint32_t val2) 
Q setting dual 16bit subtract and add with exchange. More...  
uint32_t  __SHSAX (uint32_t val1, uint32_t val2) 
Dual 16bit signed subtraction and addition with halved results. More...  
uint32_t  __USAX (uint32_t val1, uint32_t val2) 
GE setting dual 16bit unsigned subtract and add with exchange. More...  
uint32_t  __UQSAX (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned saturating subtraction and addition with exchange. More...  
uint32_t  __UHSAX (uint32_t val1, uint32_t val2) 
Dual 16bit unsigned subtraction and addition with halved results and exchange. More...  
uint32_t  __USAD8 (uint32_t val1, uint32_t val2) 
Unsigned sum of quad 8bit unsigned absolute difference. More...  
uint32_t  __USADA8 (uint32_t val1, uint32_t val2, uint32_t val3) 
Unsigned sum of quad 8bit unsigned absolute difference with 32bit accumulate. More...  
uint32_t  __SSAT16 (uint32_t val1, const uint32_t val2) 
Q setting dual 16bit saturate. More...  
uint32_t  __USAT16 (uint32_t val1, const uint32_t val2) 
Q setting dual 16bit unsigned saturate. More...  
uint32_t  __UXTB16 (uint32_t val) 
Dual extract 8bits and zeroextend to 16bits. More...  
uint32_t  __UXTAB16 (uint32_t val1, uint32_t val2) 
Extracted 16bit to 32bit unsigned addition. More...  
uint32_t  __SXTB16 (uint32_t val) 
Dual extract 8bits and sign extend each to 16bits. More...  
uint32_t  __SXTAB16 (uint32_t val1, uint32_t val2) 
Dual extracted 8bit to 16bit signed addition. More...  
uint32_t  __SMUAD (uint32_t val1, uint32_t val2) 
Q setting sum of dual 16bit signed multiply. More...  
uint32_t  __SMUADX (uint32_t val1, uint32_t val2) 
Q setting sum of dual 16bit signed multiply with exchange. More...  
uint32_t  __SMMLA (int32_t val1, int32_t val2, int32_t val3) 
32bit signed multiply with 32bit truncated accumulator. More...  
uint32_t  __SMLAD (uint32_t val1, uint32_t val2, uint32_t val3) 
Q setting dual 16bit signed multiply with single 32bit accumulator. More...  
uint32_t  __SMLADX (uint32_t val1, uint32_t val2, uint32_t val3) 
Q setting preexchanged dual 16bit signed multiply with single 32bit accumulator. More...  
uint64_t  __SMLALD (uint32_t val1, uint32_t val2, uint64_t val3) 
Dual 16bit signed multiply with single 64bit accumulator. More...  
unsigned long long  __SMLALDX (uint32_t val1, uint32_t val2, unsigned long long val3) 
Dual 16bit signed multiply with exchange with single 64bit accumulator. More...  
uint32_t  __SMUSD (uint32_t val1, uint32_t val2) 
Dual 16bit signed multiply returning difference. More...  
uint32_t  __SMUSDX (uint32_t val1, uint32_t val2) 
Dual 16bit signed multiply with exchange returning difference. More...  
uint32_t  __SMLSD (uint32_t val1, uint32_t val2, uint32_t val3) 
Q setting dual 16bit signed multiply subtract with 32bit accumulate. More...  
uint32_t  __SMLSDX (uint32_t val1, uint32_t val2, uint32_t val3) 
Q setting dual 16bit signed multiply with exchange subtract with 32bit accumulate. More...  
uint64_t  __SMLSLD (uint32_t val1, uint32_t val2, uint64_t val3) 
Q setting dual 16bit signed multiply subtract with 64bit accumulate. More...  
unsigned long long  __SMLSLDX (uint32_t val1, uint32_t val2, unsigned long long val3) 
Q setting dual 16bit signed multiply with exchange subtract with 64bit accumulate. More...  
uint32_t  __SEL (uint32_t val1, uint32_t val2) 
Select bytes based on GE bits. More...  
uint32_t  __QADD (uint32_t val1, uint32_t val2) 
Q setting saturating add. More...  
uint32_t  __QSUB (uint32_t val1, uint32_t val2) 
Q setting saturating subtract. More...  
uint32_t  __PKHBT (uint32_t val1, uint32_t val2, uint32_t val3) 
Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16] of val2 levitated with the val3. More...  
uint32_t  __PKHTB (uint32_t val1, uint32_t val2, uint32_t val3) 
Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0] of val2 rightshifted with the val3. More...  
Single Instruction Multiple Data (SIMD) extensions are provided only for CortexM4 and CortexM7 cores to simplify development of application software. SIMD extensions increase the processing capability without materially increasing the power consumption. The SIMD extensions are completely transparent to the operating system (OS), allowing existing OS ports to be used.
SIMD Features:
Examples:
Addition: Add two values using SIMD function
Subtraction: Subtract two values using SIMD function
Multiplication: Performing a multiplication using SIMD function
uint32_t __PKHBT  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
Combine a halfword from one register with a halfword from another register. The second argument can be leftshifted before extraction of the halfword. The registers PC and SP are not allowed as arguments. This instruction does not change the flags.
val1  first 16bit operands 
val2  second 16bit operands 
val3  value for leftshifting val2. Value range [0..31]. 
uint32_t __PKHTB  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
Combines a halfword from one register with a halfword from another register. The second argument can be rightshifted before extraction of the halfword. The registers PC and SP are not allowed as arguments. This instruction does not change the flags.
val1  second 16bit operands 
val2  first 16bit operands 
val3  value for rightshifting val2. Value range [1..32]. 
uint32_t __QADD  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to obtain the saturating add of two integers.
The Q bit is set if the operation saturates.
val1  first summand of the saturating add operation. 
val2  second summand of the saturating add operation. 
uint32_t __QADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit integer arithmetic additions in parallel, saturating the results to the 16bit signed integer range 2^{15} <= x <= 2^{15}  1.
val1  first two 16bit summands. 
val2  second two 16bit summands. 
uint32_t __QADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four 8bit integer additions, saturating the results to the 8bit signed integer range 2^{7} <= x <= 2^{7}  1.
val1  first four 8bit summands. 
val2  second four 8bit summands. 
uint32_t __QASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the one operand, then add the high halfwords and subtract the low halfwords, saturating the results to the 16bit signed integer range 2^{15} <= x <= 2^{15}  1.
val1  first operand for the subtraction in the low halfword, and the first operand for the addition in the high halfword. 
val2  second operand for the subtraction in the high halfword, and the second operand for the addition in the low halfword. 
uint32_t __QSAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of one operand, then subtract the high halfwords and add the low halfwords, saturating the results to the 16bit signed integer range 2^{15} <= x <= 2^{15}  1.
val1  first operand for the addition in the low halfword, and the first operand for the subtraction in the high halfword. 
val2  second operand for the addition in the high halfword, and the second operand for the subtraction in the low halfword. 
uint32_t __QSUB  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to obtain the saturating subtraction of two integers.
The Q bit is set if the operation saturates.
val1  minuend of the saturating subtraction operation. 
val2  subtrahend of the saturating subtraction operation. 
uint32_t __QSUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit integer subtractions, saturating the results to the 16bit signed integer range 2^{15} <= x <= 2^{15}  1.
val1  first two 16bit operands. 
val2  second two 16bit operands. 
uint32_t __QSUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four 8bit integer subtractions, saturating the results to the 8bit signed integer range 2^{7} <= x <= 2^{7}  1.
val1  first four 8bit operands. 
val2  second four 8bit operands. 
uint32_t __SADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed integer additions.
The GE bits in the APSR are set according to the results of the additions.
val1  first two 16bit summands. 
val2  second two 16bit summands. 
uint32_t __SADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function performs four 8bit signed integer additions. The GE bits of the APSR are set according to the results of the additions.
val1  first four 8bit summands. 
val2  second four 8bit summands. 
uint32_t __SASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function inserts an SASX instruction into the instruction stream generated by the compiler. It enables you to exchange the halfwords of the second operand, add the high halfwords and subtract the low halfwords.
The GE bits in the APRS are set according to the results.
val1  first operand for the subtraction in the low halfword, and the first operand for the addition in the high halfword. 
val2  second operand for the subtraction in the high halfword, and the second operand for the addition in the low halfword. 
uint32_t __SEL  (  uint32_t  val1, 
uint32_t  val2  
) 
This function inserts a SEL instruction into the instruction stream generated by the compiler. It enables you to select bytes from the input parameters, whereby the bytes that are selected depend upon the results of previous SIMD instruction function. The results of previous SIMD instruction function are represented by the Greater than or Equal flags in the Application Program Status Register (APSR). The __SEL function works equally well on both halfword and byte operand function results. This is because halfword operand operations set two (duplicate) GE bits per value.
val1  four selectable 8bit values. 
val2  four selectable 8bit values. 
uint32_t __SHADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two signed 16bit integer additions, halving the results.
val1  first two 16bit summands. 
val2  second two 16bit summands. 
uint32_t __SHADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four signed 8bit integer additions, halving the results.
val1  first four 8bit summands. 
val2  second four 8bit summands. 
uint32_t __SHASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the two halfwords of one operand, perform one signed 16bit integer addition and one signed 16bit subtraction, and halve the results.
val1  first 16bit operands. 
val2  second 16bit operands. 
uint32_t __SHSAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the two halfwords of one operand, perform one signed 16bit integer subtraction and one signed 16bit addition, and halve the results.
val1  first 16bit operands. 
val2  second 16bit operands. 
uint32_t __SHSUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two signed 16bit integer subtractions, halving the results.
val1  first two 16bit operands. 
val2  second two 16bit operands. 
uint32_t __SHSUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four signed 8bit integer subtractions, halving the results.
val1  first four 8bit operands. 
val2  second four 8bit operands. 
uint32_t __SMLAD  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
This function enables you to perform two signed 16bit multiplications, adding both results to a 32bit accumulate operand.
The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint32_t __SMLADX  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
This function enables you to perform two signed 16bit multiplications with exchanged halfwords of the second operand, adding both results to a 32bit accumulate operand.
The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint64_t __SMLALD  (  uint32_t  val1, 
uint32_t  val2,  
uint64_t  val3  
) 
This function enables you to perform two signed 16bit multiplications, adding both results to a 64bit accumulate operand. Overflow is only possible as a result of the 64bit addition. This overflow is not detected if it occurs. Instead, the result wraps around modulo2^{64}.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
unsigned long long __SMLALDX  (  uint32_t  val1, 
uint32_t  val2,  
unsigned long long  val3  
) 
This function enables you to exchange the halfwords of the second operand, and perform two signed 16bit multiplications, adding both results to a 64bit accumulate operand. Overflow is only possible as a result of the 64bit addition. This overflow is not detected if it occurs. Instead, the result wraps around modulo2^{64}.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint32_t __SMLSD  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
This function enables you to perform two 16bit signed multiplications, take the difference of the products, subtracting the high halfword product from the low halfword product, and add the difference to a 32bit accumulate operand.
The Q bit is set if the accumulation overflows. Overflow cannot occur during the multiplications or the subtraction.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint32_t __SMLSDX  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
This function enables you to exchange the halfwords in the second operand, then perform two 16bit signed multiplications. The difference of the products is added to a 32bit accumulate operand.
The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications or the subtraction.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint64_t __SMLSLD  (  uint32_t  val1, 
uint32_t  val2,  
uint64_t  val3  
) 
This function It enables you to perform two 16bit signed multiplications, take the difference of the products, subtracting the high halfword product from the low halfword product, and add the difference to a 64bit accumulate operand. Overflow cannot occur during the multiplications or the subtraction. Overflow can occur as a result of the 64bit addition, and this overflow is not detected. Instead, the result wraps round to modulo2^{64}.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
unsigned long long __SMLSLDX  (  uint32_t  val1, 
uint32_t  val2,  
unsigned long long  val3  
) 
This function enables you to exchange the halfwords of the second operand, perform two 16bit multiplications, adding the difference of the products to a 64bit accumulate operand. Overflow cannot occur during the multiplications or the subtraction. Overflow can occur as a result of the 64bit addition, and this overflow is not detected. Instead, the result wraps round to modulo2^{64}.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
val3  accumulate value. 
uint32_t __SMMLA  (  int32_t  val1, 
int32_t  val2,  
int32_t  val3  
) 
This function enables you to perform a signed 32bit multiplications, adding the most significant 32 bits of the 64bit result to a 32bit accumulate operand.
val1  first operand for multiplication. 
val2  second operand for multiplication. 
val3  accumulate value. 
uint32_t __SMUAD  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed multiplications, adding the products together.
The Q bit is set if the addition overflows.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
uint32_t __SMUADX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed multiplications with exchanged halfwords of the second operand, adding the products together.
The Q bit is set if the addition overflows.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
uint32_t __SMUSD  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed multiplications, taking the difference of the products by subtracting the high halfword product from the low halfword product.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
uint32_t __SMUSDX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed multiplications, subtracting one of the products from the other. The halfwords of the second operand are exchanged before performing the arithmetic. This produces top * bottom and bottom * top multiplication.
val1  first 16bit operands for each multiplication. 
val2  second 16bit operands for each multiplication. 
uint32_t __SSAT16  (  uint32_t  val1, 
const uint32_t  val2  
) 
This function enables you to saturate two signed 16bit values to a selected signed range.
The Q bit is set if either operation saturates.
val1  two signed 16bit values to be saturated. 
val2  bit position for saturation, an integral constant expression in the range 1 to 16. 
uint32_t __SSAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the two halfwords of one operand and perform one 16bit integer subtraction and one 16bit addition.
The GE bits in the APSR are set according to the results.
val1  first operand for the addition in the low halfword, and the first operand for the subtraction in the high halfword. 
val2  second operand for the addition in the high halfword, and the second operand for the subtraction in the low halfword. 
uint32_t __SSUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit signed integer subtractions.
The GE bits in the APSR are set according to the results.
val1  first two 16bit operands of each subtraction. 
val2  second two 16bit operands of each subtraction. 
uint32_t __SSUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four 8bit signed integer subtractions.
The GE bits in the APSR are set according to the results.
val1  first four 8bit operands of each subtraction. 
val2  second four 8bit operands of each subtraction. 
uint32_t __SXTAB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to extract two 8bit values from the second operand (at bit positions [7:0] and [23:16]), signextend them to 16bits each, and add the results to the first operand.
val1  values added to the zeroextended to 16bit values. 
val2  two 8bit values to be extracted and zeroextended. 
uint32_t __SXTB16  (  uint32_t  val  ) 
This function enables you to extract two 8bit values from an operand and signextend them to 16 bits each.
val  two 8bit values in val[7:0] and val[23:16] to be signextended. 
uint32_t __UADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit unsigned integer additions.
The GE bits in the APSR are set according to the results.
val1  first two 16bit summands for each addition. 
val2  second two 16bit summands for each addition. 
uint32_t __UADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit integer additions. The GE bits of the APSR are set according to the results.
val1  first four 8bit summands for each addition. 
val2  second four 8bit summands for each addition. 
uint32_t __UASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the two halfwords of the second operand, add the high halfwords and subtract the low halfwords.
The GE bits in the APSR are set according to the results.
val1  first operand for the subtraction in the low halfword, and the first operand for the addition in the high halfword. 
val2  second operand for the subtraction in the high halfword and the second operand for the addition in the low halfword. 
uint32_t __UHADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two unsigned 16bit integer additions, halving the results.
val1  first two 16bit summands. 
val2  second two 16bit summands. 
uint32_t __UHADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit integer additions, halving the results.
val1  first four 8bit summands. 
val2  second four 8bit summands. 
uint32_t __UHASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the second operand, add the high halfwords and subtract the low halfwords, halving the results.
val1  first operand for the subtraction in the low halfword, and the first operand for the addition in the high halfword. 
val2  second operand for the subtraction in the high halfword, and the second operand for the addition in the low halfword. 
uint32_t __UHSAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the second operand, subtract the high halfwords and add the low halfwords, halving the results.
val1  first operand for the addition in the low halfword, and the first operand for the subtraction in the high halfword. 
val2  second operand for the addition in the high halfword, and the second operand for the subtraction in the low halfword. 
uint32_t __UHSUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two unsigned 16bit integer subtractions, halving the results.
val1  first two 16bit operands. 
val2  second two 16bit operands. 
uint32_t __UHSUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit integer subtractions, halving the results.
val1  first four 8bit operands. 
val2  second four 8bit operands. 
uint32_t __UQADD16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two unsigned 16bit integer additions, saturating the results to the 16bit unsigned integer range 0 < x < 2^{16}  1.
val1  first two 16bit summands. 
val2  second two 16bit summands. 
uint32_t __UQADD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit integer additions, saturating the results to the 8bit unsigned integer range 0 < x < 2^{8}  1.
val1  first four 8bit summands. 
val2  second four 8bit summands. 
uint32_t __UQASX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the second operand and perform one unsigned 16bit integer addition and one unsigned 16bit subtraction, saturating the results to the 16bit unsigned integer range 0 <= x <= 2^{16}  1.
val1  first two 16bit operands. 
val2  second two 16bit operands. 
uint32_t __UQSAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the second operand and perform one unsigned 16bit integer subtraction and one unsigned 16bit addition, saturating the results to the 16bit unsigned integer range 0 <= x <= 2^{16}  1.
val1  first 16bit operand for the addition in the low halfword, and the first 16bit operand for the subtraction in the high halfword. 
val2  second 16bit halfword for the addition in the high halfword, and the second 16bit halfword for the subtraction in the low halfword. 
uint32_t __UQSUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two unsigned 16bit integer subtractions, saturating the results to the 16bit unsigned integer range 0 < x < 2^{16}  1.
val1  first two 16bit operands for each subtraction. 
val2  second two 16bit operands for each subtraction. 
uint32_t __UQSUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit integer subtractions, saturating the results to the 8bit unsigned integer range 0 < x < 2^{8}  1.
val1  first four 8bit operands. 
val2  second four 8bit operands. 
uint32_t __USAD8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four unsigned 8bit subtractions, and add the absolute values of the differences together, returning the result as a single unsigned integer.
val1  first four 8bit operands for the subtractions. 
val2  second four 8bit operands for the subtractions. 
uint32_t __USADA8  (  uint32_t  val1, 
uint32_t  val2,  
uint32_t  val3  
) 
This function enables you to perform four unsigned 8bit subtractions, and add the absolute values of the differences to a 32bit accumulate operand.
val1  first four 8bit operands for the subtractions. 
val2  second four 8bit operands for the subtractions. 
val3  accumulation value. 
uint32_t __USAT16  (  uint32_t  val1, 
const uint32_t  val2  
) 
This function enables you to saturate two signed 16bit values to a selected unsigned range.
The Q bit is set if either operation saturates.
val1  two 16bit values that are to be saturated. 
val2  bit position for saturation, and must be an integral constant expression in the range 0 to 15. 
uint32_t __USAX  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to exchange the halfwords of the second operand, subtract the high halfwords and add the low halfwords.
The GE bits in the APSR are set according to the results.
val1  first operand for the addition in the low halfword, and the first operand for the subtraction in the high halfword. 
val2  second operand for the addition in the high halfword, and the second operand for the subtraction in the low halfword. 
uint32_t __USUB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform two 16bit unsigned integer subtractions.
The GE bits in the APSR are set according to the results.
val1  first two 16bit operands. 
val2  second two 16bit operands. 
uint32_t __USUB8  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to perform four 8bit unsigned integer subtractions. The GE bits in the APSR are set according to the results.
val1  first four 8bit operands. 
val2  second four 8bit operands. 
uint32_t __UXTAB16  (  uint32_t  val1, 
uint32_t  val2  
) 
This function enables you to extract two 8bit values from one operand, zeroextend them to 16 bits each, and add the results to two 16bit values from another operand.
val1  value added to the zeroextended to 16bit values. 
val2  two 8bit values to be extracted and zeroextended. 
uint32_t __UXTB16  (  uint32_t  val  ) 
This function enables you to extract two 8bit values from an operand and zeroextend them to 16 bits each.
val  two 8bit values in val[7:0] and val[23:16] to be signextended. 