android — встроенные типы NEON работают в C, но выдают ошибку неверных аргументов в переполнении стека

У меня проблемы с использованием встроенных сборок 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.

8

Решение

В качестве обходного пути в Window / Preferences / C / C ++ / Code Analysis установите серьезность ошибок «Недопустимые аргументы» на предупреждение, чтобы эти поддельные ошибки не помешали запуску приложения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]