1

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

Например:

pushl <reg1> 
popl <reg1> 

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

Или:

pushl <something1> 
popl <something2> 

Станет:

movl <something1>, <something2> 

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

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

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

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

+0

Какова мотивация? Я не говорю, что это плохой вопрос, это просто ... странно. – jprete

+0

Я хочу уменьшить размер выходного файла –

+0

Не то, чтобы операционная система не была релевантна для оптимизации глазок. Если он работает с кодом Linux, он будет работать и с окнами, и с Mac OS. То, что вам нужно разграничить, - это архитектура. – hirschhornsalz

ответ

3

Составители уже делают такие оптимизации. Кроме того, это не так просто решение сделать заточку, потому что:

push reg1 
pop reg1 

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

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

push some1 
pop some2 

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

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

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

+0

Хорошо, вы должны быть очень осторожны. – Krystian

+0

Вам не кажется, что эти оптимизации могут работать для простых входов? Для оптимизации «movl» я предполагаю, что some2 является регистром или ссылкой на память –

+0

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

1

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

+0

Это хорошая отправная точка! –

0
pushl <something1> 
popl <something2> 

заменен

mov <something1>, <something2> 

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

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

Смежные вопросы