From: <sv...@op...> - 2025-03-21 09:00:22
|
Author: manx Date: Fri Mar 21 10:00:07 2025 New Revision: 23064 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23064 Log: [Imp] mpt/arch/x86_amd64.hpp: Add MPT_ARCH_INTRINSICS_X86_??? macros which signal if the compiler supports a particular set of intrinsics. Modified: trunk/OpenMPT/src/mpt/arch/x86_amd64.hpp Modified: trunk/OpenMPT/src/mpt/arch/x86_amd64.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/arch/x86_amd64.hpp Fri Mar 21 09:58:51 2025 (r23063) +++ trunk/OpenMPT/src/mpt/arch/x86_amd64.hpp Fri Mar 21 10:00:07 2025 (r23064) @@ -253,6 +253,154 @@ +// clang-format off + +// TODO: This needs to be as fine-grained as the MPT_ARCH_X86_??? macros. + +#if MPT_ARCH_X86 || MPT_ARCH_AMD64 + +#if MPT_COMPILER_MSVC + +#define MPT_ARCH_INTRINSICS_X86_I386 +#define MPT_ARCH_INTRINSICS_X86_FPU +#define MPT_ARCH_INTRINSICS_X86_FSIN +#define MPT_ARCH_INTRINSICS_X86_CPUID +#define MPT_ARCH_INTRINSICS_X86_TSC +#define MPT_ARCH_INTRINSICS_X86_CX8 +#define MPT_ARCH_INTRINSICS_X86_CMOV +#define MPT_ARCH_INTRINSICS_X86_MMX +#define MPT_ARCH_INTRINSICS_X86_MMXEXT +#define MPT_ARCH_INTRINSICS_X86_3DNOW +#define MPT_ARCH_INTRINSICS_X86_3DNOWEXT +#define MPT_ARCH_INTRINSICS_X86_3DNOWPREFETCH +#if MPT_MSVC_AT_LEAST(2003, 0) +#define MPT_ARCH_INTRINSICS_X86_FXSR +#define MPT_ARCH_INTRINSICS_X86_SSE +#define MPT_ARCH_INTRINSICS_X86_SSE2 +#endif +#if MPT_MSVC_AT_LEAST(2008, 0) +#define MPT_ARCH_INTRINSICS_X86_SSE3 +#define MPT_ARCH_INTRINSICS_X86_SSSE3 +#define MPT_ARCH_INTRINSICS_X86_SSE4_1 +#define MPT_ARCH_INTRINSICS_X86_SSE4_2 +#endif +#if MPT_MSVC_AT_LEAST(2010, 1) +#define MPT_ARCH_INTRINSICS_X86_XSAVE +#define MPT_ARCH_INTRINSICS_X86_AVX +#endif +#if MPT_MSVC_AT_LEAST(2012, 0) +#define MPT_ARCH_INTRINSICS_X86_AVX2 +#define MPT_ARCH_INTRINSICS_X86_FMA +#define MPT_ARCH_INTRINSICS_X86_BMI1 +#endif + +#elif MPT_COMPILER_GCC || MPT_COMPILER_CLANG + +#ifdef MPT_ARCH_X86_I386 +#define MPT_ARCH_INTRINSICS_X86_I386 +#endif +#ifdef MPT_ARCH_X86_FPU +#define MPT_ARCH_INTRINSICS_X86_FPU +#endif +#ifdef MPT_ARCH_X86_FSIN +#define MPT_ARCH_INTRINSICS_X86_FSIN +#endif +#ifdef MPT_ARCH_X86_I486 +#define MPT_ARCH_INTRINSICS_X86_I486 +#endif +#ifdef MPT_ARCH_X86_CPUID +#define MPT_ARCH_INTRINSICS_X86_CPUID +#endif +#ifdef MPT_ARCH_X86_TSC +#define MPT_ARCH_INTRINSICS_X86_TSC +#endif +#ifdef MPT_ARCH_X86_CX8 +#define MPT_ARCH_INTRINSICS_X86_CX8 +#endif +#ifdef MPT_ARCH_X86_CMOV +#define MPT_ARCH_INTRINSICS_X86_CMOV +#endif +#ifdef MPT_ARCH_X86_MMX +#define MPT_ARCH_INTRINSICS_X86_MMX +#endif +#ifdef MPT_ARCH_X86_MMXEXT +#define MPT_ARCH_INTRINSICS_X86_MMXEXT +#endif +#ifdef MPT_ARCH_X86_3DNOW +#define MPT_ARCH_INTRINSICS_X86_3DNOW +#endif +#ifdef MPT_ARCH_X86_3DNOWEXT +#define MPT_ARCH_INTRINSICS_X86_3DNOWEXT +#endif +#ifdef MPT_ARCH_X86_3DNOWPREFETCH +#define MPT_ARCH_INTRINSICS_X86_3DNOWPREFETCH +#endif +#ifdef MPT_ARCH_X86_FXSR +#define MPT_ARCH_INTRINSICS_X86_FXSR +#endif +#ifdef MPT_ARCH_X86_SSE +#define MPT_ARCH_INTRINSICS_X86_SSE +#endif +#ifdef MPT_ARCH_X86_SSE2 +#define MPT_ARCH_INTRINSICS_X86_SSE2 +#endif +#ifdef MPT_ARCH_X86_SSE3 +#define MPT_ARCH_INTRINSICS_X86_SSE3 +#endif +#ifdef MPT_ARCH_X86_SSSE3 +#define MPT_ARCH_INTRINSICS_X86_SSSE3 +#endif +#ifdef MPT_ARCH_X86_SSE4_1 +#define MPT_ARCH_INTRINSICS_X86_SSE4_1 +#endif +#ifdef MPT_ARCH_X86_SSE4_2 +#define MPT_ARCH_INTRINSICS_X86_SSE4_2 +#endif +#ifdef MPT_ARCH_X86_XSAVE +#define MPT_ARCH_INTRINSICS_X86_XSAVE +#endif +#ifdef MPT_ARCH_X86_AVX +#define MPT_ARCH_INTRINSICS_X86_AVX +#endif +#ifdef MPT_ARCH_X86_AVX2 +#define MPT_ARCH_INTRINSICS_X86_AVX2 +#endif +#ifdef MPT_ARCH_X86_CX16 +#define MPT_ARCH_INTRINSICS_X86_CX16 +#endif +#ifdef MPT_ARCH_X86_LAHF +#define MPT_ARCH_INTRINSICS_X86_LAHF +#endif +#ifdef MPT_ARCH_X86_POPCNT +#define MPT_ARCH_INTRINSICS_X86_POPCNT +#endif +#ifdef MPT_ARCH_X86_BMI1 +#define MPT_ARCH_INTRINSICS_X86_BMI1 +#endif +#ifdef MPT_ARCH_X86_BMI2 +#define MPT_ARCH_INTRINSICS_X86_BMI2 +#endif +#ifdef MPT_ARCH_X86_F16C +#define MPT_ARCH_INTRINSICS_X86_F16C +#endif +#ifdef MPT_ARCH_X86_FMA +#define MPT_ARCH_INTRINSICS_X86_FMA +#endif +#ifdef MPT_ARCH_X86_LZCNT +#define MPT_ARCH_INTRINSICS_X86_LZCNT +#endif +#ifdef MPT_ARCH_X86_MOVBE +#define MPT_ARCH_INTRINSICS_X86_MOVBE +#endif + +#endif // MPT_COMPILER + +#endif // MPT_ARCH + +// clang-format on + + + namespace mpt { inline namespace MPT_INLINE_NS { |