i386.c (bdesc_2arg): Use ORDERED rather than UNORDERED for __builtin_ia32_cmpordss.
authorJakub Jelinek <jakub@redhat.com>
Fri, 20 Apr 2007 11:42:21 +0000 (13:42 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 20 Apr 2007 11:42:21 +0000 (13:42 +0200)
* config/i386/i386.c (bdesc_2arg): Use ORDERED rather than UNORDERED
for __builtin_ia32_cmpordss.

* gcc.target/i386/ordcmp-1.c: New test.
* gcc.target/i386/unordcmp-1.c: New test.

From-SVN: r123989

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/ordcmp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/unordcmp-1.c [new file with mode: 0644]

index cc638b30e0e30de62d866b286a6a9ea32f3e4db2..3d5a29c0ef9c994d99122c9d95532a687e86ec6f 100644 (file)
@@ -1,5 +1,8 @@
 2007-04-20  Jakub Jelinek  <jakub@redhat.com>
 
+       * config/i386/i386.c (bdesc_2arg): Use ORDERED rather than UNORDERED
+       for __builtin_ia32_cmpordss.
+
        PR tree-optimization/31632
        * fold-const.c (fold_binary): Use op0 and op1 instead of arg0
        and arg1 for optimizations of comparison against min/max values.
index 0ca17121128427805d21d33e8782bba7424d9d36..cefe8ae7d842318207b0393232b7232bd1469f86 100644 (file)
@@ -16487,7 +16487,7 @@ static const struct builtin_description bdesc_2arg[] =
     BUILTIN_DESC_SWAP_OPERANDS },
   { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpngess", IX86_BUILTIN_CMPNGESS, UNGT,
     BUILTIN_DESC_SWAP_OPERANDS },
-  { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, UNORDERED, 0 },
+  { MASK_SSE, CODE_FOR_sse_vmmaskcmpv4sf3, "__builtin_ia32_cmpordss", IX86_BUILTIN_CMPORDSS, ORDERED, 0 },
 
   { MASK_SSE, CODE_FOR_sminv4sf3, "__builtin_ia32_minps", IX86_BUILTIN_MINPS, 0, 0 },
   { MASK_SSE, CODE_FOR_smaxv4sf3, "__builtin_ia32_maxps", IX86_BUILTIN_MAXPS, 0, 0 },
index 2cb05104d783dac6682e7dc6cc12c987aa3e155c..5c45c1de4dcda83f9642ab5e82c60a67ccc6df23 100644 (file)
@@ -1,5 +1,8 @@
 2007-04-20  Jakub Jelinek  <jakub@redhat.com>
 
+       * gcc.target/i386/ordcmp-1.c: New test.
+       * gcc.target/i386/unordcmp-1.c: New test.
+
        PR tree-optimization/31632
        * gcc.c-torture/compile/20070419-1.c: New test.
 
diff --git a/gcc/testsuite/gcc.target/i386/ordcmp-1.c b/gcc/testsuite/gcc.target/i386/ordcmp-1.c
new file mode 100644 (file)
index 0000000..1a70e19
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
+/* { dg-final { scan-assembler "cmpordss" } } */
+/* { dg-final { scan-assembler "cmpordps" } } */
+/* { dg-final { scan-assembler "cmpordsd" } } */
+/* { dg-final { scan-assembler "cmpordpd" } } */
+/* { dg-final { scan-assembler-not "cmpunordss" } } */
+/* { dg-final { scan-assembler-not "cmpunordps" } } */
+/* { dg-final { scan-assembler-not "cmpunordsd" } } */
+/* { dg-final { scan-assembler-not "cmpunordpd" } } */
+
+#include <emmintrin.h>
+
+__m128
+f1 (__m128 x, __m128 y)
+{
+  return _mm_cmpord_ss (x, y);
+}
+
+__m128
+f2 (__m128 x, __m128 y)
+{
+  return _mm_cmpord_ps (x, y);
+}
+
+__m128d
+f3 (__m128d x, __m128d y)
+{
+  return _mm_cmpord_sd (x, y);
+}
+
+__m128d
+f4 (__m128d x, __m128d y)
+{
+  return _mm_cmpord_pd (x, y);
+}
diff --git a/gcc/testsuite/gcc.target/i386/unordcmp-1.c b/gcc/testsuite/gcc.target/i386/unordcmp-1.c
new file mode 100644 (file)
index 0000000..3123fe9
--- /dev/null
@@ -0,0 +1,36 @@
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O2 -msse2" } */
+/* { dg-final { scan-assembler "cmpunordss" } } */
+/* { dg-final { scan-assembler "cmpunordps" } } */
+/* { dg-final { scan-assembler "cmpunordsd" } } */
+/* { dg-final { scan-assembler "cmpunordpd" } } */
+/* { dg-final { scan-assembler-not "cmpordss" } } */
+/* { dg-final { scan-assembler-not "cmpordps" } } */
+/* { dg-final { scan-assembler-not "cmpordsd" } } */
+/* { dg-final { scan-assembler-not "cmpordpd" } } */
+
+#include <emmintrin.h>
+
+__m128
+f1 (__m128 x, __m128 y)
+{
+  return _mm_cmpunord_ss (x, y);
+}
+
+__m128
+f2 (__m128 x, __m128 y)
+{
+  return _mm_cmpunord_ps (x, y);
+}
+
+__m128d
+f3 (__m128d x, __m128d y)
+{
+  return _mm_cmpunord_sd (x, y);
+}
+
+__m128d
+f4 (__m128d x, __m128d y)
+{
+  return _mm_cmpunord_pd (x, y);
+}