mirror of https://github.com/xemu-project/xemu.git
target/sh4: implement tas.b using atomic helper
We only emulate UP SH4, however as the tas.b instruction is used in the GNU libc, this improve linux-user emulation. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
aa3513176f
commit
cb32f179e0
|
@ -1634,19 +1634,14 @@ static void _decode_opc(DisasContext * ctx)
|
||||||
tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 16);
|
tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 16);
|
||||||
return;
|
return;
|
||||||
case 0x401b: /* tas.b @Rn */
|
case 0x401b: /* tas.b @Rn */
|
||||||
{
|
{
|
||||||
TCGv addr, val;
|
TCGv val = tcg_const_i32(0x80);
|
||||||
addr = tcg_temp_local_new();
|
tcg_gen_atomic_fetch_or_i32(val, REG(B11_8), val,
|
||||||
tcg_gen_mov_i32(addr, REG(B11_8));
|
ctx->memidx, MO_UB);
|
||||||
val = tcg_temp_local_new();
|
|
||||||
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
|
|
||||||
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
|
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
|
||||||
tcg_gen_ori_i32(val, val, 0x80);
|
tcg_temp_free(val);
|
||||||
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
|
}
|
||||||
tcg_temp_free(val);
|
return;
|
||||||
tcg_temp_free(addr);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
|
case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
|
||||||
CHECK_FPU_ENABLED
|
CHECK_FPU_ENABLED
|
||||||
tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fpul);
|
tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fpul);
|
||||||
|
|
Loading…
Reference in New Issue