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
|
@ -390,6 +390,11 @@
|
|||
C(0xb301, LNEBR, RRE, Z, 0, e2, new, e1, nabsf32, f32)
|
||||
C(0xb311, LNDBR, RRE, Z, 0, f2_o, f1, 0, nabsf64, f64)
|
||||
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 */
|
||||
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)
|
||||
|
|
|
@ -2045,6 +2045,36 @@ static ExitStatus op_ld64(DisasContext *s, DisasOps *o)
|
|||
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
|
||||
static ExitStatus op_lctl(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue