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

Tri*_*g3l 8 c++ android intrinsics neon android-ndk

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

float32x4_t在使用GCC 4.6和4.8编译C++代码时,NEON类型会产生"无效参数"错误,但是,如果编译为C,则代码编译正常.

例如,这里有一些代码:

inline float32x4_t VectorAdd(float32x4_t a, float32x4_t b)
{
  return vaddq_f32(a, b);
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到两个错误:

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

所有NEON类型都显示为?在错误消息中,正确显示非NEON类型.

同样奇怪的是,只使用NEON类型作为返回值的函数(例如,vld1q_f32我的抽象包装器)不会受到错误的影响.

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

小智 2

作为解决方法,在“窗口”/“首选项”/“C/C++”/“代码分析”中,将“无效参数”错误的严重性设置为“警告”,以便这些虚假错误不会阻止启动应用程序。