12.34 __ssax intrinsic
This intrinsic inserts an
SSAX instruction into the instruction stream generated by the compiler.
you to exchange the two halfwords of one operand and perform one
16-bit integer subtraction and one 16-bit addition.
The GE bits in the APSR are set according to the results.
unsigned int __ssax(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
__ssax 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 = __ssax(val1,val2); /* res[15:0] = val1[15:0] + val2[31:16]
res[31:16] = val1[31:16] - val2[15:0]