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

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

обнуляют регистры XOR-ами, а в Майкрософте принято применять SUB?

8 ответов

24 просмотра

О чём речь в случае с Майкрософтом? Они там пишут на С и С++. И в Майкрофосте вполне тоже используется XOR в библиотеках. А всё потому что на современных процессорах, XOR оптимизируется в быстрое переименование регистра. Процессор находит пустой скрытый регистр и использует его в дальнейших операциях (Register renaming). Таким образом никакой операции по-сути нет, это равносильно NOP. На более старых используют mov r, 0

В каком майкрософте?

CLFLUSH 🇷🇺 rdseed
О чём речь в случае с Майкрософтом? Они там пишут ...

приведи прмер. как то непонятно про переименование

Aiwan \ (•◡•) / _bot
приведи прмер. как то непонятно про переименование

У процессора есть много скрытых регистров для устранения ожидания значений регистров между инструкциями (ложная зависимость). Например: mov eax, dword[SOME_ADDR] add eax, dword[esi+SOME_OFFSET_VALUE] mov dword[SOME_ADDR], eax mov eax, dword[SOME_ADDR+0xF] add eax, dword[esi+SOME_OFFSET_VALUE+0x4] mov dword[SOME_ADDR+0xF], eax В данном случае старый процессор не сможет выполнить инструкции одновременно, поскольку EAX зависим друг от друга. Но на новых процессорах, он может определить такую ложную зависимость, и переименовать 3 последних используемых регистра, которые не зависят от первых 3-х. Допустим это будет EBX, хотя там свои названия регистров. mov ebx, dword[SOME_ADDR+0xF] add ebx, dword[esi+SOME_OFFSET_VALUE+0x4] mov dword[SOME_ADDR+0xF], ebx В случае с XOR регистра с самим собой, то регистр будет переназначен на этапе выделения, и изначально будет нулём, без каких-либо операций. Кстати, я слегка ошибся, на самом деле с SUB и остальными инструкциями будет точно также, тут уже дело в размере. Другие примеры и описание: https://en.wikipedia.org/wiki/Register_renaming

CLFLUSH 🇷🇺 rdseed
У процессора есть много скрытых регистров для устр...

то есть все оптимизации под конвейер теперь можно сказать ничего не дают?

Mixail Frolov
то есть все оптимизации под конвейер теперь можно ...

Почему? Дают. Просто это определяется первее конвейера

CLFLUSH 🇷🇺 rdseed
О чём речь в случае с Майкрософтом? Они там пишут ...

а может там просто выделенный нулевой регистр?

disba1ancer
а может там просто выделенный нулевой регистр?

Ну это же тоже самое, только чуть хуже. С отдельными быстрыми скрытыми регистрами, можно делать как отдельный нулевой регистр, так и со значениями, вроде временных регистров. А если просто нулевой регистр будет — в него ничего не поместить

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта