| |||

Home > Compiler-specific Features > Instruction intrinsics > ARMv6 SIMD intrinsics |

The ARM Architecture v6 Instruction Set Architecture adds over sixty SIMD instructions to ARMv6 for the efficient software implementation of high-performance media applications.

The ARM compiler supports intrinsics that map to the ARMv6
SIMD instructions. These intrinsics are available when compiling
your code for an ARMv6 architecture or processor. The following
list gives the function prototypes for these intrinsics. The function
prototypes given in the list describe the primitive or basic forms
of the ARMv6 instructions realized by the intrinsics. To obtain
the name of the basic instruction realized by an intrinsic, drop
the leading underscores (`__`

) from the intrinsic
name. For example, the `__qadd16`

intrinsic corresponds
to an ARMv6 `QADD16`

instruction.

Each ARMv6 SIMD intrinsic is guaranteed to be compiled into a single, inline, machine instruction for an ARM v6 architecture or processor. However, the compiler might use optimized forms of underlying instructions when it detects opportunities to do so.

The ARMv6 SIMD instructions can set the `GE[3:0]`

bits
in the *Application Program Status Register* (APSR).
The SIMD instructions might update these flags to indicate the “greater
than or equal to” status of each 8/16-bit slice of a SIMD operation.

The ARM compiler treats the `GE[3:0]`

bits
as a global variable. To access these bits from within your C or
C++ program, either:

access bits 16-19 of the APSR through a named register variable

use the

`__sel`

intrinsic to control a`SEL`

instruction.

unsigned int __qadd16(unsigned int, unsigned int) unsigned int __qadd8(unsigned int, unsigned int) unsigned int __qasx(unsigned int, unsigned int) unsigned int __qsax(unsigned int, unsigned int) unsigned int __qsub16(unsigned int, unsigned int) unsigned int __qsub8(unsigned int, unsigned int) unsigned int __sadd16(unsigned int, unsigned int) unsigned int __sadd8(unsigned int, unsigned int) unsigned int __sasx(unsigned int, unsigned int) unsigned int __sel(unsigned int, unsigned int) unsigned int __shadd16(unsigned int, unsigned int) unsigned int __shadd8(unsigned int, unsigned int) unsigned int __shasx(unsigned int, unsigned int) unsigned int __shsax(unsigned int, unsigned int) unsigned int __shsub16(unsigned int, unsigned int) unsigned int __shsub8(unsigned int, unsigned int) unsigned int __smlad(unsigned int, unsigned int, unsigned int) unsigned long long __smlald(unsigned int, unsigned int, unsigned long long) unsigned int __smlsd(unsigned int, unsigned int, unsigned int) unsigned long long __smlsld(unsigned int, unsigned int, unsigned long long) unsigned int __smuad(unsigned int, unsigned int) unsigned int __smusd(unsigned int, unsigned int) unsigned int __ssat16(unsigned int, unsigned int) unsigned int __ssax(unsigned int, unsigned int) unsigned int __ssub16(unsigned int, unsigned int) unsigned int __ssub8(unsigned int, unsigned int) unsigned int __sxtab16(unsigned int, unsigned int) unsigned int __sxtb16(unsigned int, unsigned int) unsigned int __uadd16(unsigned int, unsigned int) unsigned int __uadd8(unsigned int, unsigned int) unsigned int __uasx(unsigned int, unsigned int) unsigned int __uhadd16(unsigned int, unsigned int) unsigned int __uhadd8(unsigned int, unsigned int) unsigned int __uhasx(unsigned int, unsigned int) unsigned int __uhsax(unsigned int, unsigned int) unsigned int __uhsub16(unsigned int, unsigned int) unsigned int __uhsub8(unsigned int, unsigned int) unsigned int __uqadd16(unsigned int, unsigned int) unsigned int __uqadd8(unsigned int, unsigned int) unsigned int __uqasx(unsigned int, unsigned int) unsigned int __uqsax(unsigned int, unsigned int) unsigned int __uqsub16(unsigned int, unsigned int) unsigned int __uqsub8(unsigned int, unsigned int) unsigned int __usad8(unsigned int, unsigned int) unsigned int __usada8(unsigned int, unsigned int, unsigned int) unsigned int __usax(unsigned int, unsigned int) unsigned int __usat16(unsigned int, unsigned int) unsigned int __usub16(unsigned int, unsigned int) unsigned int __usub8(unsigned int, unsigned int) unsigned int __uxtab16(unsigned int, unsigned int) unsigned int __uxtb16(unsigned int, unsigned int)

*Registers*in the*Assembler Guide**SEL*in the*Assembler Guide*Chapter 5

*NEON and VFP Programming*in the*Assembler Guide*.