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