mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
tcg: Return the TB pointer from the rx region from exit_tb
This produces a small pc-relative displacement within the generated code to the TB structure that preceeds it. Reviewed-by: Joelle van Dyne <j@getutm.app> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
6f70ddee19
commit
eba40358b4
2 changed files with 33 additions and 15 deletions
13
tcg/tcg-op.c
13
tcg/tcg-op.c
|
@ -2666,7 +2666,18 @@ void tcg_gen_extr32_i64(TCGv_i64 lo, TCGv_i64 hi, TCGv_i64 arg)
|
|||
|
||||
void tcg_gen_exit_tb(const TranslationBlock *tb, unsigned idx)
|
||||
{
|
||||
uintptr_t val = (uintptr_t)tb + idx;
|
||||
/*
|
||||
* Let the jit code return the read-only version of the
|
||||
* TranslationBlock, so that we minimize the pc-relative
|
||||
* distance of the address of the exit_tb code to TB.
|
||||
* This will improve utilization of pc-relative address loads.
|
||||
*
|
||||
* TODO: Move this to translator_loop, so that all const
|
||||
* TranslationBlock pointers refer to read-only memory.
|
||||
* This requires coordination with targets that do not use
|
||||
* the translator_loop.
|
||||
*/
|
||||
uintptr_t val = (uintptr_t)tcg_splitwx_to_rx((void *)tb) + idx;
|
||||
|
||||
if (tb == NULL) {
|
||||
tcg_debug_assert(idx == 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue