Сообщение Re: [Этюд] Минутка WTF от 27.03.2016 13:41
Изменено 27.03.2016 13:50 rameel
Здравствуйте, Sinix, Вы писали:
S>Вопрос 2, посложнее: где эта багофича выстреливает?
Джит соптимизировал ( ). В MSIL выглядит один в один как исходнике, за исключением константы, конечно.
Вот что генерирует джит для CaseC:
А вот как для CaseB:
И для CaseA:
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:
А вот как для CaseB:
Только джит не смог превратить код в константу, или просто не стал делать этого из принципа
И для CaseA:
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>>