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