12.57 __usax intrinsic
This intrinsic inserts a
USAX instruction into the instruction stream generated by the compiler.
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.
unsigned int __usax(unsigned int
, unsigned int
holds the first operand for the addition in the
low halfword, and the first operand for the subtraction in the high
holds the second operand for the addition in the
high halfword, and the second operand for the subtraction in the
__usax 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.
Each bit in APSR.GE is set or cleared for each byte in the
return value, depending on the results of the operation. If
the return value, then:
unsigned int exchange_subtract_add(unsigned int val1, unsigned int val2)
unsigned int res;
res = __usax(val1,val2); /* res[15:0] = val1[15:0] + val2[31:16]
res[31:16] = val1[31:16] - val2[15:0]