target-s390: Implement EPSW
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
8612c93583
commit
e30a9d3fea
@ -287,6 +287,8 @@
|
||||
C(0xb24f, EAR, RRE, Z, 0, 0, new, r1_32, ear, 0)
|
||||
/* EXTRACT FPC */
|
||||
C(0xb38c, EFPC, RRE, Z, 0, 0, new, r1_32, efpc, 0)
|
||||
/* EXTRACT PSW */
|
||||
C(0xb98d, EPSW, RRE, Z, 0, 0, 0, 0, epsw, 0)
|
||||
|
||||
/* FIND LEFTMOST ONE */
|
||||
C(0xb983, FLOGR, RRE, EI, 0, r2_o, r1_P, 0, flogr, 0)
|
||||
|
@ -2051,6 +2051,24 @@ static ExitStatus op_efpc(DisasContext *s, DisasOps *o)
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_epsw(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
int r1 = get_field(s->fields, r1);
|
||||
int r2 = get_field(s->fields, r2);
|
||||
TCGv_i64 t = tcg_temp_new_i64();
|
||||
|
||||
/* Note the "subsequently" in the PoO, which implies a defined result
|
||||
if r1 == r2. Thus we cannot defer these writes to an output hook. */
|
||||
tcg_gen_shri_i64(t, psw_mask, 32);
|
||||
store_reg32_i64(r1, t);
|
||||
if (r2 != 0) {
|
||||
store_reg32_i64(r2, psw_mask);
|
||||
}
|
||||
|
||||
tcg_temp_free_i64(t);
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_ex(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
/* ??? Perhaps a better way to implement EXECUTE is to set a bit in
|
||||
|
Loading…
Reference in New Issue
Block a user