Включить руку неон для демонстрации движка физика пули на Android

Я создаю демо с библиотекой движка физики для телефонов Android (NDK). Начиная с версии 2.81, физический движок Bullet поддерживает оптимизацию неоновых рук, но только для устройств Apple. У меня вопрос как включить arm neon для android? Флаг для arm neon определен в файле btScalar.h, код такой:

#if (defined (__APPLE__) && (!defined (BT_USE_DOUBLE_PRECISION)))
   #if defined (__i386__) || defined (__x86_64__)
             #define BT_USE_SSE
             #define BT_USE_SSE_IN_AP
   #elif defined( __armv7__ )
             #ifdef __clang__
             #define BT_USE_NEON 1
             #if defined BT_USE_NEON && defined (__clang__)
             #include <arm_neon.h>
             ……

Как мы видим в коде, флаг BT_USE_NEON определяется в условии, что это скомпилировано для устройства Apple, если я удаляю этот код и определяю этот флаг самостоятельно, возникает некоторая ошибка при компиляции, что-то вроде плохого выравнивания--vld1.f32 {d26},[r4:128].

Что мне нужно сделать, чтобы моя демоверсия включила руку с неоном?

1 ответ

У меня были такие же проблемы несколько дней назад:) Проблема была в коде сборки, определенном в btVector3 (vld1q_f32_aligned_postincrement). Насколько я знаю, такой синтаксис, как [r3,:128], используется в GAS - я думаю, что он используется в среде iOS, но не уверен. Изменение его на [%1, #128] может удалить эти ошибки. Кстати, по моему опыту, это обычно медленнее, чем простая реализация. Я думаю, что встроенные неоновые маркеры не оптимизированы для Android, так как вы можете увидеть ассемблерный код (вероятно, оптимизированный) с другой стороны (определяется как APPLE).

Другие вопросы по тегам