mirror of https://github.com/xemu-project/xemu.git
tcg-arm: Use movi32 in exit_tb
Avoid the mini constant pool for armv7, and avoid replicating the test for pre-v7. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
8ddaeb1be6
commit
c9e53a4cf1
|
@ -1611,17 +1611,15 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
|
||||||
|
|
||||||
switch (opc) {
|
switch (opc) {
|
||||||
case INDEX_op_exit_tb:
|
case INDEX_op_exit_tb:
|
||||||
{
|
if (use_armv7_instructions || check_fit_imm(args[0])) {
|
||||||
uint8_t *ld_ptr = s->code_ptr;
|
tcg_out_movi32(s, COND_AL, TCG_REG_R0, args[0]);
|
||||||
if (args[0] >> 8)
|
|
||||||
tcg_out_ld32_12(s, COND_AL, TCG_REG_R0, TCG_REG_PC, 0);
|
|
||||||
else
|
|
||||||
tcg_out_dat_imm(s, COND_AL, ARITH_MOV, TCG_REG_R0, 0, args[0]);
|
|
||||||
tcg_out_goto(s, COND_AL, (tcg_target_ulong) tb_ret_addr);
|
tcg_out_goto(s, COND_AL, (tcg_target_ulong) tb_ret_addr);
|
||||||
if (args[0] >> 8) {
|
} else {
|
||||||
*ld_ptr = (uint8_t) (s->code_ptr - ld_ptr) - 8;
|
uint8_t *ld_ptr = s->code_ptr;
|
||||||
tcg_out32(s, args[0]);
|
tcg_out_ld32_12(s, COND_AL, TCG_REG_R0, TCG_REG_PC, 0);
|
||||||
}
|
tcg_out_goto(s, COND_AL, (tcg_target_ulong) tb_ret_addr);
|
||||||
|
*ld_ptr = (uint8_t) (s->code_ptr - ld_ptr) - 8;
|
||||||
|
tcg_out32(s, args[0]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case INDEX_op_goto_tb:
|
case INDEX_op_goto_tb:
|
||||||
|
|
Loading…
Reference in New Issue