macro(sourcemeta_enable_simd)
  # Attempt to enable SIMD (SSE/AVX/NEON)
  include(CheckCXXCompilerFlag)
  if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86|AMD64")
    if(MSVC)
      check_cxx_compiler_flag("/arch:AVX2" COMPILER_SUPPORTS_AVX2)
      if(COMPILER_SUPPORTS_AVX2)
        message(STATUS "Enabling SIMD AVX2")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
      elseif(NOT CMAKE_CL_64)
        message(STATUS "Enabling SIMD SSE2")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
      endif()
    else()
      check_cxx_compiler_flag("-mavx2" COMPILER_SUPPORTS_AVX2)
      if(COMPILER_SUPPORTS_AVX2)
        message(STATUS "Enabling SIMD AVX2")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
      else()
        check_cxx_compiler_flag("-msse4.2" COMPILER_SUPPORTS_SSE42)
        if(COMPILER_SUPPORTS_SSE42)
          message(STATUS "Enabling SIMD SSE4.2")
          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
        else()
          check_cxx_compiler_flag("-msse2" COMPILER_SUPPORTS_SSE2)
          if(COMPILER_SUPPORTS_SSE2)
            message(STATUS "Enabling SIMD SSE2")
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
          endif()
        endif()
      endif()
    endif()
  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64" AND NOT MSVC)
    check_cxx_compiler_flag("-march=armv8-a+fp+simd" COMPILER_SUPPORTS_NEON)
    if(COMPILER_SUPPORTS_NEON)
      message(STATUS "Enabling SIMD NEON")
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+fp+simd")
    endif()
  endif()
endmacro()
