Уменьшить количество сборок инструкций

Я хочу уменьшить (вручную) количество инструкций из файла сборки Linux. В основном это будет сделано путем поиска предопределенных сокращений в абстрактном синтаксическом дереве.

Например:

pushl <reg1>
popl  <reg1>

Будут удалены, потому что это не имеет смысла.

Или же:

pushl <something1>
popl  <something2>

Станет:

movl <something1>, <something2>

Я ищу другие оптимизации, которые включают фиксированное количество инструкций. Я не хочу искать динамические диапазоны инструкций.

Не могли бы вы предложить другие похожие шаблоны, которые можно заменить меньшим количеством инструкций?

Позже Edit: Благодаря Ричарду Пеннингтону выяснилось, что я хочу оптимизировать глазок.

Поэтому я перефразирую вопрос следующим образом: предложения по оптимизации глазка в ассемблерном коде Linux.

3 ответа

Решение

Компиляторы уже делают такие оптимизации. Кроме того, не так-то просто сделать такую ​​оптимизацию, потому что:

push reg1
pop reg1

По-прежнему оставляет значение reg1 в ячейке памяти [sp-nn] (где nn = размер reg1 в байтах). Таким образом, хотя sp уже прошел, код после может предполагать, что [sp-nn] содержит значение reg1.

То же самое относится и к другой оптимизации:

push some1
pop some2

И это обычно излучается только тогда, когда нет эквивалента movl some1, some2 инструкция.

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

Я бы посоветовал вам оптимизировать компилятор, а не оптимизировать ассемблерный код, он предоставил бы вам лучшую среду для работы с намерениями кода, использования регистра и т. Д.

Чтобы получить больше информации о том, что вы пытаетесь сделать, вы можете поискать "оптимизацию глазка".

pushl <something1>
popl  <something2>

заменено на

mov <something1>, <something2>

фактически увеличил размер моей программы. Weird!

Не могли бы вы предоставить некоторые другие возможные оптимизации глазка?

Другие вопросы по тегам