qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] target/s390x: Emulate CVDG
@ 2024-01-15 20:21 Ilya Leoshkevich
  2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Ilya Leoshkevich @ 2024-01-15 20:21 UTC (permalink / raw)
  To: Thomas Huth, Richard Henderson, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ilya Leoshkevich

Hi,

Ido reported that we are missing the CVDG emulation (which is very
similar to the existing CVD emulation). This series adds it along with
a test.

Best regards,
Ilya


Ilya Leoshkevich (2):
  target/s390x: Emulate CVDG
  tests/tcg/s390x: Test CONVERT TO DECIMAL

 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 ++++++
 tests/tcg/s390x/Makefile.target  |  1 +
 tests/tcg/s390x/cvd.c            | 42 ++++++++++++++++++++++++++++++++
 6 files changed, 61 insertions(+), 3 deletions(-)
 create mode 100644 tests/tcg/s390x/cvd.c

-- 
2.43.0



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] target/s390x: Emulate CVDG
  2024-01-15 20:21 [PATCH 0/2] target/s390x: Emulate CVDG Ilya Leoshkevich
@ 2024-01-15 20:21 ` Ilya Leoshkevich
  2024-01-18 12:40   ` Thomas Huth
  2024-01-18 21:12   ` Richard Henderson
  2024-01-15 20:21 ` [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL Ilya Leoshkevich
  2024-01-18 17:28 ` [PATCH 0/2] target/s390x: Emulate CVDG Thomas Huth
  2 siblings, 2 replies; 10+ messages in thread
From: Ilya Leoshkevich @ 2024-01-15 20:21 UTC (permalink / raw)
  To: Thomas Huth, Richard Henderson, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ilya Leoshkevich, Ido Plat

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



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL
  2024-01-15 20:21 [PATCH 0/2] target/s390x: Emulate CVDG Ilya Leoshkevich
  2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
@ 2024-01-15 20:21 ` Ilya Leoshkevich
  2024-01-18 13:20   ` Thomas Huth
  2024-01-18 17:28 ` [PATCH 0/2] target/s390x: Emulate CVDG Thomas Huth
  2 siblings, 1 reply; 10+ messages in thread
From: Ilya Leoshkevich @ 2024-01-15 20:21 UTC (permalink / raw)
  To: Thomas Huth, Richard Henderson, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ilya Leoshkevich

Check the CVD's and CVDG's corner cases.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
 tests/tcg/s390x/Makefile.target |  1 +
 tests/tcg/s390x/cvd.c           | 42 +++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 tests/tcg/s390x/cvd.c

diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target
index 30994dcf9c2..04e4bddd83d 100644
--- a/tests/tcg/s390x/Makefile.target
+++ b/tests/tcg/s390x/Makefile.target
@@ -45,6 +45,7 @@ TESTS+=clc
 TESTS+=laalg
 TESTS+=add-logical-with-carry
 TESTS+=lae
+TESTS+=cvd
 
 cdsg: CFLAGS+=-pthread
 cdsg: LDFLAGS+=-pthread
diff --git a/tests/tcg/s390x/cvd.c b/tests/tcg/s390x/cvd.c
new file mode 100644
index 00000000000..4d12282c6aa
--- /dev/null
+++ b/tests/tcg/s390x/cvd.c
@@ -0,0 +1,42 @@
+/*
+ * Test the CONVERT TO DECIMAL instruction.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#include <assert.h>
+#include <stdint.h>
+
+static uint64_t cvd(int32_t x)
+{
+    uint64_t ret;
+
+    asm("cvd %[x],%[ret]" : [ret] "=R" (ret) : [x] "r" (x));
+
+    return ret;
+}
+
+static __uint128_t cvdg(int64_t x)
+{
+    __uint128_t ret;
+
+    asm("cvdg %[x],%[ret]" : [ret] "=T" (ret) : [x] "r" (x));
+
+    return ret;
+}
+
+int main(void)
+{
+    __uint128_t m = (((__uint128_t)0x9223372036854775) << 16) | 0x8070;
+
+    assert(cvd(0) == 0xc);
+    assert(cvd(1) == 0x1c);
+    assert(cvd(-1) == 0x1d);
+    assert(cvd(0x7fffffff) == 0x2147483647c);
+    assert(cvd(-0x7fffffff) == 0x2147483647d);
+
+    assert(cvdg(0) == 0xc);
+    assert(cvdg(1) == 0x1c);
+    assert(cvdg(-1) == 0x1d);
+    assert(cvdg(0x7fffffffffffffff) == (m | 0xc));
+    assert(cvdg(-0x7fffffffffffffff) == (m | 0xd));
+}
-- 
2.43.0



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] target/s390x: Emulate CVDG
  2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
@ 2024-01-18 12:40   ` Thomas Huth
  2024-01-18 21:12   ` Richard Henderson
  1 sibling, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2024-01-18 12:40 UTC (permalink / raw)
  To: Ilya Leoshkevich, Richard Henderson, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ido Plat

On 15/01/2024 21.21, Ilya Leoshkevich wrote:
> 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(-)

Looks sane to me!

Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL
  2024-01-15 20:21 ` [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL Ilya Leoshkevich
@ 2024-01-18 13:20   ` Thomas Huth
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2024-01-18 13:20 UTC (permalink / raw)
  To: Ilya Leoshkevich, Richard Henderson, David Hildenbrand
  Cc: qemu-s390x, qemu-devel

On 15/01/2024 21.21, Ilya Leoshkevich wrote:
> Check the CVD's and CVDG's corner cases.
> 
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
>   tests/tcg/s390x/Makefile.target |  1 +
>   tests/tcg/s390x/cvd.c           | 42 +++++++++++++++++++++++++++++++++
>   2 files changed, 43 insertions(+)
>   create mode 100644 tests/tcg/s390x/cvd.c

Tested-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] target/s390x: Emulate CVDG
  2024-01-15 20:21 [PATCH 0/2] target/s390x: Emulate CVDG Ilya Leoshkevich
  2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
  2024-01-15 20:21 ` [PATCH 2/2] tests/tcg/s390x: Test CONVERT TO DECIMAL Ilya Leoshkevich
@ 2024-01-18 17:28 ` Thomas Huth
  2024-01-25 12:47   ` Ilya Leoshkevich
  2 siblings, 1 reply; 10+ messages in thread
From: Thomas Huth @ 2024-01-18 17:28 UTC (permalink / raw)
  To: Ilya Leoshkevich, qemu-s390x
  Cc: Richard Henderson, David Hildenbrand, qemu-devel

On 15/01/2024 21.21, Ilya Leoshkevich wrote:
> Hi,
> 
> Ido reported that we are missing the CVDG emulation (which is very
> similar to the existing CVD emulation). This series adds it along with
> a test.

Just FYI, your patch made me curious which other instructions we still might 
be missing from chapter 7 in the Principles of Operation... with some shell 
scripting and manual fiddling, I ended up with this list:

0C	BRANCH AND SAVE AND SET MODE		BASSM
0B	BRANCH AND SET MODE			BSM
B21A	COMPARE AND FORM CODEWORD		CFC
B257	COMPARE UNTIL SUBSTRING EQUAL		CUSE
B263	COMPRESSION CALL			CMPSC
4F	CONVERT TO BINARY (32)			CVB
E306	CONVERT TO BINARY (32)			CVBY
E30E	CONVERT TO BINARY (64)			CVBG
B24D	COPY ACCESS				CPYA
EF	LOAD MULTIPLE DISJOINT			LMD
EE	PERFORM LOCKED OPERATION		PLO
B9BF	TRANSLATE AND TEST EXTENDED		TRTE
B9BD	TRANSLATE AND TEST REVERSE EXTENDED	TRTRE
0102	UPDATE TREE				UPT

There are some additional ones from the "Guarded-Storage Facility" and the 
"Transactional-Execution Facility", but these are optional AFAIK.

Some of these (like UPT) really look like sins from the CISC past, I guess 
we'll never need them for running Linux guests :-)

  Thomas



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] target/s390x: Emulate CVDG
  2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
  2024-01-18 12:40   ` Thomas Huth
@ 2024-01-18 21:12   ` Richard Henderson
  2024-01-19 10:40     ` Ilya Leoshkevich
  1 sibling, 1 reply; 10+ messages in thread
From: Richard Henderson @ 2024-01-18 21:12 UTC (permalink / raw)
  To: Ilya Leoshkevich, Thomas Huth, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ido Plat

On 1/16/24 07:21, Ilya Leoshkevich wrote:
> 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;
>       }

None of this will work with the struct version of Int128 -- you need to use the int128_* 
functions for initialization and arithmetic.

I suggest you don't try to share code with CVD.


r~


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Re: [PATCH 1/2] target/s390x: Emulate CVDG
  2024-01-18 21:12   ` Richard Henderson
@ 2024-01-19 10:40     ` Ilya Leoshkevich
  0 siblings, 0 replies; 10+ messages in thread
From: Ilya Leoshkevich @ 2024-01-19 10:40 UTC (permalink / raw)
  To: Richard Henderson, Thomas Huth, David Hildenbrand
  Cc: qemu-s390x, qemu-devel, Ido Plat

On Fri, Jan 19, 2024 at 08:12:18AM +1100, Richard Henderson wrote:
> On 1/16/24 07:21, Ilya Leoshkevich wrote:
> > 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;
> >       }
> 
> None of this will work with the struct version of Int128 -- you need to use
> the int128_* functions for initialization and arithmetic.
> 
> I suggest you don't try to share code with CVD.
> 
> 
> r~

Hi,

I see, --cross-prefix=i686-linux-gnu- is very broken with this patch.
I will send a v2.

Best regards,
Ilya


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] target/s390x: Emulate CVDG
  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
  0 siblings, 1 reply; 10+ messages in thread
From: Ilya Leoshkevich @ 2024-01-25 12:47 UTC (permalink / raw)
  To: Thomas Huth, qemu-s390x; +Cc: Richard Henderson, David Hildenbrand, qemu-devel

On Thu, 2024-01-18 at 18:28 +0100, Thomas Huth wrote:
> On 15/01/2024 21.21, Ilya Leoshkevich wrote:
> > Hi,
> > 
> > Ido reported that we are missing the CVDG emulation (which is very
> > similar to the existing CVD emulation). This series adds it along
> > with
> > a test.
> 
> Just FYI, your patch made me curious which other instructions we
> still might 
> be missing from chapter 7 in the Principles of Operation... with some
> shell 
> scripting and manual fiddling, I ended up with this list:
> 
> 0C	BRANCH AND SAVE AND SET MODE		BASSM
> 0B	BRANCH AND SET MODE			BSM
> B21A	COMPARE AND FORM CODEWORD		CFC
> B257	COMPARE UNTIL SUBSTRING EQUAL		CUSE
> B263	COMPRESSION CALL			CMPSC
> 4F	CONVERT TO BINARY (32)			CVB
> E306	CONVERT TO BINARY (32)			CVBY
> E30E	CONVERT TO BINARY (64)			CVBG
> B24D	COPY ACCESS				CPYA
> EF	LOAD MULTIPLE DISJOINT			LMD
> EE	PERFORM LOCKED OPERATION		PLO
> B9BF	TRANSLATE AND TEST EXTENDED		TRTE
> B9BD	TRANSLATE AND TEST REVERSE EXTENDED	TRTRE
> 0102	UPDATE TREE				UPT
> 
> There are some additional ones from the "Guarded-Storage Facility"
> and the 
> "Transactional-Execution Facility", but these are optional AFAIK.
> 
> Some of these (like UPT) really look like sins from the CISC past, I
> guess 
> we'll never need them for running Linux guests :-)
> 
>   Thomas
> 

Thanks, I'll append this to my TODO list. At least for CVB* there seems
to exist an unfinished patch on the list [1].

[1]
https://lore.kernel.org/qemu-devel/20180821025104.19604-8-pavel.zbitskiy@gmail.com/


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] target/s390x: Emulate CVDG
  2024-01-25 12:47   ` Ilya Leoshkevich
@ 2024-01-25 13:02     ` Thomas Huth
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2024-01-25 13:02 UTC (permalink / raw)
  To: Ilya Leoshkevich, qemu-s390x
  Cc: Richard Henderson, David Hildenbrand, qemu-devel, Pavel Zbitskiy

On 25/01/2024 13.47, Ilya Leoshkevich wrote:
> On Thu, 2024-01-18 at 18:28 +0100, Thomas Huth wrote:
>> On 15/01/2024 21.21, Ilya Leoshkevich wrote:
>>> Hi,
>>>
>>> Ido reported that we are missing the CVDG emulation (which is very
>>> similar to the existing CVD emulation). This series adds it along
>>> with a test.
>>
>> Just FYI, your patch made me curious which other instructions we
>> still might
>> be missing from chapter 7 in the Principles of Operation... with some
>> shell
>> scripting and manual fiddling, I ended up with this list:
>>
>> 0C	BRANCH AND SAVE AND SET MODE		BASSM
>> 0B	BRANCH AND SET MODE			BSM
>> B21A	COMPARE AND FORM CODEWORD		CFC
>> B257	COMPARE UNTIL SUBSTRING EQUAL		CUSE
>> B263	COMPRESSION CALL			CMPSC
>> 4F	CONVERT TO BINARY (32)			CVB
>> E306	CONVERT TO BINARY (32)			CVBY
>> E30E	CONVERT TO BINARY (64)			CVBG
>> B24D	COPY ACCESS				CPYA
>> EF	LOAD MULTIPLE DISJOINT			LMD
>> EE	PERFORM LOCKED OPERATION		PLO
>> B9BF	TRANSLATE AND TEST EXTENDED		TRTE
>> B9BD	TRANSLATE AND TEST REVERSE EXTENDED	TRTRE
>> 0102	UPDATE TREE				UPT
>>
>> There are some additional ones from the "Guarded-Storage Facility"
>> and the
>> "Transactional-Execution Facility", but these are optional AFAIK.
>>
>> Some of these (like UPT) really look like sins from the CISC past, I
>> guess
>> we'll never need them for running Linux guests :-)
>>
>>    Thomas
>>
> 
> Thanks, I'll append this to my TODO list. At least for CVB* there seems
> to exist an unfinished patch on the list [1].
> 
> [1]
> https://lore.kernel.org/qemu-devel/20180821025104.19604-8-pavel.zbitskiy@gmail.com/

Oh, interesting, there was even a v4 that fixed the review feedback:

https://lore.kernel.org/qemu-devel/20180822144039.5796-4-pavel.zbitskiy@gmail.com/

But it seems like this had fallen through the cracks :-(

Maybe we can re-activate it now...

  Thomas



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-01-25 13:03 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-15 20:21 [PATCH 0/2] target/s390x: Emulate CVDG Ilya Leoshkevich
2024-01-15 20:21 ` [PATCH 1/2] " Ilya Leoshkevich
2024-01-18 12:40   ` 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

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).