DS5 Ultimate Edition отличается поведением при доступе к первому аргументу с плавающей точкой, переданному в вызов asm - PullRequest
0 голосов
/ 09 ноября 2018

Я использую DS5 Ultimate Edition для кодирования и выполнения ассемблера на 32-битной Cortex-A53. Из моей функции C я вызываю функцию asm. Обычная норма: когда из C-функции вызывается asm-функция и передаются аргументы, первый аргумент с плавающей запятой присутствует в регистре s0. Например, func_asm (float a, float * b); Первый аргумент с плавающей точкой «a» попадает в регистр s0, а аргумент «b» присутствует в регистре r0. Но в моем случае я получаю первый аргумент с плавающей точкой «a» в регистре r0 и «b» в регистре r1. Я использую make file build с опциями ниже --target = arm-arm-none-eabi -march = armv7-a -mcpu = cortex-a53 -mfpu = неон Пожалуйста, предложите, какую опцию нужно добавить, чтобы правильно получить первый аргумент с плавающей точкой в ​​регистре s0.

1 Ответ

0 голосов
/ 09 ноября 2018

Вам придется установить опцию hard / soft float для компилятора ARM (вилка Clang)

В GCC / Clang они выглядят следующим образом:

  • -mfloat-аби = жесткий
  • -mfloat-аби = softfp
  • -mfloat-аби = мягкая

трудно: это то, что вы ищете. Компилятор будет генерировать машинные коды, которые полностью используют VFP

softfp: наиболее часто используемая форма. Даже если VFP используется, передача параметров происходит через целочисленные регистры

soft: без использования VFP

Помните, что опция hard, которую вы намереваетесь использовать, не так часто используется И ваши двоичные файлы даже не будут ссылаться на другие, скомпилированные с опцией softfp/soft.

Я настоятельно рекомендую НЕ использовать опцию hard, если вы не знаете, что делаете.

...