6.45.6 Размер asm-кода
Некоторые целевые платформы требуют, чтобы GCC отслеживал размер каждой инструкции, используемой для генерации корректного кода. Поскольку окончательная длина кода, сгенерированного инструкцией asm, известна только ассемблеру, GCC должен оценить ее размер. Для этого он подсчитывает количество инструкций в шаблоне asm и умножает это число на длину самой длинной инструкции, поддерживаемой процессором. (При подсчете количества инструкций предполагается, что любая встречающаяся новая строка или любой другой разделитель инструкций, поддерживаемый ассемблером — обычно ‘;’ — обозначает конец инструкции.)
Обычно оценки GCC достаточны для генерации корректного кода, но компилятор может быть сбит с толку, если вы используете псевдоинструкции или ассемблерные макросы, которые расширяются на несколько реальных инструкций, или если вы используете ассемблерные директивы, которые занимают больше места в объектном файле, чем требуется для одной инструкции. Если это произойдет, ассемблер может выдать сообщение об ошибке, говорящее о том, что метка недостижима.
Этот размер также используется для принятия решений о встраивании. Если вы используете asm inline вместо просто asm, то для целей встраивания размер asm принимается как минимальный размер, игнорируя количество инструкций, которое GCC считает.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/Size-of-an-asm.html