Подтвердить что ты не робот

Есть ли способ скомпилировать ARM, а не Thumb в Xcode 4?

Apple рекомендует компилировать для ARM вместо большого пальца, если происходит много операций с плавающей запятой. Мое приложение - это почти одна операция с плавающей запятой.

Вот что они говорят в руководстве по разработке приложений для iOS:

iOS-устройства поддерживают два набора инструкций, ARM и Thumb. Xcode использует Инструкции Thumb по умолчанию, поскольку использование Thumb обычно уменьшает размер кода примерно на 35 процентов относительно ARM. Приложения, которые расширенный код с плавающей запятой может работать лучше, если они используют ARM а не Thumb. Вы можете отключить Thumb для своего приложение, поэтому оно компилируется для ARM, устанавливая Compile for Thumb установите значение "Нет".

Однако в настройках моей сборки я не могу найти параметр "Компиляция для большого пальца". Они переименовали его? Или это недоступно сейчас с Xcode 4?

4b9b3361

Ответ 1

Во-первых, совет не компилировать для набора команд Thumb для повышения производительности с плавающей запятой действительно применим только к старым устройствам ARMv6.

Аппаратное обеспечение ARMv7 (iPhone 3G S и более новое, включая все iPads) использует более эффективный набор команд Thumb-2, который не страдает от подобных замеров с плавающей запятой. Для сборки ARMv7 рекомендуется почти во всех случаях создавать для Thumb. Я подробно расскажу об этом в своем ответе здесь.

Возможно, поэтому этот параметр компилятора больше не отображается как общий параметр, потому что устройства ARMv7 являются подавляющим большинством устройств iOS.

Если вы хотите сделать это только для своих ARMv6-сборников, вы можете перейти к своим настройкам сборки и мыши над опцией "Другие флаги C". Нажмите кнопку "Маленький плюс", которая отображается справа от этой опции, и добавьте условие для архитектуры ARMv6. Сделайте это еще раз, чтобы создать его для архитектуры ARMv7. В архитектуре ARMv6 добавьте дополнительный флаг компилятора -mno-thumb (как предлагает Кевин).

Вы должны получить что-то похожее на следующее:

Build settings for ARMv6

Я делаю это в одном из своих приложений, потому что я видел повышение производительности на старых устройствах ARMv6 с этим. Тем не менее, еще одно из моих приложений было медленнее, если вы не создавали Thumb на ARMv6, так что вам нужно сначала профилировать его.

Кроме того, есть в настоящее время ошибка в LLVM Compiler 3.0, которая поставляется с Xcode 4.2 (с тех пор она была исправлена ​​в 4.2.1, из того, что я слышу), где вычисления с плавающей запятой компилируются неправильно под Thumb для ARMv6. Если вы используете эту конкретную версию Xcode, вам нужно сделать это для правильного поведения на старых устройствах.

Ответ 2

Я не знаю, предполагается ли "компиляция для большого пальца" в Xcode 4, но вы всегда можете добавить -mno-thumb в настройку сборки Другие флаги C.

Ответ 3

Относительно вашего оригинального вопроса: я заметил, что "Компиляция для большого пальца" (в разделе "Генерация кода" ваших "параметров сборки проекта" ) в Xcode 4.2.1 доступна только в том случае, если вы используете LLVM GCC 4.2 (если в "Компилятор для C/С++/ Objective-C" )!

При компиляции с Apple LLVM 3.0 вы не найдете опцию "Компиляция для большого пальца". Но, как уже сказал Брэд, вы можете поменять "Other C Flags", чтобы отключить режим Thumb.

Еще один интересный момент: я использую источник слияния sqlite в моем проекте (мне нужен fts - полный текстовый поиск), и после компиляции с LLVM 3.0 у меня были странные и довольно случайные сбои на устройствах armv6 всякий раз, когда вы обращались к базе данных: из-за того, что режим Thumb не отключен при компиляции для устройств armv6.