mirror of
https://github.com/qemu/qemu.git
synced 2024-12-02 16:23:35 +08:00
target-s390x: implement LAY and LAEY instructions
This complete the general-instructions-extension facility, enable it. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> [agraf: remove facility bit] Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
92892330e7
commit
a1c7610a68
@ -357,6 +357,9 @@
|
||||
/* LOAD ADDRESS */
|
||||
C(0x4100, LA, RX_a, Z, 0, a2, 0, r1, mov2, 0)
|
||||
C(0xe371, LAY, RXY_a, LD, 0, a2, 0, r1, mov2, 0)
|
||||
/* LOAD ADDRESS EXTENDED */
|
||||
C(0x5100, LAE, RX_a, Z, 0, a2, 0, r1, mov2e, 0)
|
||||
C(0xe375, LAEY, RXY_a, GIE, 0, a2, 0, r1, mov2e, 0)
|
||||
/* LOAD ADDRESS RELATIVE LONG */
|
||||
C(0xc000, LARL, RIL_b, Z, 0, ri2, 0, r1, mov2, 0)
|
||||
/* LOAD AND ADD */
|
||||
|
@ -2596,6 +2596,41 @@ static ExitStatus op_mov2(DisasContext *s, DisasOps *o)
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_mov2e(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
int b2 = get_field(s->fields, b2);
|
||||
TCGv ar1 = tcg_temp_new_i64();
|
||||
|
||||
o->out = o->in2;
|
||||
o->g_out = o->g_in2;
|
||||
TCGV_UNUSED_I64(o->in2);
|
||||
o->g_in2 = false;
|
||||
|
||||
switch (s->tb->flags & FLAG_MASK_ASC) {
|
||||
case PSW_ASC_PRIMARY >> 32:
|
||||
tcg_gen_movi_i64(ar1, 0);
|
||||
break;
|
||||
case PSW_ASC_ACCREG >> 32:
|
||||
tcg_gen_movi_i64(ar1, 1);
|
||||
break;
|
||||
case PSW_ASC_SECONDARY >> 32:
|
||||
if (b2) {
|
||||
tcg_gen_ld32u_i64(ar1, cpu_env, offsetof(CPUS390XState, aregs[b2]));
|
||||
} else {
|
||||
tcg_gen_movi_i64(ar1, 0);
|
||||
}
|
||||
break;
|
||||
case PSW_ASC_HOME >> 32:
|
||||
tcg_gen_movi_i64(ar1, 2);
|
||||
break;
|
||||
}
|
||||
|
||||
tcg_gen_st32_i64(ar1, cpu_env, offsetof(CPUS390XState, aregs[1]));
|
||||
tcg_temp_free_i64(ar1);
|
||||
|
||||
return NO_EXIT;
|
||||
}
|
||||
|
||||
static ExitStatus op_movx(DisasContext *s, DisasOps *o)
|
||||
{
|
||||
o->out = o->in1;
|
||||
|
Loading…
Reference in New Issue
Block a user