Speed up tlb_flush_page (Daniel Jacobowitz).

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2210 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
pbrook 2006-11-12 20:40:55 +00:00
parent d08b2a28e6
commit b362e5e067
3 changed files with 26 additions and 9 deletions

15
exec.c
View file

@ -1288,14 +1288,13 @@ void tlb_flush_page(CPUState *env, target_ulong addr)
tlb_flush_entry(&env->tlb_table[0][i], addr);
tlb_flush_entry(&env->tlb_table[1][i], addr);
for(i = 0; i < TB_JMP_CACHE_SIZE; i++) {
tb = env->tb_jmp_cache[i];
if (tb &&
((tb->pc & TARGET_PAGE_MASK) == addr ||
((tb->pc + tb->size - 1) & TARGET_PAGE_MASK) == addr)) {
env->tb_jmp_cache[i] = NULL;
}
}
/* Discard jump cache entries for any tb which might potentially
overlap the flushed page. */
i = tb_jmp_cache_hash_page(addr - TARGET_PAGE_SIZE);
memset (&env->tb_jmp_cache[i], 0, TB_JMP_PAGE_SIZE * sizeof(tb));
i = tb_jmp_cache_hash_page(addr);
memset (&env->tb_jmp_cache[i], 0, TB_JMP_PAGE_SIZE * sizeof(tb));
#if !defined(CONFIG_SOFTMMU)
if (addr < MMAP_AREA_END)