Включить руку неон для демонстрации движка физика пули на 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).