12.51 __uqsax intrinsic
This intrinsic inserts a
UQSAX instruction into the instruction stream generated by the compiler.
you to exchange the halfwords of the second operand and perform
one unsigned 16-bit integer subtraction and one unsigned 16-bit
addition, saturating the results to the 16-bit unsigned integer
range 0 ≤ x ≤ 216 -
unsigned int __uqsax(unsigned int
, unsigned int
holds the first 16-bit operand for the addition
in the low halfword, and the first 16-bit operand for the subtraction
in the high halfword
holds the second 16-bit halfword for the addition
in the high halfword, and the second 16-bit halfword for the subtraction
in the low halfword.
__uqsax intrinsic returns:
The addition of the low halfword in the first operand
and the high halfword in the second operand, in the low halfword
of the return value.
The subtraction of the low halfword in the second
operand from the high halfword in the first operand, in the high
halfword of the return value.
The results are saturated to the 16-bit unsigned integer range
0 ≤ x ≤ 216 - 1.
unsigned int exchange_subtract_add(unsigned int val1, unsigned int val2)
unsigned int res;
res = __uqsax(val1,val2); /* res[15:0] = val1[15:0] + val2[31:16]
res[31:16] = val1[31:16] - val2[15:0]