Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.38.43] |
|
Сообщ.
#1
,
|
|
|
Заметил во что превращается вызов _InterlockedAnd компилятором C++:
int z = _InterlockedAnd(&a, 10); 000000013F901039 lea rax,[a] 000000013F90103E mov qword ptr [rsp+38h],rax 000000013F901043 mov rax,qword ptr [rsp+38h] 000000013F901048 prefetchw [rax] 000000013F90104B mov rcx,qword ptr [rsp+38h] 000000013F901050 mov eax,dword ptr [rcx] 000000013F901052 mov edx,eax 000000013F901054 and edx,0Ah 000000013F901057 mov rcx,qword ptr [rsp+38h] 000000013F90105C mov rcx,qword ptr [rsp+38h] 000000013F901061 lock cmpxchg dword ptr [rcx],edx 000000013F901065 jne wmain+42h (13F901052h) 000000013F901067 mov dword ptr [z],eax Вопрос - зачем выделенная жирным повторенная строчка? |
Сообщ.
#2
,
|
|
|
Цитата ANDLL @ Вопрос - зачем выделенная жирным повторенная строчка? Незачем, также как и все 5 бестолковых строк копирования rax в стек и затем из стека опять в rax и трижды (?!) в rcx - достаточно одного mov rcx,rax |
Сообщ.
#3
,
|
|
|
leo, там первый параметр volatile*, поэтому и не оптимизируется. Впрочем, да, даже в этом случае можно оптимизировать сам указать.
|