BF561 擁有兩個 16-bit MAC 單元,可在單週期內並行執行兩個 fract16 運算。VDSP 引入 fract2x16 類型,將兩個 fract16 打包於 32-bit 整數的高低半部,支援 SIMD 風格運算。
typedef int _raw32;
typedef _raw32 raw2x16;
typedef raw2x16 fract2x16;
fract2x16 compose_fr2x16(fract16 f1, fract16 f2):打包為 {f1, f2}(高 16 位為 f1,低 16 位為 f2)。底層呼叫 __builtin_compose_2x16。fract16 high_of_fr2x16(fract2x16 x):取高半部,對應 __builtin_extract_hi。fract16 low_of_fr2x16(fract2x16 x):取低半部,對應 __builtin_extract_lo。result = __builtin_compose_2x16(0x7FFF, 0x8000);
// 產生:
R0 = -32768; // 低半部
R0.H = 32767; // 高半部
[FP + 16] = R0;
除法器視窗需手動切換型別查看高低半部值。直接使用內建函數 __builtin_compose_2x16、__builtin_extract_hi/lo 可避免函數呼叫開銷。