У меня проблемы с использованием встроенных сборок NEON и встроенной сборки в Android NDK.
Неоновые типы как float32x4_t
выдает ошибку «неверные аргументы» при компиляции кода C ++ с GCC 4.6 и 4.8, однако, код компилируется нормально, если компилируется как 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.
В качестве обходного пути в Window / Preferences / C / C ++ / Code Analysis установите серьезность ошибок «Недопустимые аргументы» на предупреждение, чтобы эти поддельные ошибки не помешали запуску приложения.
Других решений пока нет …