Да, у вас нет FPU, поэтому с плавающей запятой необходимо выполнить математическую математику. Однако для этого есть два механизма, а один - в 11 раз быстрее, чем другой.
GCC target arm-linux-gnu обычно включает в себя настоящие команды с плавающей запятой в коде для первого FPU ARM, «FPA», теперь настолько редкого, что он отсутствует. Они вызывают незаконные ловушки команд, которые затем пойманы и эмулируются в ядре. Это очень медленно из-за контекстного переключателя.
-msoft-float вместо этого вставляет вызовы в библиотечные функции (в libgcc.a). Это позволяет избежать переключения в пространство ядра и в 11 раз быстрее, чем эмулированные инструкции FPA.
Вы не говорите, какую модель с плавающей запятой используете - возможно, вы уже создаете всю пользовательскую область с помощью -msoft-float, но, возможно, стоит проверить, что в ваших объектных файлах нет инструкций FPA. Вы можете проверить:
objdump -d file | grep '<space><tab>f' | less
где
file
- любой объектный файл, исполняемый файл или библиотека, которую выдает ваш компилятор. Все инструкции FPA начинаются с
f
, в то время как другие инструкции по ARM не выполняются. Это фактическое пространство и символы табуляции, и вам может потребоваться указать
<control-V><tab>
, чтобы получить символ табуляции за вашей оболочкой.
Если вы используете FPA insns, вам необходимо скомпилировать все свое пользовательское пространство с помощью -msoft-float.
Наиболее полное дальнейшее чтение по этим вопросам - http://wiki.debian.org/ArmEabiPort, которое в первую очередь связано с третьей альтернативой: с использованием компилятора arm-linux-gnueabi
, более новой альтернативы ABI, которая доступна из gcc-4.1.1 и далее и имеет разные характеристики. Дополнительную информацию см. В документе.
GCC 3.3 !? Вы понимаете, что им больше 5 лет? Будьте «настоящим программистом» и скомпилируйте свою собственную цепочку инструментов GCC 4.4.2! – LiraNuna
Я собрал для него целую цепочку инструментов GCC 4.1, но это кажется ужасно удачным или пропущенным, поэтому я вернулся к тому, что предоставил мне поставщик. – user21293
Не знаю, что такое «настоящий программист», но если вы измеряете недавние операции GCC, вы обнаружите, что для ARM, по крайней мере, 4.2 был локальным минимумом времени, затраченным на компиляцию, память, используемую для компиляции, размер результирующего объектного кода и время, которое должен выполнять объектный код для запуска. Начиная с 4.3 и далее, какой-то экспоненциальный рост во всех 4 наборах. – martinwguy