交错两个64位NEON向量?

时间:2016-05-09 11:53:46

标签: c neon intrinsics

我正在研究SSE2到NEON的端口。 SSE代码执行以下操作:

int64x2_t a, b, c, d;
...
a = interleave_high64(b, interleave_low64(c, d));

它执行以下操作代替_mm_unpackhi_epi64_mm_unpacklo_epi64

static inline int64x2_t interleave_low64(int64x2_t a, int64x2_t b) {
    const int64x2x2_t result = vzip_s64(vget_low_s64(a), vget_low_s64(b));
    return vcombine_s64(result.val[0], result.val[1]);
}
static inline int64x2_t interleave_high64(int64x2_t a, int64x2_t b) {
    const int64x2x2_t result = vzip_s64(vget_high_s64(a), vget_high_s64(b));
    return vcombine_s64(result.val[0], result.val[1]);
}

我的第一个即时问题是,vzip_s64为什么会丢失(vzip_s32vzip_s16 are available)。或许,我应该使用什么呢?

我猜测手头有更大的模式,它甚至可以使用VSTR.2作为交错存储。我的第二个问题是,我应该做什么而不是三个或四个NEON内在函数?

0 个答案:

没有答案