qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm
@ 2023-04-13 19:00 Shivaprasad G Bhat
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Shivaprasad G Bhat @ 2023-04-13 19:00 UTC (permalink / raw)
  To: philmd, richard.henderson, danielhb413, lucas.araujo, qemu-ppc,
	clg, david, groug, qemu-ppc
  Cc: john_platts, sbhat, qemu-devel

While debugging gitlab issue[1] 1536, I happen to try the
vextract[X]m instructions on the real hardware. The test
used in [1] is failing for vextractdm.

On debugging it is seen, in function do_extractm() the
mask is calculated as dup_const(1 << (element_width - 1)).
'1' being signed int works fine for MO_8,16,32. For MO_64,
on PPC64 host this ends up becoming 0 on compilation. The
vextractdm uses MO_64, and it ends up having mask as 0.

The first patch here fixes that by explicitly using
1ULL instead of signed int 1 like its used everywhere else.
Second patch introduces the test case from [1] into qemu
tcg/ppc64 along with fixes/tweaks to make it work for both
big and little-endian targets.

Let me know if both patches should be squashed into single
patch. Checkpatch flagged me to avoid use of __BYTE_ORDER__
in the test file(second patch), however I see it being
used in multiarch/sha1.c also this being arch specific
test, I think it is appropriate to use it here. Let me
know if otherwise.

References:
[1] : https://gitlab.com/qemu-project/qemu/-/issues/1536

---

Shivaprasad G Bhat (2):
      tcg: ppc64: Fix mask generation for vextractdm
      tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions


 target/ppc/translate/vmx-impl.c.inc |  2 +-
 tests/tcg/ppc64/Makefile.target     |  6 +++-
 tests/tcg/ppc64/vector.c            | 50 +++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 2 deletions(-)
 create mode 100644 tests/tcg/ppc64/vector.c

--
Signature



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

* [PATCH 1/2] tcg: ppc64: Fix mask generation for vextractdm
  2023-04-13 19:00 [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Shivaprasad G Bhat
@ 2023-04-13 19:01 ` Shivaprasad G Bhat
  2023-05-02  9:03   ` Alex Bennée
                     ` (2 more replies)
  2023-04-13 19:01 ` [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions Shivaprasad G Bhat
  2023-05-03 14:31 ` [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Daniel Henrique Barboza
  2 siblings, 3 replies; 10+ messages in thread
From: Shivaprasad G Bhat @ 2023-04-13 19:01 UTC (permalink / raw)
  To: philmd, richard.henderson, danielhb413, lucas.araujo, qemu-ppc,
	clg, david, groug, qemu-ppc
  Cc: john_platts, sbhat, qemu-devel

In function do_extractm() the mask is calculated as
dup_const(1 << (element_width - 1)). '1' being signed int
works fine for MO_8,16,32. For MO_64, on PPC64 host
this ends up becoming 0 on compilation. The vextractdm
uses MO_64, and it ends up having mask as 0.

Explicitly use 1ULL instead of signed int 1 like its
used everywhere else.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
---
 target/ppc/translate/vmx-impl.c.inc |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
index 112233b541..c8712dd7d8 100644
--- a/target/ppc/translate/vmx-impl.c.inc
+++ b/target/ppc/translate/vmx-impl.c.inc
@@ -2058,7 +2058,7 @@ static bool trans_VEXPANDQM(DisasContext *ctx, arg_VX_tb *a)
 static bool do_vextractm(DisasContext *ctx, arg_VX_tb *a, unsigned vece)
 {
     const uint64_t elem_width = 8 << vece, elem_count_half = 8 >> vece,
-                   mask = dup_const(vece, 1 << (elem_width - 1));
+                   mask = dup_const(vece, 1ULL << (elem_width - 1));
     uint64_t i, j;
     TCGv_i64 lo, hi, t0, t1;
 




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

* [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions
  2023-04-13 19:00 [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Shivaprasad G Bhat
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
@ 2023-04-13 19:01 ` Shivaprasad G Bhat
  2023-05-02  7:05   ` Cédric Le Goater
  2023-05-02 15:05   ` Lucas Mateus Martins Araujo e Castro
  2023-05-03 14:31 ` [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Daniel Henrique Barboza
  2 siblings, 2 replies; 10+ messages in thread
From: Shivaprasad G Bhat @ 2023-04-13 19:01 UTC (permalink / raw)
  To: philmd, richard.henderson, danielhb413, lucas.araujo, qemu-ppc,
	clg, david, groug, qemu-ppc
  Cc: john_platts, sbhat, qemu-devel

Add test for vextractbm, vextractwm, vextractdm and vextractqm
instructions. Test works for both qemu-ppc64 and qemu-ppc64le.

Based on the test case written by John Platts posted at [1]

References:
[1]: https://gitlab.com/qemu-project/qemu/-/issues/1536

Signed-off-by: John Platts <john_platts@hotmail.com>
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
---
 tests/tcg/ppc64/Makefile.target |    6 ++++-
 tests/tcg/ppc64/vector.c        |   50 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 tests/tcg/ppc64/vector.c

diff --git a/tests/tcg/ppc64/Makefile.target b/tests/tcg/ppc64/Makefile.target
index f081f1c683..4fd543ce28 100644
--- a/tests/tcg/ppc64/Makefile.target
+++ b/tests/tcg/ppc64/Makefile.target
@@ -20,7 +20,7 @@ PPC64_TESTS += mtfsf
 PPC64_TESTS += mffsce
 
 ifneq ($(CROSS_CC_HAS_POWER10),)
-PPC64_TESTS += byte_reverse sha512-vector
+PPC64_TESTS += byte_reverse sha512-vector vector
 endif
 byte_reverse: CFLAGS += -mcpu=power10
 run-byte_reverse: QEMU_OPTS+=-cpu POWER10
@@ -33,6 +33,10 @@ sha512-vector: sha512.c
 run-sha512-vector: QEMU_OPTS+=-cpu POWER10
 run-plugin-sha512-vector-with-%: QEMU_OPTS+=-cpu POWER10
 
+vector: CFLAGS += -mcpu=power10
+run-vector: QEMU_OPTS += -cpu POWER10
+run-plugin-vector-with-%: QEMU_OPTS += -cpu POWER10
+
 PPC64_TESTS += signal_save_restore_xer
 PPC64_TESTS += xxspltw
 
diff --git a/tests/tcg/ppc64/vector.c b/tests/tcg/ppc64/vector.c
new file mode 100644
index 0000000000..3cb2b88c87
--- /dev/null
+++ b/tests/tcg/ppc64/vector.c
@@ -0,0 +1,50 @@
+#include <assert.h>
+#include <stdint.h>
+
+int main(void)
+{
+    unsigned int result_wi;
+    vector unsigned char vbc_bi_src = { 0xFF, 0xFF, 0, 0xFF, 0xFF, 0xFF,
+                                        0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0,
+                                        0, 0xFF, 0xFF};
+    vector unsigned short vbc_hi_src = { 0xFFFF, 0, 0, 0xFFFF,
+                                         0, 0, 0xFFFF, 0xFFFF};
+    vector unsigned int vbc_wi_src = {0, 0, 0xFFFFFFFF, 0xFFFFFFFF};
+    vector unsigned long long vbc_di_src = {0xFFFFFFFFFFFFFFFF, 0};
+    vector __uint128_t vbc_qi_src;
+
+    asm("vextractbm %0, %1" : "=r" (result_wi) : "v" (vbc_bi_src));
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    assert(result_wi == 0b1101111111000011);
+#else
+    assert(result_wi == 0b1100001111111011);
+#endif
+
+    asm("vextracthm %0, %1" : "=r" (result_wi) : "v" (vbc_hi_src));
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    assert(result_wi == 0b10010011);
+#else
+    assert(result_wi == 0b11001001);
+#endif
+
+    asm("vextractwm %0, %1" : "=r" (result_wi) : "v" (vbc_wi_src));
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    assert(result_wi == 0b0011);
+#else
+    assert(result_wi == 0b1100);
+#endif
+
+    asm("vextractdm %0, %1" : "=r" (result_wi) : "v" (vbc_di_src));
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    assert(result_wi == 0b10);
+#else
+    assert(result_wi == 0b01);
+#endif
+
+    vbc_qi_src[0] = 0x1;
+    vbc_qi_src[0] = vbc_qi_src[0] << 127;
+    asm("vextractqm %0, %1" : "=r" (result_wi) : "v" (vbc_qi_src));
+    assert(result_wi == 0b1);
+
+    return 0;
+}




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

* Re: [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions
  2023-04-13 19:01 ` [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions Shivaprasad G Bhat
@ 2023-05-02  7:05   ` Cédric Le Goater
  2023-05-04  5:17     ` Shivaprasad G Bhat
  2023-05-02 15:05   ` Lucas Mateus Martins Araujo e Castro
  1 sibling, 1 reply; 10+ messages in thread
From: Cédric Le Goater @ 2023-05-02  7:05 UTC (permalink / raw)
  To: Shivaprasad G Bhat, philmd, richard.henderson, danielhb413,
	lucas.araujo, qemu-ppc, david, groug
  Cc: john_platts, qemu-devel

On 4/13/23 21:01, Shivaprasad G Bhat wrote:
> Add test for vextractbm, vextractwm, vextractdm and vextractqm
> instructions. Test works for both qemu-ppc64 and qemu-ppc64le.
> 
> Based on the test case written by John Platts posted at [1]
> 
> References:
> [1]: https://gitlab.com/qemu-project/qemu/-/issues/1536

Gitlab issues should be referenced as :

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1536

However, this patch adds a test, not a fix. So it is the previous patch
which should be annotated as resolving the issue.

Also, I think the code should be using  HOST_BIG_ENDIAN instead of
__ORDER_BIG_ENDIAN__

Thanks,

C.

> 
> Signed-off-by: John Platts <john_platts@hotmail.com>
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> ---
>   tests/tcg/ppc64/Makefile.target |    6 ++++-
>   tests/tcg/ppc64/vector.c        |   50 +++++++++++++++++++++++++++++++++++++++
>   2 files changed, 55 insertions(+), 1 deletion(-)
>   create mode 100644 tests/tcg/ppc64/vector.c
> 
> diff --git a/tests/tcg/ppc64/Makefile.target b/tests/tcg/ppc64/Makefile.target
> index f081f1c683..4fd543ce28 100644
> --- a/tests/tcg/ppc64/Makefile.target
> +++ b/tests/tcg/ppc64/Makefile.target
> @@ -20,7 +20,7 @@ PPC64_TESTS += mtfsf
>   PPC64_TESTS += mffsce
>   
>   ifneq ($(CROSS_CC_HAS_POWER10),)
> -PPC64_TESTS += byte_reverse sha512-vector
> +PPC64_TESTS += byte_reverse sha512-vector vector
>   endif
>   byte_reverse: CFLAGS += -mcpu=power10
>   run-byte_reverse: QEMU_OPTS+=-cpu POWER10
> @@ -33,6 +33,10 @@ sha512-vector: sha512.c
>   run-sha512-vector: QEMU_OPTS+=-cpu POWER10
>   run-plugin-sha512-vector-with-%: QEMU_OPTS+=-cpu POWER10
>   
> +vector: CFLAGS += -mcpu=power10
> +run-vector: QEMU_OPTS += -cpu POWER10
> +run-plugin-vector-with-%: QEMU_OPTS += -cpu POWER10
> +
>   PPC64_TESTS += signal_save_restore_xer
>   PPC64_TESTS += xxspltw
>   
> diff --git a/tests/tcg/ppc64/vector.c b/tests/tcg/ppc64/vector.c
> new file mode 100644
> index 0000000000..3cb2b88c87
> --- /dev/null
> +++ b/tests/tcg/ppc64/vector.c
> @@ -0,0 +1,50 @@
> +#include <assert.h>
> +#include <stdint.h>
> +
> +int main(void)
> +{
> +    unsigned int result_wi;
> +    vector unsigned char vbc_bi_src = { 0xFF, 0xFF, 0, 0xFF, 0xFF, 0xFF,
> +                                        0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0,
> +                                        0, 0xFF, 0xFF};
> +    vector unsigned short vbc_hi_src = { 0xFFFF, 0, 0, 0xFFFF,
> +                                         0, 0, 0xFFFF, 0xFFFF};
> +    vector unsigned int vbc_wi_src = {0, 0, 0xFFFFFFFF, 0xFFFFFFFF};
> +    vector unsigned long long vbc_di_src = {0xFFFFFFFFFFFFFFFF, 0};
> +    vector __uint128_t vbc_qi_src;
> +
> +    asm("vextractbm %0, %1" : "=r" (result_wi) : "v" (vbc_bi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b1101111111000011);
> +#else
> +    assert(result_wi == 0b1100001111111011);
> +#endif
> +
> +    asm("vextracthm %0, %1" : "=r" (result_wi) : "v" (vbc_hi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b10010011);
> +#else
> +    assert(result_wi == 0b11001001);
> +#endif
> +
> +    asm("vextractwm %0, %1" : "=r" (result_wi) : "v" (vbc_wi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b0011);
> +#else
> +    assert(result_wi == 0b1100);
> +#endif
> +
> +    asm("vextractdm %0, %1" : "=r" (result_wi) : "v" (vbc_di_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b10);
> +#else
> +    assert(result_wi == 0b01);
> +#endif
> +
> +    vbc_qi_src[0] = 0x1;
> +    vbc_qi_src[0] = vbc_qi_src[0] << 127;
> +    asm("vextractqm %0, %1" : "=r" (result_wi) : "v" (vbc_qi_src));
> +    assert(result_wi == 0b1);
> +
> +    return 0;
> +}
> 
> 



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

* Re: [PATCH 1/2] tcg: ppc64: Fix mask generation for vextractdm
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
@ 2023-05-02  9:03   ` Alex Bennée
  2023-05-02 10:50   ` Richard Henderson
  2023-05-02 14:02   ` Lucas Mateus Martins Araujo e Castro
  2 siblings, 0 replies; 10+ messages in thread
From: Alex Bennée @ 2023-05-02  9:03 UTC (permalink / raw)
  To: Shivaprasad G Bhat
  Cc: philmd, richard.henderson, danielhb413, lucas.araujo, clg, david,
	groug, qemu-ppc, john_platts, qemu-devel


Shivaprasad G Bhat <sbhat@linux.ibm.com> writes:

> In function do_extractm() the mask is calculated as
> dup_const(1 << (element_width - 1)). '1' being signed int
> works fine for MO_8,16,32. For MO_64, on PPC64 host
> this ends up becoming 0 on compilation. The vextractdm
> uses MO_64, and it ends up having mask as 0.
>
> Explicitly use 1ULL instead of signed int 1 like its
> used everywhere else.
>
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


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

* Re: [PATCH 1/2] tcg: ppc64: Fix mask generation for vextractdm
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
  2023-05-02  9:03   ` Alex Bennée
@ 2023-05-02 10:50   ` Richard Henderson
  2023-05-02 14:02   ` Lucas Mateus Martins Araujo e Castro
  2 siblings, 0 replies; 10+ messages in thread
From: Richard Henderson @ 2023-05-02 10:50 UTC (permalink / raw)
  To: Shivaprasad G Bhat, philmd, danielhb413, lucas.araujo, qemu-ppc,
	clg, david, groug
  Cc: john_platts, qemu-devel

On 4/13/23 20:01, Shivaprasad G Bhat wrote:
> In function do_extractm() the mask is calculated as
> dup_const(1 << (element_width - 1)). '1' being signed int
> works fine for MO_8,16,32. For MO_64, on PPC64 host
> this ends up becoming 0 on compilation. The vextractdm
> uses MO_64, and it ends up having mask as 0.
> 
> Explicitly use 1ULL instead of signed int 1 like its
> used everywhere else.
> 
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> ---
>   target/ppc/translate/vmx-impl.c.inc |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
> index 112233b541..c8712dd7d8 100644
> --- a/target/ppc/translate/vmx-impl.c.inc
> +++ b/target/ppc/translate/vmx-impl.c.inc
> @@ -2058,7 +2058,7 @@ static bool trans_VEXPANDQM(DisasContext *ctx, arg_VX_tb *a)
>   static bool do_vextractm(DisasContext *ctx, arg_VX_tb *a, unsigned vece)
>   {
>       const uint64_t elem_width = 8 << vece, elem_count_half = 8 >> vece,
> -                   mask = dup_const(vece, 1 << (elem_width - 1));
> +                   mask = dup_const(vece, 1ULL << (elem_width - 1));

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 1/2] tcg: ppc64: Fix mask generation for vextractdm
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
  2023-05-02  9:03   ` Alex Bennée
  2023-05-02 10:50   ` Richard Henderson
@ 2023-05-02 14:02   ` Lucas Mateus Martins Araujo e Castro
  2 siblings, 0 replies; 10+ messages in thread
From: Lucas Mateus Martins Araujo e Castro @ 2023-05-02 14:02 UTC (permalink / raw)
  To: Shivaprasad G Bhat, philmd, richard.henderson, danielhb413,
	qemu-ppc, clg, david, groug
  Cc: john_platts, qemu-devel



On 13/04/2023 16:01, Shivaprasad G Bhat wrote:

> In function do_extractm() the mask is calculated as
> dup_const(1 << (element_width - 1)). '1' being signed int
> works fine for MO_8,16,32. For MO_64, on PPC64 host
> this ends up becoming 0 on compilation. The vextractdm
> uses MO_64, and it ends up having mask as 0.
> 
> Explicitly use 1ULL instead of signed int 1 like its
> used everywhere else.
> 
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> ---
>   target/ppc/translate/vmx-impl.c.inc |    2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
> index 112233b541..c8712dd7d8 100644
> --- a/target/ppc/translate/vmx-impl.c.inc
> +++ b/target/ppc/translate/vmx-impl.c.inc
> @@ -2058,7 +2058,7 @@ static bool trans_VEXPANDQM(DisasContext *ctx, arg_VX_tb *a)
>   static bool do_vextractm(DisasContext *ctx, arg_VX_tb *a, unsigned vece)
>   {
>       const uint64_t elem_width = 8 << vece, elem_count_half = 8 >> vece,
> -                   mask = dup_const(vece, 1 << (elem_width - 1));
> +                   mask = dup_const(vece, 1ULL << (elem_width - 1));
>       uint64_t i, j;
>       TCGv_i64 lo, hi, t0, t1;
> 
> 
> 

Reviewed-by: Lucas Mateus Castro <lucas.araujo@eldorado.org.br>
-- 
Lucas Mateus M. Araujo e Castro
Instituto de Pesquisas ELDORADO
<https://www.eldorado.org.br/?utm_campaign=assinatura_de_e-mail&utm_medium=email&utm_source=RD+Station>
Departamento Computação Embarcada
Analista de Software Junior
Aviso Legal - Disclaimer <https://www.eldorado.org.br/disclaimer.html>

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

* Re: [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions
  2023-04-13 19:01 ` [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions Shivaprasad G Bhat
  2023-05-02  7:05   ` Cédric Le Goater
@ 2023-05-02 15:05   ` Lucas Mateus Martins Araujo e Castro
  1 sibling, 0 replies; 10+ messages in thread
From: Lucas Mateus Martins Araujo e Castro @ 2023-05-02 15:05 UTC (permalink / raw)
  To: Shivaprasad G Bhat, philmd, richard.henderson, danielhb413,
	qemu-ppc, clg, david, groug
  Cc: john_platts, qemu-devel



On 13/04/2023 16:01, Shivaprasad G Bhat wrote:

> Add test for vextractbm, vextractwm, vextractdm and vextractqm
> instructions. Test works for both qemu-ppc64 and qemu-ppc64le.
> 
> Based on the test case written by John Platts posted at [1]
> 
> References:
> [1]: https://gitlab.com/qemu-project/qemu/-/issues/1536
> 
> Signed-off-by: John Platts <john_platts@hotmail.com>
> Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
> ---
>   tests/tcg/ppc64/Makefile.target |    6 ++++-
>   tests/tcg/ppc64/vector.c        |   50 +++++++++++++++++++++++++++++++++++++++
>   2 files changed, 55 insertions(+), 1 deletion(-)
>   create mode 100644 tests/tcg/ppc64/vector.c
> 
> diff --git a/tests/tcg/ppc64/Makefile.target b/tests/tcg/ppc64/Makefile.target
> index f081f1c683..4fd543ce28 100644
> --- a/tests/tcg/ppc64/Makefile.target
> +++ b/tests/tcg/ppc64/Makefile.target
> @@ -20,7 +20,7 @@ PPC64_TESTS += mtfsf
>   PPC64_TESTS += mffsce
> 
>   ifneq ($(CROSS_CC_HAS_POWER10),)
> -PPC64_TESTS += byte_reverse sha512-vector
> +PPC64_TESTS += byte_reverse sha512-vector vector
>   endif
>   byte_reverse: CFLAGS += -mcpu=power10
>   run-byte_reverse: QEMU_OPTS+=-cpu POWER10
> @@ -33,6 +33,10 @@ sha512-vector: sha512.c
>   run-sha512-vector: QEMU_OPTS+=-cpu POWER10
>   run-plugin-sha512-vector-with-%: QEMU_OPTS+=-cpu POWER10
> 
> +vector: CFLAGS += -mcpu=power10
> +run-vector: QEMU_OPTS += -cpu POWER10
> +run-plugin-vector-with-%: QEMU_OPTS += -cpu POWER10
> +
>   PPC64_TESTS += signal_save_restore_xer
>   PPC64_TESTS += xxspltw
> 
> diff --git a/tests/tcg/ppc64/vector.c b/tests/tcg/ppc64/vector.c
> new file mode 100644
> index 0000000000..3cb2b88c87
> --- /dev/null
> +++ b/tests/tcg/ppc64/vector.c
> @@ -0,0 +1,50 @@
> +#include <assert.h>
> +#include <stdint.h>
> +
> +int main(void)
> +{
> +    unsigned int result_wi;
> +    vector unsigned char vbc_bi_src = { 0xFF, 0xFF, 0, 0xFF, 0xFF, 0xFF,
> +                                        0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0,
> +                                        0, 0xFF, 0xFF};
> +    vector unsigned short vbc_hi_src = { 0xFFFF, 0, 0, 0xFFFF,
> +                                         0, 0, 0xFFFF, 0xFFFF};
> +    vector unsigned int vbc_wi_src = {0, 0, 0xFFFFFFFF, 0xFFFFFFFF};
> +    vector unsigned long long vbc_di_src = {0xFFFFFFFFFFFFFFFF, 0};
> +    vector __uint128_t vbc_qi_src;
> +
> +    asm("vextractbm %0, %1" : "=r" (result_wi) : "v" (vbc_bi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b1101111111000011);
> +#else
> +    assert(result_wi == 0b1100001111111011);
> +#endif
> +
> +    asm("vextracthm %0, %1" : "=r" (result_wi) : "v" (vbc_hi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b10010011);
> +#else
> +    assert(result_wi == 0b11001001);
> +#endif
> +
> +    asm("vextractwm %0, %1" : "=r" (result_wi) : "v" (vbc_wi_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b0011);
> +#else
> +    assert(result_wi == 0b1100);
> +#endif
> +
> +    asm("vextractdm %0, %1" : "=r" (result_wi) : "v" (vbc_di_src));
> +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
> +    assert(result_wi == 0b10);
> +#else
> +    assert(result_wi == 0b01);
> +#endif
> +
> +    vbc_qi_src[0] = 0x1;
> +    vbc_qi_src[0] = vbc_qi_src[0] << 127;
> +    asm("vextractqm %0, %1" : "=r" (result_wi) : "v" (vbc_qi_src));
> +    assert(result_wi == 0b1);
> +
> +    return 0;
> +}
> 
> 

Reviewed-by: Lucas Mateus Castro <lucas.araujo@eldorado.org.br>
-- 
Lucas Mateus M. Araujo e Castro
Instituto de Pesquisas ELDORADO
<https://www.eldorado.org.br/?utm_campaign=assinatura_de_e-mail&utm_medium=email&utm_source=RD+Station>
Departamento Computação Embarcada
Analista de Software Junior
Aviso Legal - Disclaimer <https://www.eldorado.org.br/disclaimer.html>

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

* Re: [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm
  2023-04-13 19:00 [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Shivaprasad G Bhat
  2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
  2023-04-13 19:01 ` [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions Shivaprasad G Bhat
@ 2023-05-03 14:31 ` Daniel Henrique Barboza
  2 siblings, 0 replies; 10+ messages in thread
From: Daniel Henrique Barboza @ 2023-05-03 14:31 UTC (permalink / raw)
  To: Shivaprasad G Bhat, philmd, richard.henderson, lucas.araujo,
	qemu-ppc, clg, david, groug
  Cc: john_platts, qemu-devel

Shiva,

I just queued patch 1 adding this line in the commit msg:

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1536

This was mentioned by Cedric in patch 2. Also, speaking of patch 2, take a look
on Cedric's review and see if it's applicable or not.

I plan to send a ppc pull request at the end of the week.


Thanks,


Daniel


On 4/13/23 16:00, Shivaprasad G Bhat wrote:
> While debugging gitlab issue[1] 1536, I happen to try the
> vextract[X]m instructions on the real hardware. The test
> used in [1] is failing for vextractdm.
> 
> On debugging it is seen, in function do_extractm() the
> mask is calculated as dup_const(1 << (element_width - 1)).
> '1' being signed int works fine for MO_8,16,32. For MO_64,
> on PPC64 host this ends up becoming 0 on compilation. The
> vextractdm uses MO_64, and it ends up having mask as 0.
> 
> The first patch here fixes that by explicitly using
> 1ULL instead of signed int 1 like its used everywhere else.
> Second patch introduces the test case from [1] into qemu
> tcg/ppc64 along with fixes/tweaks to make it work for both
> big and little-endian targets.
> 
> Let me know if both patches should be squashed into single
> patch. Checkpatch flagged me to avoid use of __BYTE_ORDER__
> in the test file(second patch), however I see it being
> used in multiarch/sha1.c also this being arch specific
> test, I think it is appropriate to use it here. Let me
> know if otherwise.
> 
> References:
> [1] : https://gitlab.com/qemu-project/qemu/-/issues/1536
> 
> ---
> 
> Shivaprasad G Bhat (2):
>        tcg: ppc64: Fix mask generation for vextractdm
>        tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions
> 
> 
>   target/ppc/translate/vmx-impl.c.inc |  2 +-
>   tests/tcg/ppc64/Makefile.target     |  6 +++-
>   tests/tcg/ppc64/vector.c            | 50 +++++++++++++++++++++++++++++
>   3 files changed, 56 insertions(+), 2 deletions(-)
>   create mode 100644 tests/tcg/ppc64/vector.c
> 
> --
> Signature
> 


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

* Re: [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions
  2023-05-02  7:05   ` Cédric Le Goater
@ 2023-05-04  5:17     ` Shivaprasad G Bhat
  0 siblings, 0 replies; 10+ messages in thread
From: Shivaprasad G Bhat @ 2023-05-04  5:17 UTC (permalink / raw)
  To: Cédric Le Goater, philmd, richard.henderson, danielhb413,
	lucas.araujo, qemu-ppc, david, groug
  Cc: john_platts, qemu-devel

On 5/2/23 12:35, Cédric Le Goater wrote:
> On 4/13/23 21:01, Shivaprasad G Bhat wrote:
>> Add test for vextractbm, vextractwm, vextractdm and vextractqm
>> instructions. Test works for both qemu-ppc64 and qemu-ppc64le.
>>
>> Based on the test case written by John Platts posted at [1]
>>
>> References:
>> [1]: https://gitlab.com/qemu-project/qemu/-/issues/1536
>
> Gitlab issues should be referenced as :
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1536
>
> However, this patch adds a test, not a fix. So it is the previous patch
> which should be annotated as resolving the issue.
>
> Also, I think the code should be using  HOST_BIG_ENDIAN instead of
> __ORDER_BIG_ENDIAN__
>
Thanks for the comments Cédric.

Fixing these in v2.

Thanks,

Shivaprasad




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

end of thread, other threads:[~2023-05-04  5:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-13 19:00 [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Shivaprasad G Bhat
2023-04-13 19:01 ` [PATCH 1/2] " Shivaprasad G Bhat
2023-05-02  9:03   ` Alex Bennée
2023-05-02 10:50   ` Richard Henderson
2023-05-02 14:02   ` Lucas Mateus Martins Araujo e Castro
2023-04-13 19:01 ` [PATCH 2/2] tests: tcg: ppc64: Add tests for Vector Extract Mask Instructions Shivaprasad G Bhat
2023-05-02  7:05   ` Cédric Le Goater
2023-05-04  5:17     ` Shivaprasad G Bhat
2023-05-02 15:05   ` Lucas Mateus Martins Araujo e Castro
2023-05-03 14:31 ` [PATCH 0/2] tcg: ppc64: Fix mask generation for vextractdm Daniel Henrique Barboza

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