diff --git a/premake5.lua b/premake5.lua index 811b8fbf6..6070ff987 100644 --- a/premake5.lua +++ b/premake5.lua @@ -126,7 +126,7 @@ filter({"configurations:Release", "platforms:Windows"}) -- "toolset:msc" filter("platforms:Linux") system("linux") toolset("clang") - vectorextensions("AVX2") + vectorextensions("AVX") --buildoptions({ -- "-mlzcnt", -- (don't) Assume lzcnt is supported. --}) diff --git a/src/xenia/base/memory.cc b/src/xenia/base/memory.cc index 09d899ba6..8d9cb3dc6 100644 --- a/src/xenia/base/memory.cc +++ b/src/xenia/base/memory.cc @@ -308,6 +308,11 @@ void copy_and_swap_32_aligned(void* dest_ptr, const void* src_ptr, } } +// Enable AVX2 for this function even when building with -mavx +// The function has runtime detection to only use AVX2 on supported CPUs +#if defined(__GNUC__) || defined(__clang__) +__attribute__((target("avx2"))) +#endif void copy_and_swap_32_unaligned(void* dest_ptr, const void* src_ptr, size_t count) { auto dest = reinterpret_cast(dest_ptr);