2013-10-29 29 views
5

iPad'deki milyonlarca 32 bit tam sayıdaki MSB'yi (en anlamlı bit) çok hızlı bir şekilde hesaplamam gerekiyor. Yavaş olan düz C'ye yazılan MSB'nin kendi (çirkin) uygulamasına sahibim. ARM işlemcileri, bunun için çok yararlı olabilecek CLZ (önde gelen sıfır sayısı) donanım komutuna sahiptir. ARM reference'a göre intrinsik C işlevi __CLZ vardır. Xcode projem için ARM intrinsic işlevlerini nasıl ekleyebilirim?iOS'ta ARM intrinsics nasıl kullanılır?

P.S. NEON'dan CLZ'e (arm_neon.h dahil) erişmenin yolunu bulmayı başardım, ama ihtiyacım olan şey bu değil, çünkü sadece vektörle çalışıyor, ama MSC'ye ihtiyacım var.

+1

Satır içi kod kodunu kullanamaz mısınız? – tarmes

+0

Satır içi yazmayı nasıl yazacağımı bilmiyorum ;-) –

cevap

4

ARM intrinsic functions isimlerini sayfa 44/ARM C language extensions'dan buldum. Bazıları Xcode'ta çalışıyor. Bu beklendiği gibi 31 yazdırır:

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

Notlar:

  • Apple docs bunların hiçbirini referansları bulamadı. Muhtemelen Xcode bu fonksiyonları LLVM veya CLANG'den devralmıştır.
  • Bu işlevleri kullanmak için herhangi bir özel başlık veya çerçeve eklemeniz gerekmez. Xcode IDE otomatik tamamlama, onları bilmiyor.
  • Yalnızca uzantı listesinden birkaç işlev uygulanır. Aynı belgenin 12-13. Sayfalarına göre iki başlık dosyası olmalıdır: NEON olmayanlar için arm_acle.h ve NEON intrinsics için arm_neon.h. Xcode sadece ikinci dosyaya sahiptir, ancak ilk dosyadaki bazı işlevler başka bir yerde bildirilmiştir.
0

Bu aşikar olabilir, ancak ARM'ye özgü yönergeler kullanırsanız, uygulamanızı iOS simülatöründe çalıştıramazsınız. Simülatör, Mac'inizin yerel x86-64 donanımını kullanır.

ARM komutunu kullanmak için bir derleyici yönergesini kullanan veya desteğiniz yoksa "çirkin" koda geri dönecek bir sarıcı işlevi yaratabilirsiniz.

+0

Simülatör kullanmıyorum. CLZ'yi kodlara nasıl ekleyebilirim? '' Clz, CLZ, __clz, __builtin_clz__'' vb. Fonksiyonlarını eklemeyi denedim, ancak sadece herhangi bir yerde ilan edilmiyorlar. Ayrıca grep -R "clz"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain'' denedim, ancak yalnızca NEON ve x86 bağlantılarını buldu –