2014-02-07 41 views
3

我正在嘗試對iOS 7進行調整,以便設備是ARM64時運行一個版本,當它不運行時它運行另一個版本(因爲float是32位,double是爲64(如果你有一個解決方案,讓我知道。)確定設備是否是ARM64

所以它會是這樣

if ARM64 { 
    \\run double code 
} 
else { 
    \\run float code 
} 

回答

9

你會做以下

#if __LP64__ 
    \\You're running on 64 bit 
#else 
    \\You're running on 32 bit 
#endif 
+0

並把代碼裏面的? –

+4

這是預測代碼的編譯時方式。當你爲arm64(和64位模擬器)編譯時,__LP64__將被定義,只有那個代碼將被編譯。對於armv7,它將是未定義的,將使用32位代碼。 –

1

在arm64環境,指針取8字節,

- (BOOL)isArm64 
{ 
    static BOOL arm64 = NO ; 
    static dispatch_once_t once ; 
    dispatch_once(&once, ^{ 
     arm64 = sizeof(int *) == 8 ; 
    }); 
    return arm64 ; 
} 
0

查看「arm_neon.h」頭文件,我可以看到它正在檢查預處理器指令__arm64。這是在Xcode 6.1上。除此之外,舊版ARM(32位)體系結構中可用的某些ARM NEON內部函數在ARM64上不可用,或者被替換爲稍有不同名稱的等價物。

特別是,vtbl2被替換爲vtbl1q,因爲底層體系結構更強調128位NEON寄存器。

如果您有一些不能在ARM64下編譯的ARM NEON彙編代碼,請嘗試查找這樣的更改。

相關問題