iPhone-mumb-interlinking - PullRequest
       5

iPhone-mumb-interlinking

1 голос
/ 15 января 2010

Если бы я понял, как использовать флаг компилятора -mthumb и -mno-thumb и более или менее понял, что он делает.

Но что делает флаг -mthumb-interlinking? когда это необходимо, и установлено ли оно для всего проекта, если я установил «compile for thumb» в настройках своего проекта?

спасибо за информацию!

Ответы [ 2 ]

1 голос
/ 15 января 2010

Откройте терминал и введите man gcc

Вы имеете в виду -mumb-interwork?

   -mthumb-interwork
       Generate code which supports calling between the ARM and Thumb
       instruction sets.  Without this option the two instruction sets
       cannot be reliably used inside one program.  The default is
       -mno-thumb-interwork, since slightly larger code is generated when
       -mthumb-interwork is specified.

Если это связано с конфигурацией сборки, вы сможете установить ее отдельно для каждой конфигурации, например «Release или Debug».

Почему вы хотите изменить эти настройки? Я знаю, что использование большого пальца позволяет сэкономить память, но достаточно ли этого в этом случае?

0 голосов
/ 28 сентября 2011

мое приложение использует оба кода: thumb и vfp, но я никогда специально установить флаг -thumb-interwork .. как это возможно?

Согласно справочной странице, без этого флажка наборы двух команд

нельзя надежно использовать внутри одной программы.

Это говорит "надежно"; поэтому без этой опции кажется, что они все еще могут быть смешаны в одной программе, но это может быть «ненадежно». Я думаю, что обычно смешивание обоих наборов инструкций работает, компилятор достаточно умен, чтобы понять, когда ему нужно переключиться с одного набора на другой. Однако могут быть пограничные случаи компилятор просто не понимает правильно, и он может не увидеть , что он должен переключать наборы команд здесь, вызывая сбой приложения (скорее всего, это потерпит крах). Эта опция генерирует специальный код, так что независимо от того, что делает ваш код, переключение всегда происходит правильно и надежно; недостатком является то, что этот дополнительный код необходим для каждой глобальной видимой функции и, следовательно, увеличивает двоичную сторону (я понятия не имею, может ли он также немного замедлить вызовы функций, лично я ожидал бы этого).

Обратите также внимание на следующие две настройки:

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

-mcaller-супер-межсетевой
Позволяет звонки через указатели функций (включая виртуальные функции) правильно выполнять независимо о том, был ли целевой код скомпилирован для Взаимодействует или нет. Есть небольшие накладные расходы в стоимости выполнения указателя на функцию, если эта опция включен.

Хотя я думаю, что они нужны вам только при создании библиотек для использования с другими проектами; но я не знаю точно. Обработка большого пальца в GCC определенно "недокументирована".

...