--- qemu/tcg/arm/tcg-target.c 2018/04/24 16:51:10 1.1 +++ qemu/tcg/arm/tcg-target.c 2018/04/24 17:21:47 1.1.1.2 @@ -1011,8 +1011,13 @@ static inline void tcg_out_qemu_ld(TCGCo case 3: /* TODO: use block load - * check that data_reg2 > data_reg or the other way */ - tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0); - tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4); + if (data_reg == addr_reg) { + tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4); + tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0); + } else { + tcg_out_ld32_12(s, COND_AL, data_reg, addr_reg, 0); + tcg_out_ld32_12(s, COND_AL, data_reg2, addr_reg, 4); + } break; } #endif @@ -1562,7 +1567,7 @@ static inline void tcg_out_st(TCGContext tcg_out_st32(s, COND_AL, arg, arg1, arg2); } -void tcg_out_addi(TCGContext *s, int reg, tcg_target_long val) +static void tcg_out_addi(TCGContext *s, int reg, tcg_target_long val) { if (val > 0) if (val < 0x100)