From 0e67d46049a58b11d577736056157cc003c0f1d8 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 22 Oct 2002 22:38:07 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/i386.c | 4 ++-- gcc/config/i386/i386.h | 7 ++++--- gcc/config/i386/i386.md | 2 +- gcc/config/i386/xmmintrin.h | 18 ++++++++++++++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fbe10900b32..c1f445a23af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Wed Oct 23 00:33:11 CEST 2002 Jan Hubicka + + * 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 * 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 63e7f9570be..efce0f32382 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 aabf3e531df..a679d3d469e 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 b2aa4efb46a..7e90501b445 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 f0f6ee3ee11..2740824cd90 100644 --- a/gcc/config/i386/xmmintrin.h +++ b/gcc/config/i386/xmmintrin.h @@ -2307,6 +2307,24 @@ _mm_cmpeq_epi32 (__m128i __A, __m128i __B) return (__m128i)__builtin_ia32_pcmpeqd128 ((__v4si)__A, (__v4si)__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) { -- 2.30.2