diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-05-20 13:41:13 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-05-20 13:41:13 +0000 |
commit | 712fea20dab96f912b478ba981e6a6831740f581 (patch) | |
tree | 2f6af58ae79046e8d919e7191044bde1d1bc122a /gcc/config/i386/emmintrin.h | |
parent | e1f3ed05110a381f490ccceb46e75f01628c8768 (diff) | |
download | gcc-712fea20dab96f912b478ba981e6a6831740f581.tar.gz |
* config/i386/tmmintrin.h (_mm_alignr_epi32): Implement as always
inlined function, not as a macro.
(_mm_alignr_pi8): Ditto.
* config/i386/ammintrin.h (_mm_extracti_si64): Ditto.
(_mm_inserti_si64): Ditto.
* config/i386/emmintrin.h (_mm_shuffle_pd): Ditto.
(_mm_extract_epi16): Ditto.
(_mm_insert_epi16): Ditto.
(_mm_shufflehi_epi16): Ditto.
(_mm_shufflelo_epi16): Ditto.
(_mm_shuffle_epi32): Ditto.
* config/i386/xmmintrin.h (_mm_set_ss): Use 0.0f for float constant.
* config/386/mm3dnow.h: Add __attribute__((__always_inline__)) to
all functions.
(_m_from_float): Add __extension__ to conversion. Use 0.0f for
float constant.
(_m_to_float): Use C89 compatible assignment.
testsuite/ChangeLog:
* gcc.target/i386/sse-vect-types.c: Revert 'Use "-msse"
instead of "-msse2".'
* gcc.target/i386/sse-12.c: Use "-march=k8 -m3dnow -mssse3 -msse4a"
instead of "-msse3". Include only ammintrin.h, tmmintrin.h
and mm3dnow.h.
* gcc.target/i386/sse-13.c (__builtin_ia32_extrqi): Redefine
to test with immediate operand.
(__builtin_ia32_insertqi): Ditto.
(__builtin_ia32_palignr128): Ditto.
(__builtin_ia32_palignr): Ditto.
(__builtin_ia32_pshufhw): Ditto.
(__builtin_ia32_pshuflw): Ditto.
(__builtin_ia32_pshufd): Ditto.
(__builtin_ia32_vec_set_v8hi): Ditto.
(__builtin_ia32_vec_ext_v8hi): Ditto.
(__builtin_ia32_shufpd): Ditto.
* gcc.target/i386/sse-14.c: Same changes as sse-13.c.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124873 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/emmintrin.h')
-rw-r--r-- | gcc/config/i386/emmintrin.h | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/gcc/config/i386/emmintrin.h b/gcc/config/i386/emmintrin.h index e8ef024c6e8..f878728a04f 100644 --- a/gcc/config/i386/emmintrin.h +++ b/gcc/config/i386/emmintrin.h @@ -57,7 +57,7 @@ typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); static __inline __m128d __attribute__((__always_inline__)) _mm_set_sd (double __F) { - return __extension__ (__m128d){ __F, 0 }; + return __extension__ (__m128d){ __F, 0.0 }; } /* Create a vector with both elements equal to F. */ @@ -880,7 +880,11 @@ _mm_cvtss_sd (__m128d __A, __m128 __B) return (__m128d)__builtin_ia32_cvtss2sd ((__v2df) __A, (__v4sf)__B); } -#define _mm_shuffle_pd(__A, __B, __C) ((__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, (__C))) +static __inline __m128d __attribute__((__always_inline__)) +_mm_shuffle_pd(__m128d __A, __m128d __B, const int __mask) +{ + return (__m128d)__builtin_ia32_shufpd ((__v2df)__A, (__v2df)__B, __mask); +} static __inline __m128d __attribute__((__always_inline__)) _mm_unpackhi_pd (__m128d __A, __m128d __B) @@ -1137,13 +1141,13 @@ _mm_srai_epi32 (__m128i __A, const int __B) static __inline __m128i __attribute__((__always_inline__)) _mm_srli_si128 (__m128i __A, const int __B) { - return ((__m128i)__builtin_ia32_psrldqi128 (__A, __B * 8)); + return (__m128i)__builtin_ia32_psrldqi128 (__A, __B * 8); } static __inline __m128i __attribute__((__always_inline__)) _mm_slli_si128 (__m128i __A, const int __B) { - return ((__m128i)__builtin_ia32_pslldqi128 (__A, __B * 8)); + return (__m128i)__builtin_ia32_pslldqi128 (__A, __B * 8); } static __inline __m128i __attribute__((__always_inline__)) @@ -1290,7 +1294,6 @@ _mm_cmpgt_epi32 (__m128i __A, __m128i __B) return (__m128i)__builtin_ia32_pcmpgtd128 ((__v4si)__A, (__v4si)__B); } -#if 0 static __inline int __attribute__((__always_inline__)) _mm_extract_epi16 (__m128i const __A, int const __N) { @@ -1302,12 +1305,6 @@ _mm_insert_epi16 (__m128i const __A, int const __D, int const __N) { return (__m128i) __builtin_ia32_vec_set_v8hi ((__v8hi)__A, __D, __N); } -#else -#define _mm_extract_epi16(A, N) \ - ((int) __builtin_ia32_vec_ext_v8hi ((__v8hi)(A), (N))) -#define _mm_insert_epi16(A, D, N) \ - ((__m128i) __builtin_ia32_vec_set_v8hi ((__v8hi)(A), (D), (N))) -#endif static __inline __m128i __attribute__((__always_inline__)) _mm_max_epi16 (__m128i __A, __m128i __B) @@ -1345,9 +1342,23 @@ _mm_mulhi_epu16 (__m128i __A, __m128i __B) return (__m128i)__builtin_ia32_pmulhuw128 ((__v8hi)__A, (__v8hi)__B); } -#define _mm_shufflehi_epi16(__A, __B) ((__m128i)__builtin_ia32_pshufhw ((__v8hi)__A, __B)) -#define _mm_shufflelo_epi16(__A, __B) ((__m128i)__builtin_ia32_pshuflw ((__v8hi)__A, __B)) -#define _mm_shuffle_epi32(__A, __B) ((__m128i)__builtin_ia32_pshufd ((__v4si)__A, __B)) +static __inline __m128i __attribute__((__always_inline__)) +_mm_shufflehi_epi16 (__m128i __A, const int __mask) +{ + return (__m128i)__builtin_ia32_pshufhw ((__v8hi)__A, __mask); +} + +static __inline __m128i __attribute__((__always_inline__)) +_mm_shufflelo_epi16 (__m128i __A, const int __mask) +{ + return (__m128i)__builtin_ia32_pshuflw ((__v8hi)__A, __mask); +} + +static __inline __m128i __attribute__((__always_inline__)) +_mm_shuffle_epi32 (__m128i __A, const int __mask) +{ + return (__m128i)__builtin_ia32_pshufd ((__v4si)__A, __mask); +} static __inline void __attribute__((__always_inline__)) _mm_maskmoveu_si128 (__m128i __A, __m128i __B, char *__C) |