On Wed, Jul 15, 2026 at 12:57 PM Brian Cain <[email protected]>
wrote:

> Add hex_next_PC, a global mirroring CPUHexagonState::next_PC,
> and ctx->need_next_pc, so that gen_write_new_pc_addr() can write the
> branch target through hex_next_PC instead of hex_gpr[HEX_REG_PC]
> when a later unconditional write of PC is expected. gen_end_tb()
> then commits hex_next_PC into hex_gpr[HEX_REG_PC] at the end of the
> packet.
>
> Previously, non-COF instructions that still end a TB did not advance the
> PC, since next_PC's value was never written back into the PC register.
>
> Reviewed-by: Pierrick Bouvier <[email protected]>
> Signed-off-by: Brian Cain <[email protected]>
> ---
>  target/hexagon/translate.h |  3 +++
>  target/hexagon/genptr.c    | 14 ++++++++---
>  target/hexagon/translate.c | 51 ++++++++++++++++++++++++++------------
>  3 files changed, 49 insertions(+), 19 deletions(-)
>
>
> @@ -1327,6 +1344,8 @@ void hexagon_translate_init(void)
>      }
>      hex_new_value_usr = tcg_global_mem_new(tcg_env,
>          offsetof(CPUHexagonState, new_value_usr), "new_value_usr");
> +    hex_next_PC = tcg_global_mem_new(tcg_env,
> +        offsetof(CPUHexagonState, next_PC), "next_PC");
>

This only lives within the context of a single packet, so it shouldn't be
global.

Put it into DisasContext and make it a tmp similar to new_value.

Reply via email to