From: <cj...@us...> - 2013-09-18 10:17:03
|
Revision: 6296 http://sourceforge.net/p/mingw-w64/code/6296 Author: cjacek Date: 2013-09-18 10:16:54 +0000 (Wed, 18 Sep 2013) Log Message: ----------- intrin.h: Fixes for GCC 4.9. Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2013-09-17 21:32:12 UTC (rev 6295) +++ trunk/mingw-w64-headers/crt/intrin.h 2013-09-18 10:16:54 UTC (rev 6296) @@ -40,6 +40,20 @@ #include <stddef.h> #include <psdk_inc/intrin-impl.h> +/* + * Intrins shiped with GCC conflict with our versions in C++, because they don't use extern "C" + * linkage while our variants use them. We try to work around this by including those headers + * here wrapped in extern "C" block. It's still possible that those intrins will get default + * C++ linkage (when GCC headers are explicitly included before intrin.h), but at least their + * guards will prevent duplicated declarations and avoid conflicts. + * + * On GCC 4.9 we may always include those headers. On older GCCs, we may do it only if CPU + * features used by them are enabled, so we need to check macros like __SSE__ or __MMX__ first. + */ +#if __MINGW_GNUC_PREREQ(4, 9) +#define __MINGW_FORCE_SYS_INTRINS +#endif + #if defined(__GNUC__) && \ (defined(__i386__) || defined(__x86_64__)) extern unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char); @@ -64,6 +78,7 @@ #endif +#ifndef __MINGW_FORCE_SYS_INTRINS #ifndef __MMX__ typedef union __m64 { char v[7]; } __m64; #endif @@ -74,12 +89,13 @@ typedef union __m128d { char v[16]; } __m128d; typedef union __m128i { char v[16]; } __m128i; #endif +#endif #ifndef WINAPI #define WINAPI __stdcall #endif -#ifdef __MMX__ +#if defined(__MMX__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) extern "C" { #endif @@ -90,7 +106,7 @@ #endif /* NOTE: it's not included by MS version, but we do it to try work around C++/C linkage differences */ -#ifdef __SSE2__ +#if defined(__SSE2__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) extern "C" { #endif @@ -100,7 +116,7 @@ #endif #endif -#ifdef __SSE3__ +#if defined(__SSE3__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) extern "C" { #endif @@ -529,7 +545,7 @@ __MACHINEIA64(void __yield(void)) __MACHINEIA64(void __fci(void*)) -#if !defined(__GNUC__) || !defined(__MMX__) +#if !defined(__GNUC__) || (!defined(__MMX__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(void _m_empty(void)) __MACHINEX86X_NOX64(__m64 _m_from_int(int)) __MACHINEX86X_NOX64(int _m_to_int(__m64)) @@ -605,7 +621,7 @@ #undef _m_pinsrw __MACHINEX86X_NOX64(__m64 _m_pinsrw(__m64,int,int)) #pragma pop_macro ("_m_pinsrw") -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(__m64 _m_pmaxsw(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pmaxub(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pminsw(__m64,__m64)) @@ -617,7 +633,7 @@ #undef _m_pshufw __MACHINEX86X_NOX64(__m64 _m_pshufw(__m64,int)) #pragma pop_macro ("_m_pshufw") -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(void _m_maskmovq(__m64,__m64,char*)) __MACHINEX86X_NOX64(__m64 _m_pavgb(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pavgw(__m64,__m64)) @@ -625,7 +641,7 @@ #endif __MACHINEX86X_NOWIN64(__m64 _m_from_float(float)) __MACHINEX86X_NOWIN64(float _m_to_float(__m64)) -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOIA64(__m128 _mm_add_ss(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_add_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_sub_ss(__m128,__m128)) @@ -695,7 +711,7 @@ #undef _mm_shuffle_ps __MACHINEX86X_NOIA64(__m128 _mm_shuffle_ps(__m128,__m128,int const)) #pragma pop_macro ("_mm_shuffle_ps") -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOIA64(__m128 _mm_unpackhi_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_unpacklo_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_loadh_pi(__m128,__m64 const*)) @@ -755,7 +771,7 @@ __MACHINEX86X_NOWIN64(__m64 _m_pfpnacc(__m64,__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pi2fw(__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pswapd(__m64)) -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X(__m128d _mm_add_sd(__m128d,__m128d)) __MACHINEX86X(__m128d _mm_add_pd(__m128d,__m128d)) __MACHINEX86X(__m128d _mm_div_sd(__m128d,__m128d)) @@ -855,11 +871,11 @@ __MACHINEX86X(__m128i _mm_add_epi32(__m128i,__m128i)) #endif -#if !defined(__GNUC__) || !defined(__MMX__) +#if !defined(__GNUC__) || (!defined(__MMX__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(__m64 _mm_add_si64(__m64,__m64)) #endif -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X(__m128i _mm_add_epi64(__m128i,__m128i)) __MACHINEX86X(__m128i _mm_adds_epi8(__m128i,__m128i)) __MACHINEX86X(__m128i _mm_adds_epi16(__m128i,__m128i)) @@ -882,10 +898,10 @@ __MACHINEX86X(__m128i _mm_sub_epi16(__m128i,__m128i)) __MACHINEX86X(__m128i _mm_sub_epi32(__m128i,__m128i)) #endif -#if !defined(__GNUC__) || !defined(__MMX__) +#if !defined(__GNUC__) || (!defined(__MMX__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(__m64 _mm_sub_si64(__m64,__m64)) #endif -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X(__m128i _mm_sub_epi64(__m128i,__m128i)) __MACHINEX86X(__m128i _mm_subs_epi8(__m128i,__m128i)) __MACHINEX86X(__m128i _mm_subs_epi16(__m128i,__m128i)) @@ -973,7 +989,7 @@ __MACHINEX86X(void _mm_stream_si32(int*,int)) __MACHINEX86X(void _mm_pause(void)) #endif -#if !defined(__GNUC__) || !defined(__SSE3__) +#if !defined(__GNUC__) || (!defined(__SSE3__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X(__m128 _mm_addsub_ps(__m128,__m128)) __MACHINEX86X(__m128d _mm_addsub_pd(__m128d,__m128d)) __MACHINEX86X(__m128 _mm_hadd_ps(__m128,__m128)) @@ -1045,7 +1061,7 @@ /* __MACHINEI(void __outwordstring(unsigned short Port,unsigned short *Buffer,unsigned __LONG32 Count)) moved to psdk_inc/intrin-impl.h */ /* __MACHINEI(void __outdwordstring(unsigned short Port,unsigned __LONG32 *Buffer,unsigned __LONG32 Count)) moved to psdk_inc/intrin-impl.h */ __MACHINEI(unsigned int __getcallerseflags()) -#if !defined(__GNUC__) || !defined(__SSE2__) +#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX64(__MINGW_EXTENSION __m128i _mm_set_epi64x(__int64 i1,__int64 i0)) __MACHINEX64(__MINGW_EXTENSION __m128i _mm_set1_epi64x(__int64 i)) __MACHINEX64(__MINGW_EXTENSION __int64 _mm_cvtsd_si64x(__m128d a)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cj...@us...> - 2013-09-20 11:57:45
|
Revision: 6303 http://sourceforge.net/p/mingw-w64/code/6303 Author: cjacek Date: 2013-09-20 11:57:39 +0000 (Fri, 20 Sep 2013) Log Message: ----------- intrin.h: Fixed conflicts with xmmintrin.h. Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2013-09-20 10:23:48 UTC (rev 6302) +++ trunk/mingw-w64-headers/crt/intrin.h 2013-09-20 11:57:39 UTC (rev 6303) @@ -106,6 +106,16 @@ #endif /* NOTE: it's not included by MS version, but we do it to try work around C++/C linkage differences */ +#if defined(__SSE__) || defined(__MINGW_FORCE_SYS_INTRINS) +#if defined(__cplusplus) +extern "C" { +#endif +#include <xmmintrin.h> +#if defined(__cplusplus) +} +#endif +#endif + #if defined(__SSE2__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) extern "C" { @@ -612,6 +622,7 @@ __MACHINEX86X_NOX64(__m64 _mm_setr_pi16(short,short,short,short)) __MACHINEX86X_NOX64(__m64 _mm_setr_pi8(char,char,char,char,char,char,char,char)) #endif +#if !defined(__GNUC__) || (!defined(__SSE__) && !defined(__MINGW_FORCE_SYS_INTRINS)) #pragma push_macro ("_m_pextrw") #undef _m_pextrw __MACHINEX86X_NOX64(int _m_pextrw(__m64,int)) @@ -621,19 +632,16 @@ #undef _m_pinsrw __MACHINEX86X_NOX64(__m64 _m_pinsrw(__m64,int,int)) #pragma pop_macro ("_m_pinsrw") -#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(__m64 _m_pmaxsw(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pmaxub(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pminsw(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pminub(__m64,__m64)) __MACHINEX86X_NOX64(int _m_pmovmskb(__m64)) __MACHINEX86X_NOX64(__m64 _m_pmulhuw(__m64,__m64)) -#endif #pragma push_macro ("_m_pshufw") #undef _m_pshufw __MACHINEX86X_NOX64(__m64 _m_pshufw(__m64,int)) #pragma pop_macro ("_m_pshufw") -#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOX64(void _m_maskmovq(__m64,__m64,char*)) __MACHINEX86X_NOX64(__m64 _m_pavgb(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_pavgw(__m64,__m64)) @@ -641,7 +649,7 @@ #endif __MACHINEX86X_NOWIN64(__m64 _m_from_float(float)) __MACHINEX86X_NOWIN64(float _m_to_float(__m64)) -#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) +#if !defined(__GNUC__) || (!defined(__SSE__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOIA64(__m128 _mm_add_ss(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_add_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_sub_ss(__m128,__m128)) @@ -706,12 +714,10 @@ __MACHINEX86X_NOWIN64(__m64 _mm_cvtt_ps2pi(__m128)) __MACHINEX86X_NOIA64(__m128 _mm_cvt_si2ss(__m128,int)) __MACHINEX86X_NOWIN64(__m128 _mm_cvt_pi2ps(__m128,__m64)) -#endif #pragma push_macro ("_mm_shuffle_ps") #undef _mm_shuffle_ps __MACHINEX86X_NOIA64(__m128 _mm_shuffle_ps(__m128,__m128,int const)) #pragma pop_macro ("_mm_shuffle_ps") -#if !defined(__GNUC__) || (!defined(__SSE2__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOIA64(__m128 _mm_unpackhi_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_unpacklo_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_loadh_pi(__m128,__m64 const*)) @@ -987,6 +993,8 @@ __MACHINEX86X(void _mm_lfence(void)) __MACHINEX86X(void _mm_mfence(void)) __MACHINEX86X(void _mm_stream_si32(int*,int)) +#endif +#if !defined(__GNUC__) || (!defined(__SSE__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X(void _mm_pause(void)) #endif #if !defined(__GNUC__) || (!defined(__SSE3__) && !defined(__MINGW_FORCE_SYS_INTRINS)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <adr...@us...> - 2014-02-25 22:16:38
|
Revision: 6501 http://sourceforge.net/p/mingw-w64/code/6501 Author: adrien-n Date: 2014-02-25 22:16:30 +0000 (Tue, 25 Feb 2014) Log Message: ----------- intrinsics: don't include {d,f,i}vec.h from inside intrin.h. Prior to this commit, #include <intrin.h> would automatically pull these *vec.h headers for C++. Depending on compiler options (architecture and optimizations), it would fail because they use functions which are only declared later on in intrin.h. Simply remove the inclusion of {d,f,i}vec.h from intrin.h since there is little reason to do so and other compilers don't seem to do it. This changes behaviour with previous mingw-w64 releases but only to make it more compatible with MSVC. I originally investigated the issue to fix a build of Qt 5.2. Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2014-02-25 16:07:10 UTC (rev 6500) +++ trunk/mingw-w64-headers/crt/intrin.h 2014-02-25 22:16:30 UTC (rev 6501) @@ -147,12 +147,7 @@ } #endif -#if defined(__cplusplus) -#include <dvec.h> -#include <fvec.h> -#include <ivec.h> #endif -#endif #define __MACHINEX64 __MACHINE #define __MACHINEARMX __MACHINE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cj...@us...> - 2014-03-13 14:51:58
|
Revision: 6525 http://sourceforge.net/p/mingw-w64/code/6525 Author: cjacek Date: 2014-03-13 14:51:52 +0000 (Thu, 13 Mar 2014) Log Message: ----------- intrin.h: Fixed mm3dnow.h conflict with recent GCC trunk. Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2014-03-13 13:16:33 UTC (rev 6524) +++ trunk/mingw-w64-headers/crt/intrin.h 2014-03-13 14:51:52 UTC (rev 6525) @@ -105,6 +105,16 @@ #endif #endif +#if defined(__3dNOW__) || defined(__MINGW_FORCE_SYS_INTRINS) +#if defined(__cplusplus) +extern "C" { +#endif +#include <mm3dnow.h> +#if defined(__cplusplus) +} +#endif +#endif + /* NOTE: it's not included by MS version, but we do it to try work around C++/C linkage differences */ #if defined(__SSE__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) @@ -642,8 +652,6 @@ __MACHINEX86X_NOX64(__m64 _m_pavgw(__m64,__m64)) __MACHINEX86X_NOX64(__m64 _m_psadbw(__m64,__m64)) #endif - __MACHINEX86X_NOWIN64(__m64 _m_from_float(float)) - __MACHINEX86X_NOWIN64(float _m_to_float(__m64)) #if !defined(__GNUC__) || (!defined(__SSE__) && !defined(__MINGW_FORCE_SYS_INTRINS)) __MACHINEX86X_NOIA64(__m128 _mm_add_ss(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_add_ps(__m128,__m128)) @@ -745,6 +753,9 @@ __MACHINEX86X_NOIA64(__m128 _mm_movelh_ps(__m128,__m128)) __MACHINEX86X_NOIA64(__m128 _mm_movehl_ps(__m128,__m128)) #endif +#if !defined(__GNUC__) || (!defined(__3dNOW__) && !defined(__MINGW_FORCE_SYS_INTRINS)) + __MACHINEX86X_NOWIN64(__m64 _m_from_float(float)) + __MACHINEX86X_NOWIN64(float _m_to_float(__m64)) __MACHINEX86X_NOIA64(void _m_prefetch(void*)) __MACHINEX86X_NOIA64(void _m_prefetchw(void*_Source)) __MACHINEX86X_NOWIN64(void _m_femms(void)) @@ -767,6 +778,7 @@ __MACHINEX86X_NOWIN64(__m64 _m_pfsubr(__m64,__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pi2fd(__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pmulhrw(__m64,__m64)) +#endif __MACHINEX86X_NOWIN64(__m64 _m_pf2iw(__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pfnacc(__m64,__m64)) __MACHINEX86X_NOWIN64(__m64 _m_pfpnacc(__m64,__m64)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <daw...@us...> - 2014-05-06 21:57:50
|
Revision: 6614 http://sourceforge.net/p/mingw-w64/code/6614 Author: dawncrow Date: 2014-05-06 21:57:44 +0000 (Tue, 06 May 2014) Log Message: ----------- Don't care about x86 acceleration instruction sets on non-x86 Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2014-05-06 21:55:51 UTC (rev 6613) +++ trunk/mingw-w64-headers/crt/intrin.h 2014-05-06 21:57:44 UTC (rev 6614) @@ -99,6 +99,8 @@ #endif #endif +#if (defined(_X86_) || defined(__x86_64)) + #if defined(__MMX__) || defined(__MINGW_FORCE_SYS_INTRINS) #if defined(__cplusplus) extern "C" { @@ -150,6 +152,8 @@ #endif #endif +#endif + #if (defined(_X86_) && !defined(__x86_64)) #if defined(__cplusplus) extern "C" { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <daw...@us...> - 2014-05-13 22:57:02
|
Revision: 6629 http://sourceforge.net/p/mingw-w64/code/6629 Author: dawncrow Date: 2014-05-13 22:56:56 +0000 (Tue, 13 May 2014) Log Message: ----------- intrin: __rdtsc is not available on ARM Modified Paths: -------------- trunk/mingw-w64-headers/crt/intrin.h Modified: trunk/mingw-w64-headers/crt/intrin.h =================================================================== --- trunk/mingw-w64-headers/crt/intrin.h 2014-05-12 20:01:23 UTC (rev 6628) +++ trunk/mingw-w64-headers/crt/intrin.h 2014-05-13 22:56:56 UTC (rev 6629) @@ -1057,7 +1057,7 @@ /* __MACHINEI(__MINGW_EXTENSION unsigned __int64 __readmsr(unsigned __LONG32)) moved to psdk_inc/intrin-impl.h */ /* __MACHINEI(__MINGW_EXTENSION void __writemsr(unsigned __LONG32,unsigned __int64)) moved to psdk_inc/intrin-impl.h */ #ifndef __GNUC__ - __MACHINEI(__MINGW_EXTENSION unsigned __int64 __rdtsc(void)) + __MACHINEIW64(__MINGW_EXTENSION unsigned __int64 __rdtsc(void)) #endif /* __MACHINEI(void __movsb(unsigned char *,unsigned char const *,size_t)) moved to psdk_inc/intrin-impl.h */ /* __MACHINEI(void __movsw(unsigned short *,unsigned short const *,size_t)) moved to psdk_inc/intrin-impl.h */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |