2010-01-13 4 views
1

Как скомпилировать для Thumb и VFP код друг к другу?iPhone Thumb & VFP

на iPhone 2G/3G, я знаю, что инструкция Thumb не включает вычисления с плавающей запятой (на 3GS, Thumb2, очевидно, есть ..). Итак, что происходит, если один компилируется для большого пальца, но использует код VFP для вычислений с плавающей запятой?

я знаю, что это довольно Indepth - но, вероятно, кто-то здесь знает ... с

ответ

3

Я не уверен, что вы имеете в виду под «использовать VFP код». Вы имеете в виду код с плавающей запятой, который может быть скомпилирован для работы на VFP, или вы имеете в виду фактические инструкции по сборке VFP?

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

Если вы попытаетесь использовать инструкции по сборке VFP в режиме большого пальца, вы просто получите ошибку ассемблера.

Как вы отметили, 3GS поддерживает thumb2, который имеет, имеют доступ к регистрам VFP и NEON, поэтому эта ситуация не применяется.

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

+0

i означал фактические инструкции по сборке VFP. однако - какой параметр компилятора делает математику с плавающей запятой автоматически компилируемой для VFP? – genesys

+1

Добавил к моему ответу, что использование инструкций по сборке VFP в режиме большого пальца просто даст вам ошибку ассемблера. Кроме того, плавающая запятая скомпилирована в VFP по умолчанию (за исключением одиночной точности при таргетинге на 3GS, которая использует инструкции NEON). –

+0

hm. Я работаю над 3D-игрой, которая делает много математики (математические вычисления, векторные преобразования и т. Д.), Однако поворот большого пальца лишь немного снижает производительность, а не увеличивает ее. У вас есть идея, что это может мне сказать? – genesys

Смежные вопросы