diff --git a/qemu/target-sparc/translate.c b/qemu/target-sparc/translate.c index e9999cfe..32057c0c 100644 --- a/qemu/target-sparc/translate.c +++ b/qemu/target-sparc/translate.c @@ -4805,12 +4805,15 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn, bool hook_ins case 0xd: /* ldstub -- XXX: should be atomically */ { TCGv r_const; + TCGv tmp = tcg_temp_new(tcg_ctx); gen_address_mask(dc, cpu_addr); - tcg_gen_qemu_ld8u(dc->uc, cpu_val, cpu_addr, dc->mem_idx); + tcg_gen_qemu_ld8u(dc->uc, tmp, cpu_addr, dc->mem_idx); r_const = tcg_const_tl(tcg_ctx, 0xff); tcg_gen_qemu_st8(dc->uc, r_const, cpu_addr, dc->mem_idx); + tcg_gen_mov_tl(tcg_ctx, cpu_val, tmp); tcg_temp_free(tcg_ctx, r_const); + tcg_temp_free(tcg_ctx, tmp); } break; case 0x0f: