我在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类型都显示为?在错误消息中,正确显示非NEON类型。
同样奇怪的是,只使用NEON类型作为返回值的函数(例如,vld1q_f32
和我的抽象包装器)不会出错。
我在GCC Explorer 4.6和4.5中尝试了相同的代码,并且没有错误,并且生成了正确和优化的程序集,但是,它不适用于Android NDK。
答案 0 :(得分:2)
作为一种变通方法,在Window / Preferences / C / C ++ / Code Analysis中,将“Invalid Arguments”错误的严重性设置为Warning,这样这些虚假错误不会阻止启动应用程序。