aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-08-06 11:52:35 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2024-08-06 11:52:35 +0200
commitdf4062c54b0b3c5f5c6a1f1a2454abf965100e3a (patch)
tree0559788076e7b129877a896ce4e3f346a045f60d
parent69093fd8aa682a1b906e80b3c5f10956e692b7c4 (diff)
downloadgcc-df4062c54b0b3c5f5c6a1f1a2454abf965100e3a.zip
gcc-df4062c54b0b3c5f5c6a1f1a2454abf965100e3a.tar.gz
gcc-df4062c54b0b3c5f5c6a1f1a2454abf965100e3a.tar.bz2
testsuite: Fix up pr116037.c test [PR116245]
The test FAILs on big endian targets, because VV is a vector of unsigned __int128 and VC vector of unsigned char and so ((VC) vv)[0] is 0x01 on little endian but 0xff on big endian and PDP endian. As I believe it is intentional to test it as it is written on little endian, the following patch just adds another case for big endian and for other endians instead of figuring out what exactly to fetch it fetches the whole unsigned __int128 and casts it to unsigned char. Not that pdp11 has __int128 support... 2024-08-06 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/116037 PR testsuite/116245 * gcc.dg/torture/pr116037.c (foo): Fix up for big end middle endian.
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr116037.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr116037.c b/gcc/testsuite/gcc.dg/torture/pr116037.c
index 86ab50d..5bab241 100644
--- a/gcc/testsuite/gcc.dg/torture/pr116037.c
+++ b/gcc/testsuite/gcc.dg/torture/pr116037.c
@@ -16,7 +16,13 @@ VL vl;
VV
foo (unsigned long long x, VV vv)
{
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
x &= -((VC) vv)[0];
+#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ x &= -((VC) vv)[sizeof (__int128) - 1];
+#else
+ x &= -(unsigned char) (vv[0]);
+#endif
vi *= (VI) (VS){ -vs[0], vc[0], vs[1], vi[7], vs[7], vl[7], x, vi[5] };
return x + vv;
}