You copied the Doc URL to your clipboard.

__shasx intrinsic

This intrinsic inserts a SHASX instruction into the instruction stream generated by the compiler. It enables you to exchange the two halfwords of one operand, perform one signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results.

unsigned int __shasx(unsigned int val1, unsigned int val2)

Where:

val1

holds the first halfword operands

val2

holds the second halfword operands.

The __shasx intrinsic returns:

  • the halved 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 halved 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.

Example:

unsigned int exchange_add_subtract_halve(unsigned int val1, unsigned int val2)
{
  unsigned int res;

    res = __shasx(val1,val2); /* res[15:0] = (val1[15:0] - val2[31:16]) >> 1
                                 res[31:16] = (val1[31:16] - val2[15:0]) >> 1
                               */
    return res;
}

See also