OSDN Git Service

tcg/sparc64: Reorg goto_tb implementation
authorRichard Henderson <richard.henderson@linaro.org>
Tue, 6 Dec 2022 00:05:06 +0000 (18:05 -0600)
committerRichard Henderson <richard.henderson@linaro.org>
Tue, 17 Jan 2023 20:38:18 +0000 (10:38 -1000)
commita228ae3ea7f6fa9e7eda53906471f1cfc400c114
treef5be6fd492c61624926bb3658e177501eab69358
parent1e42b4f8079f7486689693187572452bbec2f158
tcg/sparc64: Reorg goto_tb implementation

The old sparc64 implementation may replace two insns, which leaves
a race condition in which a thread could be stopped at a PC in the
middle of the sequence, and when restarted does not see the complete
address computation and branches to nowhere.

The new implemetation replaces only one insn, swapping between a
direct branch and a direct call.  The TCG_REG_TB register is loaded
from tb->jmp_target_addr[] in the delay slot.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
tcg/sparc64/tcg-target.c.inc