Преобразование IRVM IRV в сборку NASM - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь преобразовать весь пакет ИК-кода llvm в код сборки, который работает на NASM. Я не очень знакомая сборка или llvm IR. Интересно, есть ли какой-нибудь транспортер / ассемблер / инструменты, которые могут помочь мне в этом, или есть ли такие инструменты в наличии.

1 Ответ

1 голос
/ 14 апреля 2020

LLVM-IR еще нужно скомпилировать. Сделайте это, например, с clang -c -O3 -march=native -ffast-math, затем разберите с помощью дизассемблера с синтаксисом NASM, например, Agner Fog's objconv, который производит вывод, который можно собрать. Как разобрать двоичный исполняемый файл в Linux, чтобы получить код сборки? .

Compile -> disassemble не подходит для сохранения имен меток и символов.

Если вы имеете в виду рукописный LLVM-IR в поддерживаемом NASM от руки, то я думаю, что простота переноса будет зависеть от того, меньше ли число регистров, используемых кодом, чем 16; В x86-64 имеется только 15 целочисленных регистров общего назначения, не включая указатель стека.

Если LLVM-IR использует больше, вам необходимо решить, какие «переменные» следует пролить / перезагрузить в / из стека (и когда, если вы не просто оставляете некоторые переменные постоянно в стеке, а другие постоянно в регистрах).

...