From 6d1859ca8f747059042fef5434f4a365d289437c Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Dec 2018 17:41:13 +0100 Subject: compat/arch: simplify microarchitecture detection --- compat/arch.hpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 compat/arch.hpp (limited to 'compat') diff --git a/compat/arch.hpp b/compat/arch.hpp new file mode 100644 index 00000000..d5405f47 --- /dev/null +++ b/compat/arch.hpp @@ -0,0 +1,53 @@ +#pragma once + +// fix MSVC arch check macros + +// this file is too simple to fall under copyright, and +// can be copied, modified, and redistributed freely with +// no conditions. there's no warranty. -sh 20181226 + +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wreserved-id-macro" +# pragma clang diagnostic ignored "-Wunused-macros" +#endif + +#if defined _MSC_VER +# if defined _M_AMD64 +# undef __x86_64__ +# define __x86_64__ 1 +# elif defined _M_IX86 +# undef __i386__ +# define __i386__ 1 +# endif + +# if defined __AVX__ || defined __x86_64__ || \ + defined _M_IX86 && _M_IX86_FP >= 2 +# undef __SSE__ +# undef __SSE2__ +# undef __SSE3__ +# define __SSE__ 1 +# define __SSE2__ 1 +# define __SSE3__ 1 // assume SSE3 in the _M_IX86_FP >= 2 case +# endif +#endif + +#ifdef __clang__ +# pragma clang diagnostic pop +#endif + +#if defined __SSE3__ +# define OTR_ARCH_DENORM_DAZ +# include +#elif defined __SSE2__ +# define OTR_ARCH_DENORM_FTZ +# include +#endif + +#if defined __SSE2__ +# define OTR_ARCH_FPU_MASK +# include +#endif + +#include +#include -- cgit v1.2.3