Size: a a a

Compiler Development

2020 January 15

VY

Vasiliy Yorkin in Compiler Development
Пример из compcert это хороший пример :)
источник

IJ

Igor 🐱 Jirkov in Compiler Development
По моему скромному опыту проще делать несколько ir и трансляцию между ними, чем сразу ассемблер из достаточно высокоуровенового языка. Особенно в toy project
источник

VY

Vasiliy Yorkin in Compiler Development
Да, кажется, что так и есть...
Спасибо большое, попробую разобраться как в compcert сделано. На первый взгляд действительно выглядит намного более низкоуровневым, чем мой этот IR
источник

MM

Mikhail Maltsev in Compiler Development
IR может быть высокоуровневым, типа high GIMPLE в GCC. На нем можно описывать исключения (как в  C++), области видимости, OpenMP (если нужен) и т.п. Тогда фронтендам не надо всю эту логику lowering-а дублировать
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Vasiliy Yorkin
Да, кажется, что так и есть...
Спасибо большое, попробую разобраться как в compcert сделано. На первый взгляд действительно выглядит намного более низкоуровневым, чем мой этот IR
наверняка есть более простые примеры, т.к. компсерт для индустрии + на Coq
источник

MM

Mikhail Maltsev in Compiler Development
Vasiliy Yorkin
Пока пишу генерацию IR, но скоро дойду и до кодогенерации. Начну с x64
Кстати, а цель - поиграться или сделать что-то для использования в production?
источник

VY

Vasiliy Yorkin in Compiler Development
Пока цель просто попытаться научиться основам. Параллельно учу кок, меня по сути интересуют те же самые темы, что и Xavier Leroy (судя по всему %))
источник

MM

Mikhail Maltsev in Compiler Development
Тогда лучше вместо x64 лучше взять что-то попроще.
источник

MM

Mikhail Maltsev in Compiler Development
Типа Arm ранних версий.
источник

VY

Vasiliy Yorkin in Compiler Development
Я хочу получить что-то более-менее настоящее на выходе. Потом хотел бы попробовать для RISC-V сделать (если вообще хоть что-то доделаю и запал не пройдёт после x64)
источник

VY

Vasiliy Yorkin in Compiler Development
Ну я уже начал для x64, наверное, поздно сворачивать, но если буду долго буксовать, то попробую глянуть на ARM, спасибо
источник

VY

Vasiliy Yorkin in Compiler Development
Просто я делаю по книге Аппеля и там было предложено 2 ISA: MIPS и SPARC. Я решил взять что-то более хардкорное в надежде найти параллели с тем, что изложено в книге и не застрять %)
источник

MM

Mikhail Maltsev in Compiler Development
Полезно параллельно посмотреть на другие архитектуры (хотя бы спеки: наборы команд, регистры, ABI), чтобы потом не вычищать x86-специфичый код из middle end
источник

VY

Vasiliy Yorkin in Compiler Development
Понял, постараюсь хотя бы поверхностно ознакомиться и с другими ISA
источник

MM

Mikhail Maltsev in Compiler Development
Vasiliy Yorkin
Просто я делаю по книге Аппеля и там было предложено 2 ISA: MIPS и SPARC. Я решил взять что-то более хардкорное в надежде найти параллели с тем, что изложено в книге и не застрять %)
MIPS кстати хорош тем, что для него есть удобные эмуляторы типа SPIM: на входе файл на ассемлере, на выходе результат исполнения. Не нужно писать ассемблер и libc
источник

VY

Vasiliy Yorkin in Compiler Development
У меня пока всё организовано так, что я (по идее!) оставил за собой возможность свободно пробовать другие архитектуры...
источник

VY

Vasiliy Yorkin in Compiler Development
Т.е. у меня есть интерфейс фрейма и его реализация для x64
источник

VY

Vasiliy Yorkin in Compiler Development
Все специфичные для x64 внутренности находятся внутри отдельного модуля. Т.е. я планирую и дальше поддерживать эти абстракции, это должно позволить мне поиграться с другими архитектурами. Да, нашёл эмулятор, спасибо
источник

VY

Vasiliy Yorkin in Compiler Development
Даже вот такое нашёл https://github.com/ShawnZhong/JsSpim %)
источник

DP

Dmitry Ponyatov in Compiler Development
Vasiliy Yorkin
Я хочу получить что-то более-менее настоящее на выходе. Потом хотел бы попробовать для RISC-V сделать (если вообще хоть что-то доделаю и запал не пройдёт после x64)
отладку на MSP430 или Cortex-M0/M1
источник