12.24 __smlaldx コンパイラ組み込み関数

このコンパイラ組み込み関数を使用して、コンパイラによって生成される命令ストリームに SMLALDX 命令を挿入します。

第 2 オペランドのハーフワードを交換した上で、2 つの符号付き 16 ビット乗算を実行し、その両方の結果を 64 ビット累算オペランドに加算することができます。オーバーフローは、64 ビット加算の結果としてのみ発生する可能性があります。このオーバーフローは、発生しても検出されません。264 を法(モジュロ)として結果がラップアラウンドされます。

構文

unsigned long long __smlaldx(unsigned int val1 , unsigned int val2 , unsigned long long val3 )
各項目には以下の意味があります。
val1
それぞれの乗算の第 1 オペランドとなるハーフワードを保持します。
val2
それぞれの乗算の第 2 オペランドとなるハーフワードを保持します。
val3
累算値を保持します。

戻り値

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

unsigned int dual_multiply_accumulate(unsigned int val1, unsigned int val2, unsigned int val3)
{
    unsigned int res;
    res = __smlald(val1,val2,val3); /* p1 = val1[15:0] × val2[31:16]
                                       p2 = val1[31:16] × val2[15:0]
                                       sum = p1 + p2 + val3[63:32][31:0]
                                       res[63:32] = sum[63:32]
                                       res[31:0] = sum[31:0]
                                     */
    return res;
}
関連する参考文書
10.153 ARMv6 SIMD コンパイラ組み込み関数
関連情報
SMLALDX
ARM 命令と Thumb 命令の概要
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.