>> А что это? -fdump-final-insns выводит внутреннее представление, которое похоже на LISP.
>> bp, sp, di - регистры "архитектуры Интел", без привязки к режиму (разрядности).
> Дык, Register Transfer Language
>> The last part of the compiler work is done on a low-level intermediate representation called Register Transfer Language. In this language, the instructions to be output are described, pretty much one by one, in an algebraic form that describes what the instruction does.
>> RTL is inspired by Lisp lists. It has both an internal form, То есть язык, описывающий машинные инструкции (целевой платформы?). В общем-то и так понятно, что для трансляции в машинный код мало смысла использовать мнемоники в виде текста, проще работать с деревом.
Имел ввиду, что для промежуточного представления может использоваться набор инструкций абстрактного процессора (например, стековый, где из регистров только аккумулятор -- что-то вроде Fort-машины). Вот это представление оптимизируется, а при генерации под целевую архитектуру верхушка стека заменяется реальными регистрами, в зависимости от их количества: st[0] -> eax, st[1] -> ebx и т.п.
> (DI тут кстати == "Double Integer mode represents an eight-byte integer")
> Трансформированный из промежуточного представления GIMPLE (в который, ЕМНИП, трансформируют
> код фронтенды).
> gcc -fdump-rtl-all даст тут более полную картинку.
> https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
>> GIMPLE is a three-address representation derived from GENERIC by breaking down GENERIC expressions into tuples of no more than 3 operands (with some exceptions like function calls). GIMPLE was heavily influenced by the SIMPLE IL used by the McCAT compiler project at McGill University, though we have made some different choices.
Вот это уже больше похоже.
> В общем, никаких "AT&T" или тем более "сразу в ASM" ;)