2 * Copyright (C) 2017, Emilio G. Cota <cota@braap.org>
4 * License: GNU GPL, version 2 or later.
5 * See the COPYING file in the top-level directory.
7 #ifndef EXEC_TB_LOOKUP_H
8 #define EXEC_TB_LOOKUP_H
10 #include "qemu/osdep.h"
15 #include "exec/poison.h"
18 #include "exec/exec-all.h"
19 #include "exec/tb-hash.h"
21 /* Might cause an exception, so have a longjmp destination ready */
22 static inline TranslationBlock
*
23 tb_lookup__cpu_state(CPUState
*cpu
, target_ulong
*pc
, target_ulong
*cs_base
,
26 CPUArchState
*env
= (CPUArchState
*)cpu
->env_ptr
;
30 cpu_get_tb_cpu_state(env
, pc
, cs_base
, flags
);
31 hash
= tb_jmp_cache_hash_func(*pc
);
32 tb
= atomic_rcu_read(&cpu
->tb_jmp_cache
[hash
]);
35 tb
->cs_base
== *cs_base
&&
36 tb
->flags
== *flags
&&
37 tb
->trace_vcpu_dstate
== *cpu
->trace_dstate
&&
38 !(atomic_read(&tb
->cflags
) & CF_INVALID
))) {
41 tb
= tb_htable_lookup(cpu
, *pc
, *cs_base
, *flags
);
45 atomic_set(&cpu
->tb_jmp_cache
[hash
], tb
);
49 #endif /* EXEC_TB_LOOKUP_H */