使用 ARM Neon 内在函数从 64 位访问 32 位
Accessing 32bit from 64bit using ARM Neon intrinsics
如何使用 ARM Neon Intrinsics 从 64 位有符号整数访问低 32 位或高 32 位?另外,我想将这个提取的数据分配给另一个 32 位变量。可能吗?
static inline int32x2_t low32(int64x2_t in)
{
int32x2_t out;
out = vmovn_s64(in); // vqmovn for saturating
return out;
}
static inline int32x2_t high32(int64x2_t in)
{
int32x2_t out;
out = vshrn_n_s64(in, 32);
return out;
}
嘿,在这种情况下,您必须使用 64 位变量进行操作。
看看这个例子:
假设我们有一个有值的 64 位变量
0b0000000000000000000000000000001100000000000000000000000000000001
如果我们拆分上面的变量,那么我们将得到
00000000000000000000000000000011 = 3 和 00000000000000000000000000000001 = 1
所以这里的前 32 位(MSB)值为 3,接下来的 32 位(LSB)值为 1
first32_bit = 64bit_var>>32;
next32_bit = 64bit_var&0000000000000000000000000000000011111111111111111111111111111111;
如何使用 ARM Neon Intrinsics 从 64 位有符号整数访问低 32 位或高 32 位?另外,我想将这个提取的数据分配给另一个 32 位变量。可能吗?
static inline int32x2_t low32(int64x2_t in)
{
int32x2_t out;
out = vmovn_s64(in); // vqmovn for saturating
return out;
}
static inline int32x2_t high32(int64x2_t in)
{
int32x2_t out;
out = vshrn_n_s64(in, 32);
return out;
}
嘿,在这种情况下,您必须使用 64 位变量进行操作。 看看这个例子: 假设我们有一个有值的 64 位变量 0b0000000000000000000000000000001100000000000000000000000000000001
如果我们拆分上面的变量,那么我们将得到
00000000000000000000000000000011 = 3 和 00000000000000000000000000000001 = 1 所以这里的前 32 位(MSB)值为 3,接下来的 32 位(LSB)值为 1
first32_bit = 64bit_var>>32;
next32_bit = 64bit_var&0000000000000000000000000000000011111111111111111111111111111111;