Commit cb32f179 authored by Aurelien Jarno's avatar Aurelien Jarno
Browse files

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: default avatarRichard Henderson <rth@twiddle.net>
Signed-off-by: default avatarAurelien Jarno <aurelien@aurel32.net>
parent aa351317
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -1635,16 +1635,11 @@ static void _decode_opc(DisasContext * ctx)
	return;
    case 0x401b:		/* tas.b @Rn */
        {
	    TCGv addr, val;
	    addr = tcg_temp_local_new();
	    tcg_gen_mov_i32(addr, REG(B11_8));
	    val = tcg_temp_local_new();
            tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
            TCGv val = tcg_const_i32(0x80);
            tcg_gen_atomic_fetch_or_i32(val, REG(B11_8), val,
                                        ctx->memidx, MO_UB);
            tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
	    tcg_gen_ori_i32(val, val, 0x80);
            tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
            tcg_temp_free(val);
	    tcg_temp_free(addr);
        }
        return;
    case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */