__smlsldx コンパイラ組み込み関数

このコンパイラ組み込み関数を使用して、コンパイラによって生成される命令ストリームに SMLSLDX 命令を挿入します。第 2 オペランドのハーフワードを交換した上で、2 つの 16 ビット乗算を実行し、その積の差を 64 ビット累算オペランドに加することができます。乗算中も減算中もオーバーフローが発生することはありません。オーバーフローは、64 ビット加算の結果として発生する可能性があります。このオーバーフローは検出されません。264 を法(モジュロ)として結果がラップアラウンドされます。

unsigned long long__smlsldx(unsigned int val1, unsigned int val2, unsigned long long val3)

各項目には以下の意味があります。

val1

それぞれの乗算の第 1 オペランドとなるハーフワードを保持します。

val2

それぞれの乗算の第 2 オペランドとなるハーフワードを保持します。

val3

累算値を保持します。

__smlsld コンパイラ組み込み関数は、各乗算の積の差を累算値に加算して返します。

例:

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

    res = __smlsld(val1,val2,val3); /* p1 = val1[15:0] ラ val2[31:16]
                                       p2 = val1[31:16] ラ val2[15:0]
                                       res[63:0] = p1 - p2 + val3[63:0]
                                     */
    return res;
}

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711