[PATCH] rs6000: Fix typo in mmintrin.h
Bill Schmidt
wschmidt@linux.ibm.com
Thu Mar 21 22:00:00 GMT 2019
Hi,
It was recently pointed out that there's a pasto in mmintrin.h for the
_mm_sub_pi32 function, so that it performs an addition rather than a
subtraction. This won't do.
This patch corrects the problem, and adds a test case to verify it.
Installed and tested on powerpc64le-unknown-linux-gnu with no regressions.
Is this ok for trunk, and backport to GCC 8?
Thanks!
Bill
[gcc]
2019-03-21 Bill Schmidt <wschmidt@linux.ibm.com>
* config/rs6000/mmintrin.h (_mm_sub_pi32): Fix typo.
[gcc/testsuite]
2019-03-21 Bill Schmidt <wschmidt@linux.ibm.com>
* gcc.target/powerpc/mmx-psubd-2.c: Test _m_psubd.
Index: gcc/config/rs6000/mmintrin.h
===================================================================
--- gcc/config/rs6000/mmintrin.h (revision 269843)
+++ gcc/config/rs6000/mmintrin.h (working copy)
@@ -597,7 +597,7 @@ _mm_sub_pi32 (__m64 __m1, __m64 __m2)
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_m_psubd (__m64 __m1, __m64 __m2)
{
- return _mm_add_pi32 (__m1, __m2);
+ return _mm_sub_pi32 (__m1, __m2);
}
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
Index: gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c (revision 269843)
+++ gcc/testsuite/gcc.target/powerpc/mmx-psubd-2.c (working copy)
@@ -22,20 +22,28 @@ test (__m64 s1, __m64 s2)
return _mm_sub_pi32 (s1, s2);
}
+static __m64
+__attribute__((noinline, unused))
+test_alias (__m64 s1, __m64 s2)
+{
+ return _m_psubd (s1, s2);
+}
+
static void
TEST (void)
{
__m64_union u, s1, s2;
- __m64_union e;
+ __m64_union e, v;
int i;
s1.as_m64 = _mm_setr_pi32 (30, 90);
s2.as_m64 = _mm_setr_pi32 (76, -100);
u.as_m64 = test (s1.as_m64, s2.as_m64);
-
+ v.as_m64 = test_alias (s1.as_m64, s2.as_m64);
+
for (i = 0; i < 2; i++)
e.as_int[i] = s1.as_int[i] - s2.as_int[i];
- if (u.as_m64 != e.as_m64)
+ if (u.as_m64 != e.as_m64 || u.as_m64 != v.as_m64)
abort ();
}
More information about the Gcc-patches
mailing list