__shsax intrinsic

This intrinsic inserts a SHSAX 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 subtraction and one signed 16-bit addition, and halve the results.

unsigned int __shsax(unsigned int val1, unsigned int val2)

Where:

val1

holds the first halfword operands

val2

holds the second halfword operands.

The __shsax intrinsic returns:

Example:

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

    res = __shsax(val1,val2); /* res[15:0] = (val1[15:0] + val2[31:16]) >> 1
                                 res[31:16] = (val1[31:16] - val2[15:0]) >> 1
                               */
    return res;
}
Copyright © 2007-2008, 2011 ARM. All rights reserved.ARM DUI 0376C
Non-ConfidentialID061811