iPhone Thumb & VFP - PullRequest
       6

iPhone Thumb & VFP

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

Как соотносятся код 'compile for Thumb' и VFP?

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

я знаю, что это довольно глубоко - но, возможно, кто-то здесь знает ... c

1 Ответ

3 голосов
/ 13 января 2010

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

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

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

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

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

...