我想在霓虹灯中添加00
和01
矢量int64x2_t
矢量值。
我无法找到任何可以执行此功能的成对添加指令。
int64x2_t sum_64_2;
//I am expecting result should be..
//int64_t result = sum_64_2[0] + sum_64_2[1];
答案 0 :(得分:0)
你可以用两种方式写它。这个明确使用NEON VADD.I64
指令:
int64x1_t f(int64x2_t v)
{
return vadd_s64 (vget_high_s64 (v), vget_low_s64 (v));
}
并且以下一个依赖于编译器在使用NEON和一般整数指令集之间正确选择。 GCC 4.9在这种情况下做的是正确的,但其他编译器可能没有。
int64x1_t g(int64x2_t v)
{
int64x1_t r;
r=vset_lane_s64(vgetq_lane_s64(v, 0) + vgetq_lane_s64(v, 1), r, 0);
return r;
}
以ARM为目标时,代码生成效率很高。对于AArch64,使用了额外的指令,但编译器可以做得更好。