rs6000: Fix typo in mmintrin.h

Message ID 347759d1-423b-2905-1a59-92e0a7e3cb59@linux.ibm.com
State New
Headers show
Series
  • rs6000: Fix typo in mmintrin.h
Related show

Commit Message

Bill Schmidt March 21, 2019, 9:15 p.m.
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.

Comments

Segher Boessenkool March 21, 2019, 11:21 p.m. | #1
On Thu, Mar 21, 2019 at 04:15:09PM -0500, Bill Schmidt wrote:
> 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?


Yes, okay for all.  Thanks!


Segher


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

Patch

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 ();
 }