2014-04-09 1 views
0

나는 안드로이드 전화 (NDK)에 대한 탄약 물리 엔진 라이브러리로 데모를 구축 중입니다. 2.81 버전에서 Bullet 물리 엔진은 암 네온 최적화를 지원하지만 사과 장치에만 적용됩니다. 내 질문은 어떻게 안드로이드에 대한 팔 네온을 활성화하는 것입니다? 아암 네온의 플래그 btScalar.h 파일에 정의 된 코드는 아래와 같다 : 우리는 코드에서 볼 수있는 바와 같이, 플래그 BT_USE_NEON는 그것의 상태를 정의안드로이드에 총알 물리 엔진 데모를위한 팔 네온 활성화

#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> 
      …… 

이 경우, 애플 장치 컴파일 이 코드를 삭제하고이 플래그를 혼자서 정의합니다. 컴파일 할 때 잘못된 정렬과 같은 오류가 발생합니다. vld1.f32 {d26},[r4:128].

데모에서 암 네온을 활성화하려면 어떻게해야합니까?

답변

0

나는 몇일 전 동일한 문제가 발생했습니다. 문제는 btVector3 (vld1q_f32_aligned_postincrement)에 정의 된 어셈블리 코드입니다. 내가 아는 한 [r3, : 128]과 같은 구문이 GAS에 사용됩니다. iOS 환경에서 사용되지만 확실하지는 않습니다. [% 1, # 128]로 수정하면 이러한 오류가 제거 될 수 있습니다. 그건 그렇고, 내 경험으로 보면 보통 보통 구현보다 느립니다. 나는 총알 네온 내장 함수가 안드로이드에 최적화되지 않았다고 생각한다. 반대편에 어셈블리 코드 (아마 최적화 됨)를 볼 수있다. (APPLE).

+0

대단히 감사합니다. – lujuemin