Keil Logo Arm Logo

Technical Support

On-Line Manuals

Compiler Reference Guide

Conventions and Feedback Introduction Compiler Command-line Options Language Extensions Compiler-specific Features C and C++ Implementation Details Semihosting ARMv6 SIMD Instruction Intrinsics ARMv6 SIMD intrinsics by prefix ARMv6 SIMD intrinsics, summary descriptions, byte ARMv6 SIMD intrinsics, compatible processors and a ARMv6 SIMD instruction intrinsics and APSR GE flag __qadd16 intrinsic __qadd8 intrinsic __qasx intrinsic __qsax intrinsic __qsub16 intrinsic __qsub8 intrinsic __sadd16 intrinsic __sadd8 intrinsic __sasx intrinsic __sel intrinsic __shadd16 intrinsic __shadd8 intrinsic __shasx intrinsic __shsax intrinsic __shsub16 intrinsic __shsub8 intrinsic __smlad intrinsic __smladx intrinsic __smlald intrinsic __smlaldx intrinsic __smlsd intrinsic __smlsdx intrinsic __smlsld intrinsic __smlsldx intrinsic __smuad intrinsic __smuadx intrinsic __smusd intrinsic __smusdx intrinsic __ssat16 intrinsic __ssax intrinsic __ssub16 intrinsic __ssub8 intrinsic __sxtab16 intrinsic __sxtb16 intrinsic __uadd16 intrinsic __uadd8 intrinsic __uasx intrinsic __uhadd16 intrinsic __uhadd8 intrinsic __uhasx intrinsic __uhsax intrinsic __uhsub16 intrinsic __uhsub8 intrinsic __uqadd16 intrinsic __uqadd8 intrinsic __uqasx intrinsic __uqsax intrinsic __uqsub16 intrinsic __uqsub8 intrinsic __usad8 intrinsic __usada8 intrinsic __usax intrinsic __usat16 intrinsic __usub16 intrinsic __usub8 intrinsic __uxtab16 intrinsic __uxtb16 intrinsic Via File Syntax Standard C Implementation Definition Standard C++ Implementation Definition C and C++ Compiler Implementation Limits

Compiler Reference Guide

__uadd8 intrinsic

__uadd8 intrinsic

This intrinsic inserts a UADD8 instruction into the instruction stream generated by the compiler. It enables you to perform four unsigned 8-bit integer additions.

The GE bits in the APSR are set according to the results.

unsigned int __uadd8(unsigned int val1, unsigned int val2)

where:

val1

holds the first four 8-bit summands for each addition

val2

holds the second four 8-bit summands for each addition.

The __uadd8 intrinsic returns:

  • the addition of the first bytes in each operand, in the first byte of the return value

  • the addition of the second bytes in each operand, in the second byte of the return value

  • the addition of the third bytes in each operand, in the third byte of the return value

  • the addition of the fourth bytes in each operand, in the fourth byte 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 res is the return value, then:

  • if res[7:0] ≥ 0x100 then APSR.GE[0] = 1 else 0

  • if res[15:8] ≥ 0x100 then APSR.GE[1] = 1 else 0

  • if res[23:16] ≥ 0x100 then APSR.GE[2] = 1 else 0

  • if res[31:24] ≥ 0x100 then APSR.GE[3] = 1 else 0.

Example:

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

    res = __uadd8(val1,val2); /* res[7:0] = val1[7:0] + val2[7:0]
                                 res[15:8] = val1[15:8] + val2[15:8]
                                 res[23:16] = val1[23:16] + val2[23:16]
                                 res[31:24] = val1[31:24] + val2[31:24]
                               */
    return res;
}

Show/hideSee also

Copyright © 2007-2008, 2011-2012 ARM. All rights reserved.ARM DUI 0376D
Non-ConfidentialID062912

Keil logo

Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.