Skip to content

Instantly share code, notes, and snippets.

@kayru
Created May 23, 2014 18:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kayru/753db9607d680e26194b to your computer and use it in GitHub Desktop.
Save kayru/753db9607d680e26194b to your computer and use it in GitHub Desktop.
JitBaseBlockCache::InvalidateICache
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