diff --git a/Configure.cmake b/Configure.cmake index 24348298b..6d8c70eff 100644 --- a/Configure.cmake +++ b/Configure.cmake @@ -177,7 +177,7 @@ endif() # TARGET PROCESSOR DETECTION set(SLEEF_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}") -if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$") +if(CMAKE_SYSTEM_NAME MATCHES "^(Darwin|iOS)$" AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$") set(SLEEF_TARGET_PROCESSOR "${CMAKE_OSX_ARCHITECTURES}") endif() @@ -189,11 +189,17 @@ endif() if(SLEEF_TARGET_PROCESSOR MATCHES "(x86|AMD64|amd64|^i.86$)") set(SLEEF_ARCH_X86 ON CACHE INTERNAL "True for x86 architecture.") - set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") -elseif(SLEEF_TARGET_PROCESSOR MATCHES "aarch64|arm64") + if(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") + else() + set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-DFP_FAST_FMA;-DFP_FAST_FMAF") + endif() +elseif(SLEEF_TARGET_PROCESSOR MATCHES "aarch64|arm64|ARM64") set(SLEEF_ARCH_AARCH64 ON CACHE INTERNAL "True for Aarch64 architecture.") # Aarch64 requires support for advsimdfma4 - set(COMPILER_SUPPORTS_ADVSIMD 1) + if(NOT MSVC) + set(COMPILER_SUPPORTS_ADVSIMD 1) + endif() elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") set(SLEEF_ARCH_PPC64 ON CACHE INTERNAL "True for PPC64 architecture.") @@ -251,7 +257,7 @@ if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)") set(FLAGS_FASTMATH "-ffast-math") set(FLAGS_NOSTRICTALIASING "-fno-strict-aliasing") - if (SLEEF_ARCH_X86 AND SLEEF_ARCH_32BIT) + if (SLEEF_ARCH_X86 AND SLEEF_ARCH_32BIT AND NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten") string(CONCAT FLAGS_STRICTMATH ${FLAGS_STRICTMATH} " -msse2 -mfpmath=sse") string(CONCAT FLAGS_FASTMATH ${FLAGS_FASTMATH} " -msse2 -mfpmath=sse") endif() @@ -488,7 +494,7 @@ endif() # Darwin does not support SVE yet (see issue #474), # therefore we disable SVE on Darwin systems. -if(SLEEF_ARCH_AARCH64 AND SLEEF_ENABLE_SVE AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin") +if(SLEEF_ARCH_AARCH64 AND SLEEF_ENABLE_SVE AND NOT CMAKE_SYSTEM_NAME MATCHES "^(Darwin|iOS)$") string (REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${FLAGS_ENABLE_SVE}") CHECK_C_SOURCE_COMPILES(" #include @@ -756,7 +762,7 @@ if (NOT BUILD_SHARED_LIBS) set(SLEEF_STATIC_LIBS 1) endif() -if (COMPILER_SUPPORTS_WEAK_ALIASES) +if(COMPILER_SUPPORTS_WEAK_ALIASES AND NOT (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "GNU")) set(COMMON_TARGET_DEFINITIONS ${COMMON_TARGET_DEFINITIONS} ENABLE_ALIAS=1) endif() diff --git a/src/arch/helperadvsimd.h b/src/arch/helperadvsimd.h index 473a7583c..3529ce67f 100644 --- a/src/arch/helperadvsimd.h +++ b/src/arch/helperadvsimd.h @@ -5,7 +5,7 @@ /* http://www.boost.org/LICENSE_1_0.txt) */ /*********************************************************************/ -#if !defined(__ARM_NEON) && !defined(SLEEF_GENHEADER) +#if !defined(__ARM_NEON) && !defined(_M_ARM64) && !defined(SLEEF_GENHEADER) #error Please specify advsimd flags. #endif diff --git a/src/common/common.c b/src/common/common.c index 7c1c65e81..e209089bd 100644 --- a/src/common/common.c +++ b/src/common/common.c @@ -33,7 +33,7 @@ EXPORT void *Sleef_malloc(size_t z) { void *ptr = NULL; posix_memalign(&ptr, 409 EXPORT void Sleef_free(void *ptr) { free(ptr); } #endif // #if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER) -#ifdef _MSC_VER +#if defined _MSC_VER && (defined(_M_IX86) || defined(_M_X64)) #include EXPORT void Sleef_x86CpuID(int32_t out[4], uint32_t eax, uint32_t ecx) { __cpuidex(out, eax, ecx);