使用 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 = 300000000000000000000000000000001 = 1 所以这里的前 32 位(MSB)值为 3,接下来的 32 位(LSB)值为 1

first32_bit = 64bit_var>>32;
next32_bit = 64bit_var&0000000000000000000000000000000011111111111111111111111111111111;