| |||
| Home > ARMv6 SIMD Instruction Intrinsics > __sasx intrinsic | |||
This intrinsic 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.
unsigned int __sasx(unsigned intval1, unsigned intval2)
Where:
val1holds the first operand for the subtraction in the low halfword, and the first operand for the addition in the high halfword
val2holds the second operand for the subtraction in the high halfword, and the second operand for the addition in the low halfword.
The __sasx intrinsic returns:
the subtraction of the high halfword in the second operand from the low halfword in the first operand, in the low halfword of the return value
the addition of the high halfword in the first operand and the low halfword in the second 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 is
the return value, then:res
if [15:0]
≥ 0 then APSR.GE[1:0] = 11 else 00res
if [31:16]
≥ 0 then APSR.GE[3:2] = 11 else 00.res
Example:
unsigned int exchange_subtract_add(unsigned int val1, unsigned int val2)
{
unsigned int res;
res = __sasx(val1,val2); /* res[15:0] = val1[15:0] - val2[31:16]
res[31:16] = val1[31:16] + val2[15:0]
*/
return res;
}
Instruction summary in the Assembler Reference
Parallel add and subtract in the Assembler Reference.