Gross-Hennessy алгоритам

Извор: ВикиЕТФ

Gross-Hennessy алгоритам служи да би се оптимизовао асемблерски код који је излаз из компајлера. Код процесора са софтверским интерлоком њим се уклањају NOP наредбе које је компајлер уметнуо да би се избегли хазарди.

Садржај

Поставка проблема

Код инструкција скока, адреса скока може да буде позната прекасно, т.ј. када је резултат неке инструкције која је у пајплајну пре инструкције скока извршен. Да се ово не би десило, компајлер после инструкције скока убацује једну или више nop наредби. Последица овога је спорији код. Оптимизацијом кода се неке од ових наредби могу уклонити. За уклањање користи се овај алгоритам. Постоје три шеме за оптимизацију које могу да се користе. Зависно о врсти побољшања која се жели постићи, зависиће и редослед по којем се шеме примењују (претпоставка).

Шеме за оптимизацију

Шема 1 (From Before)

Када ни адреса ни услов скока у инструкцији скока не зависи ни на који начин од инструкције пре ње. Тада се инструкција пре инструкције скока може ставити уместо nop инструкције после инструкције скока.

Шема 2 (From Target)

Из кода с одредишта скока могу се узети једна или више инструкција које ће да замене nop инструкције које следе инструкцију скока. Услов да би ово било могуће је да инструкције са одредишта не чине „штету“ (примери: скок је безуслован, прва/првих неколико инструкција код оба скока су исте, инструкције на одредишту једног од скокова не мењају битне регистре итд.)

Шема 3 (From fall through)

Након инструкције скока и nop инструкције налази код за случај да се не скаче. Овај код може да се стави уместо nop инструкције ако не чини „штету“ (не мења садржај битних регистра и сл.)

Редослед примењивања шема

После овога код је оптималан, чак и ако је остало још NOP наредби.

Извори

Личне алатке
Именски простори
Варијанте
Акције
Навигација
Алатке