summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--xmake/modules/core/tools/cl.lua13
-rw-r--r--xmake/modules/core/tools/gcc.lua22
-rw-r--r--xmake/modules/private/check/checkers/api/target/vectorexts.lua2
4 files changed, 24 insertions, 15 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 71e2a108a..fee162eea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
### New features
* [#4002](https://github.com/xmake-io/xmake/issues/4002): Add soname and version support
+* [#1613](https://github.com/xmake-io/xmake/issues/1613): Add avx512 and sse4.2 for add_vectorexts
### Changes
@@ -1625,6 +1626,7 @@
### 新特性
* [#4002](https://github.com/xmake-io/xmake/issues/4002): 增加 soname 支持
+* [#1613](https://github.com/xmake-io/xmake/issues/1613): 为 add_vectorexts 增加 avx512 和 sse4.2 支持
### 改进
diff --git a/xmake/modules/core/tools/cl.lua b/xmake/modules/core/tools/cl.lua
index e69b7d814..aa8c9aba1 100644
--- a/xmake/modules/core/tools/cl.lua
+++ b/xmake/modules/core/tools/cl.lua
@@ -180,11 +180,14 @@ end
function nf_vectorext(self, extension)
local maps =
{
- sse = "-arch:SSE"
- , sse2 = "-arch:SSE2"
- , avx = "-arch:AVX"
- , avx2 = "-arch:AVX2"
- , fma = "-arch:AVX2"
+ sse = "-arch:SSE"
+ , sse2 = "-arch:SSE2"
+ , ["sse4.2"] = "/d2archSSE42" -- the only undocumented way works, @see https://github.com/xmake-io/xmake/issues/3786
+ , avx = "-arch:AVX"
+ , avx2 = "-arch:AVX2"
+ , avx512 = "-arch:AVX512" -- for msvc 2019+ avx512 support
+ , fma = "-arch:AVX2"
+ , all = {"-arch:SSE", "-arch:SSE2", "/d2archSSE42", "-arch:AVX", "-arch:AVX2", "-arch:AVX512"}
}
local flag = maps[extension]
if flag and self:has_flags(flag, "cxflags") then
diff --git a/xmake/modules/core/tools/gcc.lua b/xmake/modules/core/tools/gcc.lua
index 60f6ac805..b45c04119 100644
--- a/xmake/modules/core/tools/gcc.lua
+++ b/xmake/modules/core/tools/gcc.lua
@@ -164,17 +164,21 @@ function nf_optimize(self, level)
end
-- make the vector extension flag
+-- @see https://github.com/xmake-io/xmake/issues/1613
function nf_vectorext(self, extension)
local maps = {
- mmx = "-mmmx"
- , sse = "-msse"
- , sse2 = "-msse2"
- , sse3 = "-msse3"
- , ssse3 = "-mssse3"
- , avx = "-mavx"
- , avx2 = "-mavx2"
- , fma = "-mfma"
- , neon = "-mfpu=neon"
+ mmx = "-mmmx"
+ , sse = "-msse"
+ , sse2 = "-msse2"
+ , sse3 = "-msse3"
+ , ssse3 = "-mssse3"
+ , ["sse4.2"] = "-msse4.2"
+ , avx = "-mavx"
+ , avx2 = "-mavx2"
+ , avx512 = {"-mavx512f", "-mavx512dq", "-mavx512bw", "-mavx512vl"}
+ , fma = "-mfma"
+ , neon = "-mfpu=neon"
+ , all = "-march=native"
}
return maps[extension]
end
diff --git a/xmake/modules/private/check/checkers/api/target/vectorexts.lua b/xmake/modules/private/check/checkers/api/target/vectorexts.lua
index 3c7a97450..1dbbc0735 100644
--- a/xmake/modules/private/check/checkers/api/target/vectorexts.lua
+++ b/xmake/modules/private/check/checkers/api/target/vectorexts.lua
@@ -24,5 +24,5 @@ import(".api_checker")
function main(opt)
opt = opt or {}
api_checker.check_targets("vectorexts", table.join(opt, {values = {
- "none", "sse", "sse2", "sse3", "ssse3", "avx", "avx2", "fma", "neon"}}))
+ "none", "all", "sse", "sse2", "sse3", "ssse3", "sse4.2", "avx", "avx2", "avx512", "fma", "neon"}}))
end