氖中成对添加

时间:2015-05-18 17:42:37

标签: arm simd neon cortex-a

我想在霓虹灯中添加0001矢量int64x2_t矢量值。 我无法找到任何可以执行此功能的成对添加指令。

int64x2_t sum_64_2;
//I am expecting result should be.. 
//int64_t result = sum_64_2[0] + sum_64_2[1];
  • 霓虹灯中是否有任何指示符合此逻辑。

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,使用了额外的指令,但编译器可以做得更好。