mirror of https://github.com/xemu-project/xemu.git
target-s390: Implement LOAD ON CONDITION
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
1c26875182
commit
632086da28
target-s390x
|
@ -390,6 +390,11 @@
|
||||||
C(0xb301, LNEBR, RRE, Z, 0, e2, new, e1, nabsf32, f32)
|
C(0xb301, LNEBR, RRE, Z, 0, e2, new, e1, nabsf32, f32)
|
||||||
C(0xb311, LNDBR, RRE, Z, 0, f2_o, f1, 0, nabsf64, f64)
|
C(0xb311, LNDBR, RRE, Z, 0, f2_o, f1, 0, nabsf64, f64)
|
||||||
C(0xb341, LNXBR, RRE, Z, 0, x2_o, x1, 0, nabsf128, f128)
|
C(0xb341, LNXBR, RRE, Z, 0, x2_o, x1, 0, nabsf128, f128)
|
||||||
|
/* LOAD ON CONDITION */
|
||||||
|
C(0xb9f2, LOCR, RRF_c, LOC, r1, r2, new, r1_32, loc, 0)
|
||||||
|
C(0xb9e2, LOCGR, RRF_c, LOC, r1, r2, r1, 0, loc, 0)
|
||||||
|
C(0xebf2, LOC, RSY_b, LOC, r1, m2_32u, new, r1_32, loc, 0)
|
||||||
|
C(0xebe2, LOCG, RSY_b, LOC, r1, m2_64, r1, 0, loc, 0)
|
||||||
/* LOAD POSITIVE */
|
/* LOAD POSITIVE */
|
||||||
C(0x1000, LPR, RR_a, Z, 0, r2_32s, new, r1_32, abs, abs32)
|
C(0x1000, LPR, RR_a, Z, 0, r2_32s, new, r1_32, abs, abs32)
|
||||||
C(0xb900, LPGR, RRE, Z, 0, r2, r1, 0, abs, abs64)
|
C(0xb900, LPGR, RRE, Z, 0, r2, r1, 0, abs, abs64)
|
||||||
|
|
|
@ -2045,6 +2045,36 @@ static ExitStatus op_ld64(DisasContext *s, DisasOps *o)
|
||||||
return NO_EXIT;
|
return NO_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ExitStatus op_loc(DisasContext *s, DisasOps *o)
|
||||||
|
{
|
||||||
|
DisasCompare c;
|
||||||
|
|
||||||
|
disas_jcc(s, &c, get_field(s->fields, m3));
|
||||||
|
|
||||||
|
if (c.is_64) {
|
||||||
|
tcg_gen_movcond_i64(c.cond, o->out, c.u.s64.a, c.u.s64.b,
|
||||||
|
o->in2, o->in1);
|
||||||
|
free_compare(&c);
|
||||||
|
} else {
|
||||||
|
TCGv_i32 t32 = tcg_temp_new_i32();
|
||||||
|
TCGv_i64 t, z;
|
||||||
|
|
||||||
|
tcg_gen_setcond_i32(c.cond, t32, c.u.s32.a, c.u.s32.b);
|
||||||
|
free_compare(&c);
|
||||||
|
|
||||||
|
t = tcg_temp_new_i64();
|
||||||
|
tcg_gen_extu_i32_i64(t, t32);
|
||||||
|
tcg_temp_free_i32(t32);
|
||||||
|
|
||||||
|
z = tcg_const_i64(0);
|
||||||
|
tcg_gen_movcond_i64(TCG_COND_NE, o->out, t, z, o->in2, o->in1);
|
||||||
|
tcg_temp_free_i64(t);
|
||||||
|
tcg_temp_free_i64(z);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NO_EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
static ExitStatus op_lctl(DisasContext *s, DisasOps *o)
|
static ExitStatus op_lctl(DisasContext *s, DisasOps *o)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue