Перевести встроенный ассемблер Codewarrior в GCC Inline Assembler - PullRequest
0 голосов
/ 07 ноября 2019

Я работаю над задачей переместить большой проект из старой IDE Codewarrior в S32DS из NXP, в котором используется компилятор GCC 4.9. К сожалению, у меня большие проблемы с компиляцией встроенного ассемблерного кода в S32DS, так как грамматика встроенной ассемблирования сильно отличается от codewarrior для GCC. Любые идеи, чтобы решить эту проблему без переписать предложение за предложением? Любые инструменты быстрого перевода в виде ярлыка? Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2019

Ваш выбор включает в себя портирование на чистый C (часто лучше всего для встроенного asm, который был оптимизацией производительности для старых плохих компиляторов, но который современные компиляторы могут делать самостоятельно. Или который не относится к другому ISA).

В противном случае да, вам придется портировать либо на отдельные функции asm, либо на встроенный синтаксис asm GNU C. Автономные функции asm позволяют избежать необходимости правильно выполнять все ограничения и могут быть хорошим вариантом для больших блоков.


Преобразование asm в asm обычно не существует, особенно это не to GNU C inline asm. (Или, по крайней мере, я никогда не видел, чтобы кто-нибудь упоминал об переполнении стека).

Кстати, GCC4.9 довольно старый. GCC7 и 8 имеют некоторые новые приятные возможности оптимизации, например, объединение загрузки / хранения (несколько узких элементов структуры или массива загружаются / сохраняются с одной загрузкой или сохранением ширины полного регистра). Я бы рекомендовал начинать с текущей версии GCC, когда у вас еще нет работающей кодовой базы, поэтому нет риска изменений компилятора, вводящих регрессии.

Кроме того, GCC6 ввел операнды вывода флага из встроенного asm: условие переходаможет быть логическим выходом из asm.

...