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

__smlsdx intrinsic

__smlsdx intrinsic

This intrinsic inserts an SMLSDX instruction into the instruction stream generated by the compiler. It enables you to exchange the halfwords in the second operand, then perform two 16-bit signed multiplications. The difference of the products is added to a 32-bit accumulate operand. The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications or the subtraction.

unsigned int__smlsdx(unsigned int val1, unsigned int val2, unsigned int val3)

where:

val1

holds the first halfword operands for each multiplication

val2

holds the second halfword operands for each multiplication

val3

holds the accumulate value.

The __smlsd intrinsic returns the difference of the product of each multiplication, added to the accumulate value.

Example:

unsigned int dual_multiply_diff_prods(unsigned int val1, unsigned int val2, unsigned int val3)
{
  unsigned int res;

    res = __smlsd(val1,val2,val3); /* p1 = val1[15:0] × val2[31:16]
                                      p2 = val1[31:16] × val2[15:0]
                                      res[31:0] = p1 - p2 + val3[31:0]
                                    */
    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.