diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-20 11:42:21 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-20 11:42:21 +0000 |
| commit | 553633cf22c1c8c4cc72e207cd182dbac731bc6a (patch) | |
| tree | 3a8e87cc75ad987b37f0909735b55daf36e9173b | |
| parent | ddb8b0bebc53d24b5c081c78cf3e02b609b0e4d9 (diff) | |
| download | ppe42-gcc-553633cf22c1c8c4cc72e207cd182dbac731bc6a.tar.gz ppe42-gcc-553633cf22c1c8c4cc72e207cd182dbac731bc6a.zip | |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123989 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 3 | ||||
| -rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.target/i386/ordcmp-1.c | 36 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.target/i386/unordcmp-1.c | 36 |
5 files changed, 79 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc638b30e0e..3d5a29c0ef9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 0ca17121128..cefe8ae7d84 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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 }, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2cb05104d78..5c45c1de4dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 00000000000..1a70e19192d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/ordcmp-1.c @@ -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 index 00000000000..3123fe9ada2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/unordcmp-1.c @@ -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); +} |

