Я не уверен, что вы имеете в виду под «использовать VFP код». Вы имеете в виду код с плавающей запятой, который может быть скомпилирован для работы на VFP, или вы имеете в виду фактические инструкции по сборке VFP?
Если вы скомпилируете в режиме большого пальца и используете плавающую точку, вызов функции будет выполняться для каждой операции с плавающей запятой в вашем коде. Эти вызовы функций (у них будут такие имена, как __muldf3vfp
), переключите режим на ARM, переместите данные в регистры с плавающей запятой, выполните операцию, переместите данные обратно в целые регистры и верните. Это большая работа для чего-то, что является только одной инструкцией, если вы скомпилируете в режиме ARM, поэтому не используйте большой палец в float-интенсивном коде.
Если вы попытаетесь использовать инструкции по сборке VFP в режиме большого пальца, вы просто получите ошибку ассемблера.
Как вы отметили, 3GS поддерживает thumb2, который имеет, имеют доступ к регистрам VFP и NEON, поэтому эта ситуация не применяется.
Также обратите внимание, что переключатель между большим и ARM-компиляцией может быть выполнен в исходном файле, поэтому вы можете скомпилировать большую часть своего проекта под большим пальцем и использовать ARM для нескольких подпрограмм, которые выполняют, например, много с плавающей запятой. Если вы хотите написать код сборки, вы можете переключаться между ARM и большим пальцем на каждую функцию.
i означал фактические инструкции по сборке VFP. однако - какой параметр компилятора делает математику с плавающей запятой автоматически компилируемой для VFP? – genesys
Добавил к моему ответу, что использование инструкций по сборке VFP в режиме большого пальца просто даст вам ошибку ассемблера. Кроме того, плавающая запятая скомпилирована в VFP по умолчанию (за исключением одиночной точности при таргетинге на 3GS, которая использует инструкции NEON). –
hm. Я работаю над 3D-игрой, которая делает много математики (математические вычисления, векторные преобразования и т. Д.), Однако поворот большого пальца лишь немного снижает производительность, а не увеличивает ее. У вас есть идея, что это может мне сказать? – genesys