public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: HaoChen Gui <guihaoc@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc r14-10010] rs6000: Fix bcd test case
Date: Thu, 18 Apr 2024 01:41:29 +0000 (GMT)	[thread overview]
Message-ID: <20240418014129.85DC03858D3C@sourceware.org> (raw)

https://gcc.gnu.org/g:58a0b190a256bd2a184554de0fae0031a614ec67

commit r14-10010-g58a0b190a256bd2a184554de0fae0031a614ec67
Author: Haochen Gui <guihaoc@gcc.gnu.org>
Date:   Wed Apr 17 16:39:25 2024 +0800

    rs6000: Fix bcd test case
    
    gcc/testsuite/
            * gcc.target/powerpc/bcd-4.c: Enable the case to be tested on P9.
            Enable the case to be run on big endian.  Fix function maxbcd and
            other misc. problems.

Diff:
---
 gcc/testsuite/gcc.target/powerpc/bcd-4.c | 58 ++++++++++++++++++++++++++++----
 1 file changed, 52 insertions(+), 6 deletions(-)

diff --git a/gcc/testsuite/gcc.target/powerpc/bcd-4.c b/gcc/testsuite/gcc.target/powerpc/bcd-4.c
index 2c8554dfe82..2c7041c4d32 100644
--- a/gcc/testsuite/gcc.target/powerpc/bcd-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/bcd-4.c
@@ -1,7 +1,7 @@
 /* { dg-do run } */
 /* { dg-require-effective-target int128 } */
-/* { dg-require-effective-target power10_hw } */
-/* { dg-options "-mdejagnu-cpu=power10 -O2 -save-temps" } */
+/* { dg-require-effective-target p9vector_hw } */
+/* { dg-options "-mdejagnu-cpu=power9 -O2 -save-temps" } */
 /* { dg-final { scan-assembler-times {\mbcdadd\M} 7 } } */
 /* { dg-final { scan-assembler-times {\mbcdsub\M} 18 } } */
 /* { dg-final { scan-assembler-times {\mbcds\M} 2 } } */
@@ -44,10 +44,20 @@ vector unsigned char maxbcd(unsigned int sign)
   vector unsigned char result;
   int i;
 
+#ifdef __BIG_ENDIAN__
+  for (i = 0; i < 15; i++)
+#else
   for (i = 15; i > 0; i--)
+#endif
     result[i] = 0x99;
 
-  result[0] = sign << 4 | 0x9;
+#ifdef __BIG_ENDIAN__
+  result[15] = 0x90 | sign;
+#else
+  result[0] = 0x90 | sign;
+#endif
+
+  return result;
 }
 
 vector unsigned char num2bcd(long int a, int encoding)
@@ -70,9 +80,17 @@ vector unsigned char num2bcd(long int a, int encoding)
 
   hi = a % 10;   // 1st digit
   a = a / 10;
+#ifdef __BIG_ENDIAN__
+  result[15] = hi << 4| sign;
+#else
   result[0] = hi << 4| sign;
+#endif
 
+#ifdef __BIG_ENDIAN__
+  for (i = 14; i >= 0; i--)
+#else
   for (i = 1; i < 16; i++)
+#endif
     {
       low = a % 10;
       a = a / 10;
@@ -117,7 +135,11 @@ int main ()
     }
 
   /* result should be positive */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_POS0)
+#else
   if ((result[0] & 0xF) != BCD_POS0)
+#endif
 #if DEBUG
       printf("ERROR: __builtin_bcdadd sign of result is %d.  Does not match "
 	     "expected_result = %d\n",
@@ -150,7 +172,11 @@ int main ()
     }
 
   /* Result should be positive, alternate encoding.  */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_POS1)
+#else
   if ((result[0] & 0xF) != BCD_POS1)
+#endif
 #if DEBUG
     printf("ERROR: __builtin_bcdadd sign of result is %d.  Does not "
 	   "match expected_result = %d\n",
@@ -183,7 +209,11 @@ int main ()
     }
 
   /* result should be negative */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_NEG)
+#else
   if ((result[0] & 0xF) != BCD_NEG)
+#endif
 #if DEBUG
     printf("ERROR: __builtin_bcdadd sign, neg of result is %d.  Does not "
 	   "match expected_result = %d\n",
@@ -216,8 +246,12 @@ int main ()
 #endif
     }
 
-  /* result should be positive, alt encoding */
+  /* result should be positive */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_NEG)
+#else
   if ((result[0] & 0xF) != BCD_NEG)
+#endif
 #if DEBUG
     printf("ERROR: __builtin_bcdadd sign, of result is %d.  Does not match "
 	   "expected_result = %d\n",
@@ -250,7 +284,11 @@ int main ()
     }
 
   /* result should be positive */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_POS1)
+#else
   if ((result[0] & 0xF) != BCD_POS1)
+#endif
 #if DEBUG
     printf("ERROR: __builtin_bcdsub sign, result is %d.  Does not match "
 	   "expected_result = %d\n",
@@ -283,7 +321,7 @@ int main ()
     abort();
 #endif
 
-  a = maxbcd(BCD_NEG);
+  a = maxbcd(BCD_POS0);
   b = maxbcd(BCD_NEG);
 
   if (__builtin_bcdsub_ofl (a, b, 0) == 0)
@@ -462,8 +500,12 @@ int main ()
     }
 
   /* result should be positive */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_POS0)
+#else
   if ((result[0] & 0xF) != BCD_POS0)
-#if 0
+#endif
+#if DEBUG
     printf("ERROR: __builtin_bcdmul10 sign, result is %d.  Does not match "
 	   "expected_result = %d\n",
 	   result[0] & 0xF, BCD_POS1);
@@ -492,7 +534,11 @@ int main ()
     }
 
   /* result should be positive */
+#ifdef __BIG_ENDIAN__
+  if ((result[15] & 0xF) != BCD_POS0)
+#else
   if ((result[0] & 0xF) != BCD_POS0)
+#endif
 #if DEBUG
     printf("ERROR: __builtin_bcddiv10 sign, result is %d.  Does not match "
 	   "expected_result = %d\n",

                 reply	other threads:[~2024-04-18  1:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20240418014129.85DC03858D3C@sourceware.org \
    --to=guihaoc@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /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 read-only IMAP folder(s) and NNTP newsgroup(s).