
Сообщение от
Error404

Сообщение от
mastermind
Насколько я понимаю, она просто генерит ir-код используя доступные на процессоре операции. (т.е. полезно для быстрой реализации всяких умножений/делений, операций с разрядностью больше 8 и т.д.).
Вот это было бы очень здорово. Компилер нужен именно с поддержкой 32-битных типов (хотя бы целочисленных), ибо 8/16 битных С-компилеров для Z80/8080 и так пруд пруди.
Разобрался я с этим RTLIB.
Вообщем эта штука немного другое делает. Если в двух словах, то она для неподдерживаемых архитектурой команд вставляет вызовы функций с заданными именами. Т.е. можно будет написать библиотеку где будут эти функции и просто линковать скомпилированную программу с этой библиотекой. Например Z80 никак не поддерживает команду умножения и деления, а в llvm есть такие команды.
Код:
define i8 @test(i8 %a, i8 %b)
{
%res = mul i8 %a, %b
ret i8 %res
}
После компиляции получается вот что:
Код:
call _mathLib_MULi8
ret
Аргументы передаются в регистрах A, B. Функция возвращает результат в регистре A.
Однако llvm все же радует кое чем. Например если архитектура имеет только 16 битные регистры, то llvm сам умеет создавать цепочку команд для вычисления 32 битных (и более) чисел с помощью имеющихся регистров.