@@ -63,13 +63,20 @@ typedef signed char __v16qs __attribute__((__vector_size__(16)));
6363
6464#ifdef __clang__
6565#define __ATTRIBUTE_SSE2__ __attribute__((__target__("sse2"),__min_vector_width__(128)))
66+ #define __ATTRIBUTE_MMXSSE2__ __attribute__((__target__("mmx,sse2"),__min_vector_width__(128)))
6667#else
6768#define __ATTRIBUTE_SSE2__ __attribute__((__target__("sse2")))
69+ #define __ATTRIBUTE_MMXSSE2__ __attribute__((__target__("mmx,sse2")))
6870#endif
6971#define __INTRIN_INLINE_SSE2 __INTRIN_INLINE __ATTRIBUTE_SSE2__
72+ #define __INTRIN_INLINE_MMXSSE2 __INTRIN_INLINE __ATTRIBUTE_MMXSSE2__
7073
7174#endif /* _MSC_VER */
7275
76+ #ifdef __cplusplus
77+ extern "C" {
78+ #endif
79+
7380extern __m128d _mm_add_sd (__m128d a , __m128d b );
7481extern __m128d _mm_add_pd (__m128d a , __m128d b );
7582extern __m128d _mm_sub_sd (__m128d a , __m128d b );
@@ -495,12 +502,12 @@ void _mm_pause(void);
495502#pragma intrinsic(_mm_loadu_si128)
496503#pragma intrinsic(_mm_loadl_epi64)
497504//#pragma intrinsic(_mm_undefined_si128)
498- #pragma intrinsic(_mm_set_epi64x)
505+ // #pragma intrinsic(_mm_set_epi64x)
499506//#pragma intrinsic(_mm_set_epi64)
500507#pragma intrinsic(_mm_set_epi32)
501508#pragma intrinsic(_mm_set_epi16)
502509#pragma intrinsic(_mm_set_epi8)
503- #pragma intrinsic(_mm_set1_epi64x)
510+ // #pragma intrinsic(_mm_set1_epi64x)
504511//#pragma intrinsic(_mm_set1_epi64)
505512#pragma intrinsic(_mm_set1_epi32)
506513#pragma intrinsic(_mm_set1_epi16)
@@ -904,17 +911,17 @@ __INTRIN_INLINE_SSE2 int _mm_cvttsd_si32(__m128d a)
904911 return __builtin_ia32_cvttsd2si ((__v2df )a );
905912}
906913
907- __INTRIN_INLINE_MMX __m64 _mm_cvtpd_pi32 (__m128d a )
914+ __INTRIN_INLINE_MMXSSE2 __m64 _mm_cvtpd_pi32 (__m128d a )
908915{
909916 return (__m64 )__builtin_ia32_cvtpd2pi ((__v2df )a );
910917}
911918
912- __INTRIN_INLINE_MMX __m64 _mm_cvttpd_pi32 (__m128d a )
919+ __INTRIN_INLINE_MMXSSE2 __m64 _mm_cvttpd_pi32 (__m128d a )
913920{
914921 return (__m64 )__builtin_ia32_cvttpd2pi ((__v2df )a );
915922}
916923
917- __INTRIN_INLINE_SSE __m128d _mm_cvtpi32_pd (__m64 a )
924+ __INTRIN_INLINE_MMXSSE2 __m128d _mm_cvtpi32_pd (__m64 a )
918925{
919926 return __builtin_ia32_cvtpi2pd ((__v2si )a );
920927}
@@ -1130,7 +1137,7 @@ __INTRIN_INLINE_SSE2 __m128i _mm_add_epi32(__m128i a, __m128i b)
11301137 return (__m128i )((__v4su )a + (__v4su )b );
11311138}
11321139
1133- __INTRIN_INLINE_MMX __m64 _mm_add_si64 (__m64 a , __m64 b )
1140+ __INTRIN_INLINE_MMXSSE2 __m64 _mm_add_si64 (__m64 a , __m64 b )
11341141{
11351142 return (__m64 )__builtin_ia32_paddq ((__v1di )a , (__v1di )b );
11361143}
@@ -1242,7 +1249,7 @@ __INTRIN_INLINE_SSE2 __m128i _mm_mullo_epi16(__m128i a, __m128i b)
12421249 return (__m128i )((__v8hu )a * (__v8hu )b );
12431250}
12441251
1245- __INTRIN_INLINE_MMX __m64 _mm_mul_su32 (__m64 a , __m64 b )
1252+ __INTRIN_INLINE_MMXSSE2 __m64 _mm_mul_su32 (__m64 a , __m64 b )
12461253{
12471254 return (__m64 )__builtin_ia32_pmuludq ((__v2si )a , (__v2si )b );
12481255}
@@ -1272,7 +1279,7 @@ __INTRIN_INLINE_SSE2 __m128i _mm_sub_epi32(__m128i a, __m128i b)
12721279 return (__m128i )((__v4su )a - (__v4su )b );
12731280}
12741281
1275- __INTRIN_INLINE_MMX __m64 _mm_sub_si64 (__m64 a , __m64 b )
1282+ __INTRIN_INLINE_MMXSSE2 __m64 _mm_sub_si64 (__m64 a , __m64 b )
12761283{
12771284 return (__m64 )__builtin_ia32_psubq ((__v1di )a , (__v1di )b );
12781285}
@@ -1936,6 +1943,8 @@ void _mm_pause(void);
19361943
19371944#endif /* _MSC_VER */
19381945
1939-
1946+ #ifdef __cplusplus
1947+ } // extern "C"
1948+ #endif
19401949
19411950#endif /* _INCLUDED_EMM */
0 commit comments