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
13 #include "exec/poison.h"
16 #include "exec/exec-all.h"
17 #include "exec/tb-hash.h"
19 /* Might cause an exception, so have a longjmp destination ready */
20 static inline TranslationBlock
*tb_lookup(CPUState
*cpu
, target_ulong pc
,
22 uint32_t flags
, uint32_t cflags
)
27 /* we should never be trying to look up an INVALID tb */
28 tcg_debug_assert(!(cflags
& CF_INVALID
));
30 hash
= tb_jmp_cache_hash_func(pc
);
31 tb
= qatomic_rcu_read(&cpu
->tb_jmp_cache
[hash
]);
35 tb
->cs_base
== cs_base
&&
37 tb
->trace_vcpu_dstate
== *cpu
->trace_dstate
&&
38 tb_cflags(tb
) == cflags
)) {
41 tb
= tb_htable_lookup(cpu
, pc
, cs_base
, flags
, cflags
);
45 qatomic_set(&cpu
->tb_jmp_cache
[hash
], tb
);
49 #endif /* EXEC_TB_LOOKUP_H */