169 похожих чатов

Добрый верчер, а стоит ли использовать lea для вычислений произвольных

значений, как замена add/imul?

28 ответов

100 просмотров

Нужно.

strewg- Автор вопроса
КТ315
Нужно.

а работает ли быстрее, и короче ли выходит по размерам?

КТ315
Быстрее.

сложение не факт, а умножение только на ряд маленьких констант

КТ315
Сложение тоже быстрее.

если бы это было так, то компиляторы бы совали её везде подряд, но увы это не так

disba1ancer
если бы это было так, то компиляторы бы совали её ...

Потому что они не умеют оптимизировать максимально. У них оптимальная оптимизация. Когда в коде AGU практически не занят - lea просто идеальный вариант для любых вычислений.

КТ315
Потому что они не умеют оптимизировать максимально...

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

disba1ancer
возможно, но инструкция lea как раз загрузит этот ...

Ты забываешь, что на современных процессорах этих блоков не 1, и даже не 2. Конкретно ALU и AGU могут достигать даже 8. Так что параллельно 8 независимых LEA процессор за такт точно смогёт выполнить)

КТ315
Ты забываешь, что на современных процессорах этих ...

ну 8 за такт это не совсем правда, но да, примерно так, в любом случае использовать только одно, не используя другое, глупо

disba1ancer
ну 8 за такт это не совсем правда, но да, примерно...

Не, так я же не говорю, что только lea надо. Да и это невозможно, lea достаточно ограниченная инструкция. Но если возможно - надо использовать. А вот про умножение - его брезгуют использовать, зачастую могут использовать sal/sar.

КТ315
Не, так я же не говорю, что только lea надо. Да и ...

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

КТ315
Не, так я же не говорю, что только lea надо. Да и ...

чего действительно стоит избегать, так это деления, оно ужасно медленное

disba1ancer
что касается умножения, то его надо использовать, ...

Ты же компилятор в пример приводил, вот я и говорю про них - они постоянно только sar/sal и используют.

КТ315
На любой.

приведи конкретный пример

КТ315
screenshot

поставь 22

disba1ancer
поставь 22

Зачем? Он на каждом случае будет разные варианты использовать. Ты попросил пример с sal - я показал. На числа типа 12 он будет его постоянно тыкать. На меньше - будет lea. imul он брезгует использовать.

КТ315
Зачем? Он на каждом случае будет разные варианты и...

так ты сказал, что ставит sal на любой код, оказалось это таки не так, хотя действительно лучше во всех случаях умножать

disba1ancer
так ты сказал, что ставит sal на любой код, оказал...

Ты сказал, что он sal вообще не использует, оказалось это не так.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта