我正在使用针对Android手机(NDK)的子弹物理引擎库构建演示。 从2.81版本开始,Bullet物理引擎支持arm neon优化,但仅适用于Apple设备。 我的问题是如何为Android启用arm neon? 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].
我的演示如何启用手臂霓虹灯?
答案 0 :(得分:0)
前几天我遇到了同样的问题:) 问题是在btVector3(vld1q_f32_aligned_postincrement)中定义的汇编代码。据我所知,在RAS中使用了诸如[r3,:128]之类的语法 - 我想它在iOS环境中使用,但不确定。将其修改为[%1,#128]可能会删除这些错误。 顺便说一下,根据我的经验,它通常比简单的实现慢。我认为子弹霓虹内在函数没有针对android进行优化,因为你可以看到另一方面的汇编代码(可能是优化的)(定义为 APPLE )。