[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/10] target-s390: Implement EPSW
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PULL 02/10] target-s390: Implement EPSW |
Date: |
Tue, 3 Feb 2015 12:42:53 -0800 |
Signed-off-by: Richard Henderson <address@hidden>
---
target-s390x/insn-data.def | 2 ++
target-s390x/translate.c | 18 ++++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/target-s390x/insn-data.def b/target-s390x/insn-data.def
index 42b99b2..859cfba 100644
--- a/target-s390x/insn-data.def
+++ b/target-s390x/insn-data.def
@@ -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)
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
index 1338bb5..97137c9 100644
--- a/target-s390x/translate.c
+++ b/target-s390x/translate.c
@@ -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
--
2.1.0
- [Qemu-devel] [PULL 00/10] s390x translator bug fixes, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 02/10] target-s390: Implement EPSW,
Richard Henderson <=
- [Qemu-devel] [PULL 03/10] target-s390: Fix STIDP, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 01/10] target-s390: Implement SAM specification exception, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 04/10] target-s390: Fix STURA, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 05/10] target-s390: Implement LURA, LURAG, STURG, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 08/10] disas/s390.c: Remove unused variables, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 06/10] target-s390: Implement ECAG, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 09/10] target-s390x: support OC and NC in the EX instruction, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 10/10] target-s390x: fix and optimize slb* and slbg* computation of carry/borrow flag, Richard Henderson, 2015/02/03
- [Qemu-devel] [PULL 07/10] target-s390x: Mark check_privileged() as !CONFIG_USER_ONLY, Richard Henderson, 2015/02/03
- Re: [Qemu-devel] [PULL 00/10] s390x translator bug fixes, Peter Maydell, 2015/02/03