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)
 |