2013-10-29 1 views
5

iPad에서 수백만 개의 32 비트 정수에서 MSB (Most Significant Bit)를 매우 빠르게 계산해야합니다. 저에게는 평범한 C로 작성된 MSB의 저의 (못생긴) 구현이 있습니다. ARM 프로세서는 CLZ (count leading zeroes) 하드웨어 명령을 가지고 있습니다.이 명령은 매우 유용합니다. ARM reference에 따르면 내장 C 함수 __CLZ가 있습니다. ARM 내장 함수의 지원을 Xcode 프로젝트에 추가하려면 어떻게해야합니까?iOS에서 ARM 내장 함수를 사용하는 방법?

P. 저는 NEON에서 하드웨어 CLZ에 액세스하는 방법을 찾았습니다 (arm_neon.h 포함).하지만 벡터로만 작동하기 때문에 필요한 것은 아닙니다.하지만 스칼라 MSB가 필요합니다.

+1

인라인 asm 코드를 사용할 수 없습니까? – tarmes

+0

인라인 asm을 작성하는 방법을 모르겠다 ;-) –

답변

4

4436 페이지의 ARM 내장 함수 이름이 ARM C language extensions 인 것을 발견했습니다. 일부는 Xcode에서 작동합니다. 이 예상대로, 31 인쇄 :

NSLog(@"%u", __builtin_clz(1)); 

주 :

  • 나는 애플의 문서에서 이러한 참조를 발견하지 않았습니다. 대부분의 Xcode는 LLVM 또는 CLANG에서 이러한 기능을 상속 받았습니다.
  • 이러한 기능을 사용하기 위해 특별한 헤더 나 프레임 워크를 포함 할 필요가 없습니다. Xcode IDE 자동 완성은 그것들에 대해 알지 못합니다.
  • 확장 목록의 몇 가지 기능 만 구현됩니다. 동일한 문서의 12-13 페이지에 따르면 두 개의 헤더 파일이 있어야합니다. 즉, NEON이 아닌 내장 함수의 경우 arm_acle.h이고 NEON 내장 함수의 경우 arm_neon.h입니다. Xcode에는 두 번째 파일 만 있지만 첫 번째 파일의 일부 함수는 다른 곳에서 선언되었습니다.
0

이것은 분명 할 수 있지만 ARM 전용 명령어를 사용하는 경우 iOS 시뮬레이터에서 앱을 실행할 수 없습니다. 시뮬레이터는 Mac의 기본 x86-64 하드웨어를 사용합니다.

컴파일러 지시문을 사용하여 ARM 명령을 사용하는 래퍼 함수를 ​​만들거나 지원이없는 경우 "못생긴"코드로 되돌릴 수 있습니다.

+0

시뮬레이터를 사용하지 않습니다. 코드에 CLZ를 어떻게 추가 할 수 있습니까? 나는''clz, CLZ, __clz, __builtin_clz__' 등의 함수를 추가하려고 시도했지만 어디에도 선언되지 않았다. 나는 또한 "grep -R"clz "/ Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain''을 시도했지만 NEON 및 x86 링크 만 발견했습니다. –

관련 문제