VDSP 提供三種 fract16 乏法內建函數,對應不同捨入/飽和策略,均單週期完成。
__builtin_mult_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L (T) // 截斷
// R0 = R0.L (X)
(T) 尾綴:有符號分數乘法,截斷於 bit 16,不捨入,飽和至 1.15 精度。結果範圍 [-1, 1-2^-15]。
__builtin_multr_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L // 無尾綴,預設捨入
// R0 = R0.L (X)
捨入由 ASTAT 中 RND_MOD 位控制(偏向/無偏向捨入)。與截斷模式最大差值 2^-15。
__builtin_multu_fr1x16(a, b)
// 組合語言:R0.L = R0.L * R1.L (FU) // 無符號分數
// R0 = R0.L (X)
(FU):0.16 x 0.16 → 0.32,無位移修正,捨入後飽和至 0.16 精度。範圍 [0, 1-2^-16]。非標準 fract16 格式,文檔未記載。
multr(捨入),特定演算法需截斷用 mult,無符號運算用 multu。