NEON内部types在C中工作,但在C ++中抛出无效参数错误

我在Android NDK中使用NEON内部函数和内联汇编时遇到了问题。

当使用GCC 4.6和4.8编译C ++代码时,类似float32x4_t NEONtypesfloat32x4_t给出“无效参数”错误,但是,如果编译为C,则编译的代码会很好。

例如,下面是一些代码:

 inline float32x4_t VectorAdd(float32x4_t a, float32x4_t b) { return vaddq_f32(a, b); } 

我在这里得到两个错误:

  • 在函数本身: Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) ' Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) '
  • 函数被调用的地方: Invalid arguments ' Candidates are: ? VectorAdd(?, ?) ' Invalid arguments ' Candidates are: ? VectorAdd(?, ?) '

所有的NEONtypes都显示为? 在错误信息中,非NEONtypes正确显示。

另外奇怪的是,只使用NEONtypes作为返回值的函数(例如, vld1q_f32和我的抽象包装器)不会受到错误的影响。

我在GCC Explorer 4.6和4.5中尝试了相同的代码,并且没有错误,生成了正确和优化的程序集,但是它不适用于Android NDK。

Solutions Collecting From Web of "NEON内部types在C中工作,但在C ++中抛出无效参数错误"