]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/56788 (_mm_frcz_sd and _mm_frcz_ss ignore their second argument)
authorUros Bizjak <ubizjak@gmail.com>
Wed, 27 Nov 2013 18:07:22 +0000 (19:07 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 27 Nov 2013 18:07:22 +0000 (19:07 +0100)
PR target/56788
* gcc.target/i386/xop-frczX.c: New test.

Co-Authored-By: Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
From-SVN: r205458

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/xop-frczX.c [new file with mode: 0644]

index 613f0306da5be37bb376dfdf1a9230fdd9d70897..eef70775be2abca399d6d79715dc9e68a739f6b6 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-27  Uros Bizjak  <ubizjak@gmail.com>
+           Ganesh Gopalasubramanian  <Ganesh.Gopalasubramanian@amd.com>
+
+       PR target/56788
+       * gcc.target/i386/xop-frczX.c: New test.
+
 2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/59014
diff --git a/gcc/testsuite/gcc.target/i386/xop-frczX.c b/gcc/testsuite/gcc.target/i386/xop-frczX.c
new file mode 100644 (file)
index 0000000..931b5ce
--- /dev/null
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+/* { dg-require-effective-target xop } */
+/* { dg-options "-O2 -mxop" } */
+
+#include "xop-check.h"
+
+#include <x86intrin.h>
+
+void
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
+{
+  union128d a, b, c;
+  double d[2];
+
+  a.x = __A;
+  b.x = __B;
+  c.x = _mm_frcz_sd (__A, __B);
+  d[0] = b.a[0] - (int)b.a[0] ;
+  d[1] = a.a[1];
+  if (check_union128d (c, d))
+    abort ();
+}
+
+void
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
+{
+  union128 a, b, c;
+  float f[4];
+
+  a.x = __A;
+  b.x = __B;
+  c.x = _mm_frcz_ss (__A, __B);
+  f[0] = b.a[0] - (int)b.a[0] ;
+  f[1] = a.a[1];
+  f[2] = a.a[2];
+  f[3] = a.a[3];
+  if (check_union128 (c, f))
+    abort ();
+}
+
+static void
+xop_test (void)
+{
+  union128 a, b;
+  union128d c,d;
+  int i;
+
+  for (i = 0; i < 4; i++)
+    {
+       a.a[i] = i + 3.5;
+       b.a[i] = i + 7.9;
+    }
+  for (i = 0; i < 2; i++)
+    {
+       c.a[i] = i + 3.5;
+       d.a[i] = i + 7.987654321;
+    }
+  check_mm_vmfrcz_ss (a.x, b.x);
+  check_mm_vmfrcz_sd (c.x, d.x);
+}