From: Ilya Leoshkevich <iii@linux.ibm.com>
To: Thomas Huth <thuth@redhat.com>,
Richard Henderson <richard.henderson@linaro.org>,
David Hildenbrand <david@redhat.com>
Cc: qemu-s390x@nongnu.org, qemu-devel@nongnu.org,
Ilya Leoshkevich <iii@linux.ibm.com>, Ido Plat <Ido.Plat@ibm.com>
Subject: [PATCH 1/2] target/s390x: Emulate CVDG
Date: Mon, 15 Jan 2024 21:21:03 +0100 [thread overview]
Message-ID: <20240115202308.1930675-2-iii@linux.ibm.com> (raw)
In-Reply-To: <20240115202308.1930675-1-iii@linux.ibm.com>
CVDG is the same as CVD, except that it converts 64 bits into 128,
rather than 32 into 64. Use larger data types in the CVD helper and
reuse it.
Reported-by: Ido Plat <Ido.Plat@ibm.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
target/s390x/helper.h | 1 +
target/s390x/tcg/insn-data.h.inc | 1 +
target/s390x/tcg/int_helper.c | 11 ++++++++---
target/s390x/tcg/translate.c | 8 ++++++++
4 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 05102578fc9..332a9a9c632 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -89,6 +89,7 @@ DEF_HELPER_FLAGS_2(sqeb, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_2(sqdb, TCG_CALL_NO_WG, i64, env, i64)
DEF_HELPER_FLAGS_2(sqxb, TCG_CALL_NO_WG, i128, env, i128)
DEF_HELPER_FLAGS_1(cvd, TCG_CALL_NO_RWG_SE, i64, s32)
+DEF_HELPER_FLAGS_1(cvdg, TCG_CALL_NO_RWG_SE, i128, s64)
DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_WG, void, env, i32, i64, i64)
DEF_HELPER_FLAGS_4(pka, TCG_CALL_NO_WG, void, env, i64, i64, i32)
DEF_HELPER_FLAGS_4(pku, TCG_CALL_NO_WG, void, env, i64, i64, i32)
diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
index 2f07f39d9cb..388dcb8dbbc 100644
--- a/target/s390x/tcg/insn-data.h.inc
+++ b/target/s390x/tcg/insn-data.h.inc
@@ -296,6 +296,7 @@
/* CONVERT TO DECIMAL */
C(0x4e00, CVD, RX_a, Z, r1_o, a2, 0, 0, cvd, 0)
C(0xe326, CVDY, RXY_a, LD, r1_o, a2, 0, 0, cvd, 0)
+ C(0xe32e, CVDG, RXY_a, Z, r1_o, a2, 0, 0, cvdg, 0)
/* CONVERT TO FIXED */
F(0xb398, CFEBR, RRF_e, Z, 0, e2, new, r1_32, cfeb, 0, IF_BFP)
F(0xb399, CFDBR, RRF_e, Z, 0, f2, new, r1_32, cfdb, 0, IF_BFP)
diff --git a/target/s390x/tcg/int_helper.c b/target/s390x/tcg/int_helper.c
index eb8e6dd1b57..defb8fc7681 100644
--- a/target/s390x/tcg/int_helper.c
+++ b/target/s390x/tcg/int_helper.c
@@ -99,10 +99,15 @@ Int128 HELPER(divu64)(CPUS390XState *env, uint64_t ah, uint64_t al, uint64_t b)
}
uint64_t HELPER(cvd)(int32_t reg)
+{
+ return helper_cvdg(reg);
+}
+
+Int128 HELPER(cvdg)(int64_t reg)
{
/* positive 0 */
- uint64_t dec = 0x0c;
- int64_t bin = reg;
+ Int128 dec = 0x0c;
+ Int128 bin = reg;
int shift;
if (bin < 0) {
@@ -110,7 +115,7 @@ uint64_t HELPER(cvd)(int32_t reg)
dec = 0x0d;
}
- for (shift = 4; (shift < 64) && bin; shift += 4) {
+ for (shift = 4; (shift < 128) && bin; shift += 4) {
dec |= (bin % 10) << shift;
bin /= 10;
}
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
index 8df00b7df9f..2d417337695 100644
--- a/target/s390x/tcg/translate.c
+++ b/target/s390x/tcg/translate.c
@@ -2233,6 +2233,14 @@ static DisasJumpType op_cvd(DisasContext *s, DisasOps *o)
return DISAS_NEXT;
}
+static DisasJumpType op_cvdg(DisasContext *s, DisasOps *o)
+{
+ TCGv_i128 t = tcg_temp_new_i128();
+ gen_helper_cvdg(t, o->in1);
+ tcg_gen_qemu_st_i128(t, o->in2, get_mem_index(s), MO_TE | MO_128);
+ return DISAS_NEXT;
+}
+
static DisasJumpType op_ct(DisasContext *s, DisasOps *o)
{
int m3 = get_field(s, m3);
--
2.43.0
next prev parent reply other threads:[~2024-01-15 20:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-15 20:21 [PATCH 0/2] target/s390x: Emulate CVDG Ilya Leoshkevich
2024-01-15 20:21 ` Ilya Leoshkevich [this message]
2024-01-18 12:40 ` [PATCH 1/2] " Thomas Huth
2024-01-18 21:12 ` Richard Henderson
2024-01-19 10:40 ` Ilya Leoshkevich
2024-01-15 20:21 ` [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL Ilya Leoshkevich
2024-01-18 13:20 ` Thomas Huth
2024-01-18 17:28 ` [PATCH 0/2] target/s390x: Emulate CVDG Thomas Huth
2024-01-25 12:47 ` Ilya Leoshkevich
2024-01-25 13:02 ` Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240115202308.1930675-2-iii@linux.ibm.com \
--to=iii@linux.ibm.com \
--cc=Ido.Plat@ibm.com \
--cc=david@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).