8

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

NEON 类型float32x4_t在使用 GCC 4.6 和 4.8 编译 C++ 代码时会给出“无效参数”错误,但是,如果编译为 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 类型都显示为 ? 在错误消息中,而非 NEON 类型正确显示。

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

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

4

1 回答 1

2

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

于 2013-12-21T19:08:10.510 回答