Как сообщить компилятору GCC, что код должен генерироваться последовательно, то есть без переходов.
Я работаю над проектом, который встраивает встроенную сборку в исходный код C (или LLVM IR).
Моя реализация зависит от кода между встроенной сборкой, которая будет записана в исполняемый файл как есть.
Более формально, предположим, что у меня есть исходный код (C или LLVM IR):
.label_start: (inserted as inline assembly)
inline_assembly0
source_code0
source_code1
inline_assembly1
...
.label_end: (inserted as inline assembly)
...
Теперь это не должно быть скомпилировано как:
.jmp_target:
source_code1
inline_assembly1
...
.label_end: (inserted as inline assembly)
...
.label_start: (inserted as inline assembly)
inline_assembly0
source_code0
jmp jmp_target
т.е. код должен оставаться между метками без переупорядочения прыжков .label_start
и .label_end
.
Есть ли способ сообщить GCC, что все между двумя встроенными метками сборки должно оставаться «неповрежденным» без изменения порядка? Моя реализация зависит от этого.