我在 q-register 中有 128 位数据。我想对这个 q 寄存器中的单个 16 位块求和,最终得到一个 16 位的最终总和(任何超过 16 位的进位都应该被添加到这个 16 位 num 的 LSB 中)。
我想要实现的是:
VADD.U16(一些 16 位变量){q0[0] q0[1] q0[2] ......... q0[7]}
但使用内在函数,
如果有人能给我一个算法,我将不胜感激。
我尝试使用成对加法,但我最终得到了一个相当笨拙的解决方案..
下面是它的外观:
int convert128to16(uint16x8_t data128){
uint16_t data16 = 0;
uint16x4_t ddata;
print16(data128);
uint32x4_t data = vpaddlq_u16(data128);
print32(data);
uint16x4_t data_hi = vget_high_u16(data);
print16x4(data_hi);
uint16x4_t data_low = vget_low_u16(data);
print16x4(data_low);
ddata = vpadd_u16( data_hi, data_low);
print16x4(ddata);
}
它仍然不完整且有点笨拙。任何帮助将不胜感激。