88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /* | ||
|  | Copyright Charly Chevalier 2015 | ||
|  | Copyright Joel Falcou 2015 | ||
|  | Distributed under the Boost Software License, Version 1.0. | ||
|  | (See accompanying file LICENSE_1_0.txt or copy at | ||
|  | http://www.boost.org/LICENSE_1_0.txt) | ||
|  | */ | ||
|  | 
 | ||
|  | #ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H | ||
|  | #define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H | ||
|  | 
 | ||
|  | #include <boost/predef/version_number.h> | ||
|  | #include <boost/predef/hardware/simd/x86_amd/versions.h> | ||
|  | 
 | ||
|  | /*` | ||
|  |  [heading `BOOST_HW_SIMD_X86_AMD`] | ||
|  | 
 | ||
|  |  The SIMD extension for x86 (AMD) (*if detected*). | ||
|  |  Version number depends on the most recent detected extension. | ||
|  | 
 | ||
|  |  [table | ||
|  |      [[__predef_symbol__] [__predef_version__]] | ||
|  | 
 | ||
|  |      [[`__SSE4A__`] [__predef_detection__]] | ||
|  | 
 | ||
|  |      [[`__FMA4__`] [__predef_detection__]] | ||
|  | 
 | ||
|  |      [[`__XOP__`] [__predef_detection__]] | ||
|  | 
 | ||
|  |      [[`BOOST_HW_SIMD_X86`] [__predef_detection__]] | ||
|  |      ] | ||
|  | 
 | ||
|  |  [table | ||
|  |      [[__predef_symbol__] [__predef_version__]] | ||
|  | 
 | ||
|  |      [[`__SSE4A__`] [BOOST_HW_SIMD_X86_SSE4A_VERSION]] | ||
|  | 
 | ||
|  |      [[`__FMA4__`] [BOOST_HW_SIMD_X86_FMA4_VERSION]] | ||
|  | 
 | ||
|  |      [[`__XOP__`] [BOOST_HW_SIMD_X86_XOP_VERSION]] | ||
|  | 
 | ||
|  |      [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_X86]] | ||
|  |      ] | ||
|  | 
 | ||
|  |  [note This predef includes every other x86 SIMD extensions and also has other | ||
|  |  more specific extensions (FMA4, XOP, SSE4a). You should use this predef | ||
|  |  instead of `BOOST_HW_SIMD_X86` to test if those specific extensions have | ||
|  |  been detected.] | ||
|  | 
 | ||
|  |  */ | ||
|  | 
 | ||
|  | #define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE | ||
|  | 
 | ||
|  | // AMD CPUs also use x86 architecture. We first try to detect if any AMD | ||
|  | // specific extension are detected, if yes, then try to detect more recent x86 | ||
|  | // common extensions. | ||
|  | 
 | ||
|  | #undef BOOST_HW_SIMD_X86_AMD | ||
|  | #if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__XOP__) | ||
|  | #   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_XOP_VERSION | ||
|  | #endif | ||
|  | #if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__FMA4__) | ||
|  | #   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_FMA4_VERSION | ||
|  | #endif | ||
|  | #if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__SSE4A__) | ||
|  | #   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION | ||
|  | #endif | ||
|  | 
 | ||
|  | #if !defined(BOOST_HW_SIMD_X86_AMD) | ||
|  | #   define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE | ||
|  | #else | ||
|  |     // At this point, we know that we have an AMD CPU, we do need to check for | ||
|  |     // other x86 extensions to determine the final version number. | ||
|  | #   include <boost/predef/hardware/simd/x86.h> | ||
|  | #   if BOOST_HW_SIMD_X86 > BOOST_HW_SIMD_X86_AMD | ||
|  | #      undef BOOST_HW_SIMD_X86_AMD | ||
|  | #      define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86 | ||
|  | #   endif | ||
|  | #   define BOOST_HW_SIMD_X86_AMD_AVAILABLE | ||
|  | #endif | ||
|  | 
 | ||
|  | #define BOOST_HW_SIMD_X86_AMD_NAME "x86 (AMD) SIMD" | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 | ||
|  | #include <boost/predef/detail/test.h> | ||
|  | BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86_AMD, BOOST_HW_SIMD_X86_AMD_NAME) |