Определите, является ли устройство ARM64

Я пытаюсь сделать настройку для iOS 7, чтобы, когда устройство ARM64, оно запускало одну версию, а когда это не так, запускало другую (поскольку float для 32-битной, а double для 64-битной (если у вас есть решение для этого дай мне знать.)

Так что это было бы так

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

person Mistah_Sheep    schedule 07.02.2014    source источник


Ответы (3)


Вы бы сделали следующее

#if __LP64__
    \\You're running on 64 bit
#else
    \\You're running on 32 bit
#endif
person Gavin    schedule 07.02.2014
comment
Это способ предикации вашего кода во время компиляции. При компиляции для arm64 (и 64-битного симулятора) будет определен LP64, и будет скомпилирован только этот код. Для armv7 он будет неопределенным и будет использоваться 32-битный код. - person Variable Length Coder; 08.02.2014

В среде arm64 указатель занимает 8 байт.

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

Глядя на заголовочный файл «arm_neon.h», я вижу, что он проверяет директиву препроцессора __arm64. Это на Xcode 6.1.

В дополнение к этому, некоторые встроенные функции ARM NEON, доступные в более старых (32-разрядных) архитектурах ARM, недоступны в ARM64 или заменены эквивалентами с немного другим именем.

В частности, vtbl2 заменяется на vtbl1q, потому что в базовой архитектуре больше внимания уделяется 128-битным регистрам NEON.

Если у вас есть ассемблерный код ARM NEON, который не компилируется под ARM64, попробуйте найти подобные изменения.

person rwong    schedule 06.12.2014