Уменьшить количество сборок инструкций - PullRequest
1 голос
/ 28 ноября 2009

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

Например:

pushl <reg1>
popl  <reg1>

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

Или:

pushl <something1>
popl  <something2>

станет:

movl <something1>, <something2>

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 28 ноября 2009

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

push reg1
pop reg1

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

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

push some1
pop some2

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

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

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

1 голос
/ 28 ноября 2009

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

0 голосов
/ 11 декабря 2009
pushl <something1>
popl  <something2>

заменено на

mov <something1>, <something2>

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

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

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