Страница 1 из 1

Кодогенерация под различные архитектуры

СообщениеДобавлено: 20.08.2012 (Пн) 21:14
FireFenix
Собственно давно мучает вопрос:
Вот скажем, после некоторых действий пользователя и ограничений архитектуры, получена последовательность действий представленная в виде регистронезависимых логических/арифметических/др. команд.
Как правильно описать архитектуру процессора и адаптировать логические последовательности в машинный код?

Вот для распределения регистров, есть метод "Раскраска графа". Существуют ли похожие методы для адаптации логических последовательностей к конвееру и архитектуре процессора?

Re: Кодогенерация под различные архитектуры

СообщениеДобавлено: 20.08.2012 (Пн) 22:10
Хакер
Не понял.Ты компилятор что-ли свой пишешь?
По идее так: берёшь набор архитектур, анализируешь их, придумываешь один архитектуро независимый IL, делаешь для каждой архитектуры конвертор IL→Native.
В последствии новые архитектуры должны укладываться в уже существующую концепцию IL-а, или, упс, переделываем всё с начала.

С одной стороны, архитектур не так много, каждый день новые не появляются.
С другой стороны, бывают такие чудесные архитектуры, вроде например систем, в которых нет инструкций ветвления (всё-таки есть, но как бонус).

Re: Кодогенерация под различные архитектуры

СообщениеДобавлено: 21.08.2012 (Вт) 1:16
FireFenix
Хакер писал(а):Ты компилятор что-ли свой пишешь?

Есть не много 8)

Фитча в том что разные архитектуры имеют разные набор компонент и ихнюю компоновку, тем самым накладывая на конвеер те или иные ограничения.

Думал уже существует менеджер или идеология менеджера, которая позволяет эффективно планировать операции для конвеера с учётом архитектурных особенностей.
Более того процессоры умеют работать в нескольких режимах, тоже хотелось бы это учитывать.

Если ещё с обычными командами вроде просто.
То вот если скажем взять Atmega64 и процессоры серии IA32 (RISC и CISC - жопа и палец конечно :) , но смысл отличия архитектур), то у первого нет команд деления и FPU есть частью CPU. У IA32 же случае FPU идёт как сопроцессор, тем самым имеет свой стек/регистры/etc.
А если скажем взять ещё и архитектуру ненавистных мной 8битных PIC'ов, то там свои подвыверты с памятью, командами...

Т.е. хотелось бы не иметь отдельного транслятора для каждой архитектуры, а иметь 1 менеджер, который бы на основе описаний команд и архитектуры мог бы эффективно спланировать и создать машинный код.

Re: Кодогенерация под различные архитектуры

СообщениеДобавлено: 21.08.2012 (Вт) 6:50
Хакер
FireFenix писал(а):Т.е. хотелось бы не иметь отдельного транслятора для каждой архитектуры, а иметь 1 менеджер, который бы на основе описаний команд и архитектуры мог бы эффективно спланировать и создать машинный код.

Слишком сложно и не эффективно. Не эффективно в плане сложности закладывания способов оптимизации под каждую архитектуру. Хотя возможно такое дело есть, посмотри исходники, скажем, GCC. Я никогда не интересовался, как какую-то вещь делают другие, если мог сам придумать достойное решение.

Поэтому говорю, как сделано у меня (сам знаешь где), есть драйверы различных слоёв, берущие на себя определённые задачи. Нужно просто менять эти прослойки в соответствии с выбранной архитектурой. Прослойки должны быть специально заточенны/написаны под свою архитектуру, знать о ней всё и уметь оптимизировать её.

Каждая прослойка должна получать EFG+IL для того, что она должна сгенерировать.