Created
May 23, 2014 18:16
-
-
Save kayru/753db9607d680e26194b to your computer and use it in GitHub Desktop.
JitBaseBlockCache::InvalidateICache
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
vector: | |
// Optimize the common case of length == 32 which is used by Interpreter::dcb* | |
bool destroy_block = true; | |
if (length == 32) | |
00000000008D8EC1 cmp r8d,20h | |
00000000008D8EC5 jne JitBaseBlockCache::InvalidateICache+6Eh (08D8F0Eh) | |
{ | |
if (!valid_block[pAddr / 32]) | |
00000000008D8EC7 mov r11,qword ptr [rcx+40h] | |
00000000008D8ECB mov r8d,r9d | |
00000000008D8ECE mov r10d,1 | |
00000000008D8ED4 shr r8,5 | |
00000000008D8ED8 mov rax,r8 | |
00000000008D8EDB mov rcx,r8 | |
00000000008D8EDE shr rax,5 | |
00000000008D8EE2 and ecx,1Fh | |
00000000008D8EE5 lea rdx,[r11+rax*4] | |
00000000008D8EE9 mov eax,r10d | |
00000000008D8EEC shl eax,cl | |
00000000008D8EEE test dword ptr [rdx],eax | |
00000000008D8EF0 je JitBaseBlockCache::InvalidateICache+21Eh (08D90BEh) | |
destroy_block = false; | |
else | |
valid_block[pAddr / 32] = false; | |
00000000008D8EF6 mov rax,r8 | |
00000000008D8EF9 and r8d,1Fh | |
00000000008D8EFD mov ecx,r8d | |
00000000008D8F00 shr rax,5 | |
00000000008D8F04 shl r10d,cl | |
00000000008D8F07 not r10d | |
00000000008D8F0A and dword ptr [r11+rax*4],r10d | |
00000000008D8F0E mov qword ptr [rsp+60h],rbx | |
00000000008D8F13 mov qword ptr [rsp+38h],rbp | |
} | |
bitset: | |
// Optimize the common case of length == 32 which is used by Interpreter::dcb* | |
bool destroy_block = true; | |
if (length == 32) | |
00000000008D8F23 cmp r8d,20h | |
00000000008D8F27 jne JitBaseBlockCache::InvalidateICache+0C7h (08D8FC7h) | |
{ | |
if (!valid_block[pAddr / 32]) | |
00000000008D8F2D mov ebx,edi | |
00000000008D8F2F lea rdx,[rsp+20h] | |
00000000008D8F34 add rcx,40h | |
00000000008D8F38 shr rbx,5 | |
00000000008D8F3C mov r8,rbx | |
00000000008D8F3F call std::bitset<16777216>::operator[] (08D99B0h) | |
00000000008D8F44 mov rcx,qword ptr [rax+8] | |
00000000008D8F48 mov r8,qword ptr [rax] | |
00000000008D8F4B cmp rcx,1000000h | |
00000000008D8F52 jb JitBaseBlockCache::InvalidateICache+62h (08D8F62h) | |
00000000008D8F54 lea rcx,[string "invalid bitset<N> position" (0D109B8h)] | |
00000000008D8F5B call qword ptr [__imp_std::_Xout_of_range (0BABD80h)] | |
00000000008D8F61 int 3 | |
00000000008D8F62 movzx eax,cl | |
00000000008D8F65 shr rcx,6 | |
00000000008D8F69 and al,3Fh | |
00000000008D8F6B movzx edx,al | |
00000000008D8F6E mov rax,qword ptr [r8+rcx*8] | |
00000000008D8F72 bt rax,rdx | |
00000000008D8F76 jae JitBaseBlockCache::InvalidateICache+266h (08D9166h) | |
destroy_block = false; | |
else | |
valid_block[pAddr / 32] = false; | |
00000000008D8F7C lea rdx,[rsp+20h] | |
00000000008D8F81 lea rcx,[r14+40h] | |
00000000008D8F85 mov r8,rbx | |
00000000008D8F88 call std::bitset<16777216>::operator[] (08D99B0h) | |
00000000008D8F8D mov rcx,qword ptr [rax+8] | |
00000000008D8F91 mov rdx,qword ptr [rax] | |
00000000008D8F94 cmp rcx,1000000h | |
00000000008D8F9B jb JitBaseBlockCache::InvalidateICache+0ABh (08D8FABh) | |
00000000008D8F9D lea rcx,[string "invalid bitset<N> position" (0D109B8h)] | |
00000000008D8FA4 call qword ptr [__imp_std::_Xout_of_range (0BABD80h)] | |
00000000008D8FAA int 3 | |
00000000008D8FAB mov rax,rcx | |
00000000008D8FAE and cl,3Fh | |
00000000008D8FB1 shr rax,6 | |
00000000008D8FB5 lea r8,[rdx+rax*8] | |
00000000008D8FB9 mov edx,1 | |
00000000008D8FBE shl rdx,cl | |
00000000008D8FC1 not rdx | |
destroy_block = false; | |
else | |
valid_block[pAddr / 32] = false; | |
00000000008D8FC4 and qword ptr [r8],rdx | |
00000000008D8FC7 mov qword ptr [rsp+70h],rbp | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment