Информация об изменениях

Сообщение Re: [Этюд] Минутка WTF от 27.03.2016 13:41

Изменено 27.03.2016 13:50 rameel

Здравствуйте, Sinix, Вы писали:

S>Вопрос 2, посложнее: где эта багофича выстреливает?


Джит соптимизировал ( ). В MSIL выглядит один в один как исходнике, за исключением константы, конечно.

Вот что генерирует джит для CaseC:
return "C: " + (falseSettable ? "Set" : "Not set");
-----------------------------------------------------
00A80550  push        ebp  
00A80551  mov         ebp,esp  
00A80553  mov         ecx,dword ptr ds:[34022B4h]  
00A80559  cmp         byte ptr ds:[72439Bh],0  
00A80560  jne         00A8056A  
00A80562  mov         edx,dword ptr ds:[34022B0h]  
00A80568  jmp         00A80570  
00A8056A  mov         edx,dword ptr ds:[34022B8h]  
00A80570  call        5B8216B0  
00A80575  pop         ebp  
00A80576  ret


А вот как для CaseB:
return "B: " + (falseRO ? "Set" : "Not set");
-----------------------------------------------------
0073052A  in          al,dx  
0073052B  mov         ecx,dword ptr ds:[35122ACh]  
00730531  mov         edx,dword ptr ds:[35122B0h]  
00730537  call        5B8216B0  
0073053C  pop         ebp  
0073053D  ret


И для CaseA:
return "A: Not set";
-----------------------------------------------------
006404F2  in          al,dx  
006404F3  mov         eax,dword ptr ds:[34722A8h]  
006404F9  pop         ebp  
006404FA  ret
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: [Этюд] Минутка WTF
Здравствуйте, Sinix, Вы писали:

S>Вопрос 2, посложнее: где эта багофича выстреливает?


Джит соптимизировал ( ). В MSIL выглядит один в один как исходнике, за исключением константы, конечно.

Вот что генерирует джит для CaseC:
return "C: " + (falseSettable ? "Set" : "Not set");
-----------------------------------------------------
00A80550  push        ebp  
00A80551  mov         ebp,esp  
00A80553  mov         ecx,dword ptr ds:[34022B4h]  
00A80559  cmp         byte ptr ds:[72439Bh],0  
00A80560  jne         00A8056A  
00A80562  mov         edx,dword ptr ds:[34022B0h]  
00A80568  jmp         00A80570  
00A8056A  mov         edx,dword ptr ds:[34022B8h]  
00A80570  call        5B8216B0  
00A80575  pop         ebp  
00A80576  ret


А вот как для CaseB:
return "B: " + (falseRO ? "Set" : "Not set");
-----------------------------------------------------
0073052A  in          al,dx  
0073052B  mov         ecx,dword ptr ds:[35122ACh]  
00730531  mov         edx,dword ptr ds:[35122B0h]  
00730537  call        5B8216B0  
0073053C  pop         ebp  
0073053D  ret


Только джит не смог превратить код в константу, или просто не стал делать этого из принципа

И для CaseA:
return "A: Not set";
-----------------------------------------------------
006404F2  in          al,dx  
006404F3  mov         eax,dword ptr ds:[34722A8h]  
006404F9  pop         ebp  
006404FA  ret
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>