C 交错两个64位NEON向量?
我正在研究SSE2到NEON的端口。SSE代码执行以下操作:C 交错两个64位NEON向量?,c,neon,intrinsics,C,Neon,Intrinsics,我正在研究SSE2到NEON的端口。SSE代码执行以下操作: int64x2\u t a、b、c、d; ... a=交织高64(b,交织低64(c,d)); 它执行以下操作来代替\u mm\u unpachi\u epi64和\u mm\u unpaclo\u epi64: 静态内联int64x2\u t交织低64(int64x2\u t a,int64x2\u t b){ const int64x2x2_t result=vzip_s64(vget_low_s64(a),vget_low_s
int64x2\u t a、b、c、d;
...
a=交织高64(b,交织低64(c,d));
它执行以下操作来代替\u mm\u unpachi\u epi64
和\u mm\u unpaclo\u epi64
:
静态内联int64x2\u t交织低64(int64x2\u t a,int64x2\u t b){
const int64x2x2_t result=vzip_s64(vget_low_s64(a),vget_low_s64(b));
返回vcombine_s64(result.val[0],result.val[1]);
}
静态内联int64x2\u t交织高64(int64x2\u t a、int64x2\u t b){
const int64x2x2_t result=vzip_s64(vget_high_s64(a),vget_high_s64(b));
返回vcombine_s64(result.val[0],result.val[1]);
}
我的第一个直接问题是,为什么vzip\u s64
缺失(尽管vzip\u s32
和vzip\u s16
)。或者,我应该用什么来代替它
我猜有一个更大的模式在手,它甚至可能使用
VSTR.2
作为一个集成存储。我的第二个问题是,我应该做什么来代替三个或四个NEON内部函数?vzip\u s64
将两个64位元素“交错”到128位向量中,这已经做得很好了;)谢谢@Notlikethat-所以我很清楚(原谅我的无知)。。。我只需要interleave_low64{return vcombine_s64(vget_low_s64(a),vget_low_s64(b))}
。对吗?