Ваш выбор включает в себя портирование на чистый C (часто лучше всего для встроенного asm, который был оптимизацией производительности для старых плохих компиляторов, но который современные компиляторы могут делать самостоятельно. Или который не относится к другому ISA).
В противном случае да, вам придется портировать либо на отдельные функции asm, либо на встроенный синтаксис asm GNU C. Автономные функции asm позволяют избежать необходимости правильно выполнять все ограничения и могут быть хорошим вариантом для больших блоков.
Преобразование asm в asm обычно не существует, особенно это не to GNU C inline asm. (Или, по крайней мере, я никогда не видел, чтобы кто-нибудь упоминал об переполнении стека).
Кстати, GCC4.9 довольно старый. GCC7 и 8 имеют некоторые новые приятные возможности оптимизации, например, объединение загрузки / хранения (несколько узких элементов структуры или массива загружаются / сохраняются с одной загрузкой или сохранением ширины полного регистра). Я бы рекомендовал начинать с текущей версии GCC, когда у вас еще нет работающей кодовой базы, поэтому нет риска изменений компилятора, вводящих регрессии.
Кроме того, GCC6 ввел операнды вывода флага из встроенного asm: условие переходаможет быть логическим выходом из asm.