mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
accel/tcg: Pass TCGTBCPUState to tb_lookup
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
c37f8978d9
commit
b46357db32
1 changed files with 13 additions and 15 deletions
|
@ -232,35 +232,33 @@ static TranslationBlock *tb_htable_lookup(CPUState *cpu, vaddr pc,
|
||||||
*
|
*
|
||||||
* Returns: an existing translation block or NULL.
|
* Returns: an existing translation block or NULL.
|
||||||
*/
|
*/
|
||||||
static inline TranslationBlock *tb_lookup(CPUState *cpu, vaddr pc,
|
static inline TranslationBlock *tb_lookup(CPUState *cpu, TCGTBCPUState s)
|
||||||
uint64_t cs_base, uint32_t flags,
|
|
||||||
uint32_t cflags)
|
|
||||||
{
|
{
|
||||||
TranslationBlock *tb;
|
TranslationBlock *tb;
|
||||||
CPUJumpCache *jc;
|
CPUJumpCache *jc;
|
||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
|
|
||||||
/* we should never be trying to look up an INVALID tb */
|
/* we should never be trying to look up an INVALID tb */
|
||||||
tcg_debug_assert(!(cflags & CF_INVALID));
|
tcg_debug_assert(!(s.cflags & CF_INVALID));
|
||||||
|
|
||||||
hash = tb_jmp_cache_hash_func(pc);
|
hash = tb_jmp_cache_hash_func(s.pc);
|
||||||
jc = cpu->tb_jmp_cache;
|
jc = cpu->tb_jmp_cache;
|
||||||
|
|
||||||
tb = qatomic_read(&jc->array[hash].tb);
|
tb = qatomic_read(&jc->array[hash].tb);
|
||||||
if (likely(tb &&
|
if (likely(tb &&
|
||||||
jc->array[hash].pc == pc &&
|
jc->array[hash].pc == s.pc &&
|
||||||
tb->cs_base == cs_base &&
|
tb->cs_base == s.cs_base &&
|
||||||
tb->flags == flags &&
|
tb->flags == s.flags &&
|
||||||
tb_cflags(tb) == cflags)) {
|
tb_cflags(tb) == s.cflags)) {
|
||||||
goto hit;
|
goto hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
tb = tb_htable_lookup(cpu, pc, cs_base, flags, cflags);
|
tb = tb_htable_lookup(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
||||||
if (tb == NULL) {
|
if (tb == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
jc->array[hash].pc = pc;
|
jc->array[hash].pc = s.pc;
|
||||||
qatomic_set(&jc->array[hash].tb, tb);
|
qatomic_set(&jc->array[hash].tb, tb);
|
||||||
|
|
||||||
hit:
|
hit:
|
||||||
|
@ -268,7 +266,7 @@ hit:
|
||||||
* As long as tb is not NULL, the contents are consistent. Therefore,
|
* As long as tb is not NULL, the contents are consistent. Therefore,
|
||||||
* the virtual PC has to match for non-CF_PCREL translations.
|
* the virtual PC has to match for non-CF_PCREL translations.
|
||||||
*/
|
*/
|
||||||
assert((tb_cflags(tb) & CF_PCREL) || tb->pc == pc);
|
assert((tb_cflags(tb) & CF_PCREL) || tb->pc == s.pc);
|
||||||
return tb;
|
return tb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,7 +400,7 @@ const void *HELPER(lookup_tb_ptr)(CPUArchState *env)
|
||||||
cpu_loop_exit(cpu);
|
cpu_loop_exit(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
tb = tb_lookup(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
tb = tb_lookup(cpu, s);
|
||||||
if (tb == NULL) {
|
if (tb == NULL) {
|
||||||
return tcg_code_gen_epilogue;
|
return tcg_code_gen_epilogue;
|
||||||
}
|
}
|
||||||
|
@ -581,7 +579,7 @@ void cpu_exec_step_atomic(CPUState *cpu)
|
||||||
* Any breakpoint for this insn will have been recognized earlier.
|
* Any breakpoint for this insn will have been recognized earlier.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
tb = tb_lookup(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
tb = tb_lookup(cpu, s);
|
||||||
if (tb == NULL) {
|
if (tb == NULL) {
|
||||||
mmap_lock();
|
mmap_lock();
|
||||||
tb = tb_gen_code(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
tb = tb_gen_code(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
||||||
|
@ -955,7 +953,7 @@ cpu_exec_loop(CPUState *cpu, SyncClocks *sc)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
tb = tb_lookup(cpu, s.pc, s.cs_base, s.flags, s.cflags);
|
tb = tb_lookup(cpu, s);
|
||||||
if (tb == NULL) {
|
if (tb == NULL) {
|
||||||
CPUJumpCache *jc;
|
CPUJumpCache *jc;
|
||||||
uint32_t h;
|
uint32_t h;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue