我正在尝试将一个char值数组加载到NEON寄存器中,然后将它们视为16位或32位整数值.所以像这样......
void SubVector(short* c, const unsigned char* a, const unsigned char* b, int n)
{
for(int i = 0; i < n; i++)
{
c[i] = (short)a[i] - (short)b[i];
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何加载数据.我应该将8位数据加载到通道中,然后将寄存器重新解释为短路吗?或加载和转换?什么是最快的方式?
有没有人有一个关于如何使用NEON内在函数做到这一点的例子?
谢谢!
NEON具有加法和减法指令,可以扩展8-> 16,16-> 32或32-> 64位的值.你可以这样做8次:
uint8x8_t u88_a, u88_b;
uint16x8_t u168_diff;
u88_a = vld1_u8(a); // load 8 unsigned chars from a[]
u88_b = vld1_u8(b); // load 8 unsigned chars from b[]
u168_diff = vsubl_u8(u88_a, u88_b); // calculate the difference and widen to 16-bits
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |