Какие советы по оптимизации ассемблерного кода, сгенерированного компилятором?

В настоящее время я пишу компилятор и, похоже, столкнулся с некоторыми проблемами, заставляя его выводить код, который выполняется в приличные сроки.

Краткий обзор компилятора:

7Basic - это компилятор, целью которого является компиляция кода 7Basic непосредственно в машинный код для целевой архитектуры / платформы. В настоящее время 7Basic генерирует сборку x86 с учетом исходного файла.

Проблема в том, что код сборки, сгенерированный компилятором, медленный и неэффективный .

Например, этот код ( который компилируется до этот ассемблерный код) выполняется почти в 80,47 раз дольше, чем эквивалентный код на C .

Часть проблемы заключается в том, что компилятор генерирует код, подобный следующему :

push eax
push 5000000
pop ebx
pop eax

Вместо более логичного:

mov ebx,5000000

... который выполняет то же самое.

Мой вопрос: какие методы позволяют избежать такого рода проблем? Парсер в основном использует рекурсию для анализа выражений, поэтому сгенерированный код отражает это.

14
задан Nathan Osman 22 September 2010 в 19:51
поделиться