Я не уверен, что вы подразумеваете под "использовать код VFP". Вы имеете в виду код с плавающей запятой, который может быть скомпилирован для запуска на VFP, или вы имеете в виду настоящие инструкции по сборке VFP?
Если вы компилируете в режиме большого пальца и используете с плавающей запятой, вызов функции будет выполняться для каждой операции с плавающей запятой в вашем коде. Эти вызовы функций (они будут иметь имена типа __muldf3vfp
) переключают режим в ARM, перемещают данные в регистры с плавающей запятой, выполняют операцию, возвращают данные обратно в целочисленные регистры и возвращают. Это большая работа для чего-то, что является всего лишь одной инструкцией, если вы компилируете в режиме ARM, поэтому не используйте большой палец в плавающем коде.
Если вы попытаетесь использовать инструкции по сборке VFP в режиме большого пальца, вы просто получите ошибку ассемблера.
Как вы заметили, 3GS поддерживает thumb2, который имеет доступ к регистрам VFP и NEON, поэтому эта ситуация неприменима.
Также обратите внимание, что переключение между большим пальцем и ARM-компиляцией может быть выполнено для каждого исходного файла, так что вы можете скомпилировать большую часть вашего проекта большим пальцем и использовать ARM для нескольких подпрограмм, которые, например, выполняют много операций с плавающей запятой. Если вы хотите написать ассемблерный код, вы можете переключаться между ARM и thumb для каждой функции.