【发布时间】:2017-09-17 04:24:18
【问题描述】:
我想从内存中加载 4 个无符号字符(8 位)并将它们扩展为有符号的短裤(16 位)。如何使用 NEON 内在函数做到这一点?
从 NEON 内部函数列表中,我一次只能看到 8 个无符号字符的加载选项。但我想做 4 个无符号字符。这甚至可能吗?
【问题讨论】:
-
你能以intrinisics的形式告诉我吗。我不想使用汇编。
我想从内存中加载 4 个无符号字符(8 位)并将它们扩展为有符号的短裤(16 位)。如何使用 NEON 内在函数做到这一点?
从 NEON 内部函数列表中,我一次只能看到 8 个无符号字符的加载选项。但我想做 4 个无符号字符。这甚至可能吗?
【问题讨论】:
我认为它看起来会像这样:
inline int16x4_t LoadAndConvert4(const uint8_t * p)
{
return vreinterpret_s16_u16(vget_low_u16(vmovl_u8(
vreinterpret_u8_u32(vdup_n_u32(*(uint32_t*)p)))));
}
或一步一步:
inline int16x4_t LoadAndConvert4(const uint8_t * p)
{
uint32_t u32 = *(uint32_t*)p;
uint32x2_t u32x2 = vdup_n_u32(a32);
uint8x8_t u8x8 = vreinterpret_u8_u32(a32x2);
uint16x8_t u16x8 = vmovl_u8(a8x8);
uint16x4_t u16x4 = vget_low_u16(a16x8);
return vreinterpret_s16_u16(u16x4);
}
【讨论】: