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

NEON intrinsic types work in C but throw invalid arguments error in C++

本文关键字:参数 错误 C++ 无效 类型 工作 NEON 但在      更新时间:2023-10-16

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

当使用GCC 4.6和4.8编译C++代码时,像float32x4_t这样的NEON类型会给出"无效参数"错误,但是,如果编译为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: ? VectorAdd(?, ?) '

所有近地天体类型显示为?在错误消息中,而非近地天体类型显示正确。

同样奇怪的是,只使用NEON类型作为返回值的函数(例如,vld1q_f32和我的抽象包装器)不会出现错误。

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

作为一种解决方法,在Window/Preferences/C/C++/Code Analysis中,将"无效参数"错误的严重性设置为Warning,这样这些虚假错误就不会阻止启动应用程序。