aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse,cz>2002-10-22 22:38:07 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2002-10-22 22:38:07 +0000
commit0e67d46049a58b11d577736056157cc003c0f1d8 (patch)
treec33e2bada4128614a42748badc75685502820080 /gcc
parentd5869ca0f117a34b5a483fb34f6d45f4e103871a (diff)
downloadgcc-0e67d46049a58b11d577736056157cc003c0f1d8.zip
gcc-0e67d46049a58b11d577736056157cc003c0f1d8.tar.gz
gcc-0e67d46049a58b11d577736056157cc003c0f1d8.tar.bz2
i386.c (standard_sse_constant_p): Accept vector and integer zeros too.
* i386.c (standard_sse_constant_p): Accept vector and integer zeros too. * i386.h (EXTRA_CONSTRAINT): Recognize 'C' * i386.md (movti_internal): Use 'C' * xmmintrin.h (_mm_cmplt_epi*): New. From-SVN: r58423
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/config/i386/i386.h7
-rw-r--r--gcc/config/i386/i386.md2
-rw-r--r--gcc/config/i386/xmmintrin.h18
5 files changed, 33 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fbe1090..c1f445a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Wed Oct 23 00:33:11 CEST 2002 Jan Hubicka <jh@suse,cz>
+
+ * i386.c (standard_sse_constant_p): Accept vector and integer zeros too.
+ * i386.h (EXTRA_CONSTRAINT): Recognize 'C'
+ * i386.md (movti_internal): Use 'C'
+
+ * xmmintrin.h (_mm_cmplt_epi*): New.
+
2002-10-22 Ulrich Weigand <uweigand@de.ibm.com>
* config/s390/s390.md ("*movdi_64"): Fix op_type attribute.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 63e7f95..efce0f3 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3749,8 +3749,8 @@ int
standard_sse_constant_p (x)
rtx x;
{
- if (GET_CODE (x) != CONST_DOUBLE)
- return -1;
+ if (x == const0_rtx)
+ return 1;
return (x == CONST0_RTX (GET_MODE (x)));
}
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index aabf3e5..a679d3d 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1425,9 +1425,10 @@ enum reg_class
the constraint letter C. If C is not defined as an extra
constraint, the value returned should be 0 regardless of VALUE. */
-#define EXTRA_CONSTRAINT(VALUE, C) \
- ((C) == 'e' ? x86_64_sign_extended_value (VALUE, 0) \
- : (C) == 'Z' ? x86_64_zero_extended_value (VALUE) \
+#define EXTRA_CONSTRAINT(VALUE, D) \
+ ((D) == 'e' ? x86_64_sign_extended_value (VALUE, 0) \
+ : (D) == 'Z' ? x86_64_zero_extended_value (VALUE) \
+ : (D) == 'C' ? standard_sse_constant_p (VALUE) \
: 0)
/* Place additional restrictions on the register class to use when it
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index b2aa4ef..7e90501 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -18145,7 +18145,7 @@
(define_insn "movti_internal"
[(set (match_operand:TI 0 "nonimmediate_operand" "=x,x,m")
- (match_operand:TI 1 "general_operand" "O,xm,x"))]
+ (match_operand:TI 1 "general_operand" "C,xm,x"))]
"TARGET_SSE && !TARGET_64BIT"
"@
xorps\t%0, %0
diff --git a/gcc/config/i386/xmmintrin.h b/gcc/config/i386/xmmintrin.h
index f0f6ee3..2740824 100644
--- a/gcc/config/i386/xmmintrin.h
+++ b/gcc/config/i386/xmmintrin.h
@@ -2308,6 +2308,24 @@ _mm_cmpeq_epi32 (__m128i __A, __m128i __B)
}
static __inline __m128i
+_mm_cmplt_epi8 (__m128i __A, __m128i __B)
+{
+ return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__B, (__v16qi)__A);
+}
+
+static __inline __m128i
+_mm_cmplt_epi16 (__m128i __A, __m128i __B)
+{
+ return (__m128i)__builtin_ia32_pcmpgtw128 ((__v8hi)__B, (__v8hi)__A);
+}
+
+static __inline __m128i
+_mm_cmplt_epi32 (__m128i __A, __m128i __B)
+{
+ return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__B, (__v4si)__A);
+}
+
+static __inline __m128i
_mm_cmpgt_epi8 (__m128i __A, __m128i __B)
{
return (__m128i)__builtin_ia32_pcmpgtb128 ((__v16qi)__A, (__v16qi)__B);