diff --git a/include/xsimd/types/xsimd_avx2_register.hpp b/include/xsimd/types/xsimd_avx2_register.hpp index 951f5e4e4..778889461 100644 --- a/include/xsimd/types/xsimd_avx2_register.hpp +++ b/include/xsimd/types/xsimd_avx2_register.hpp @@ -10,6 +10,7 @@ namespace xsimd static constexpr bool supported() { return XSIMD_WITH_AVX2; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(2, 2, 0); } + static constexpr char const* name() { return "avx2"; } }; #if XSIMD_WITH_AVX2 diff --git a/include/xsimd/types/xsimd_avx512bw_register.hpp b/include/xsimd/types/xsimd_avx512bw_register.hpp index 4fa2286ab..7f11e25d4 100644 --- a/include/xsimd/types/xsimd_avx512bw_register.hpp +++ b/include/xsimd/types/xsimd_avx512bw_register.hpp @@ -9,6 +9,7 @@ namespace xsimd { static constexpr bool supported() { return XSIMD_WITH_AVX512BW; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(3, 4, 0); } + static constexpr char const* name() { return "avx512bw"; } }; #if XSIMD_WITH_AVX512BW diff --git a/include/xsimd/types/xsimd_avx512cd_register.hpp b/include/xsimd/types/xsimd_avx512cd_register.hpp index 7a55f4aff..02bc80bc9 100644 --- a/include/xsimd/types/xsimd_avx512cd_register.hpp +++ b/include/xsimd/types/xsimd_avx512cd_register.hpp @@ -9,6 +9,7 @@ namespace xsimd { static constexpr bool supported() { return XSIMD_WITH_AVX512BW; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(3, 2, 0); } + static constexpr char const* name() { return "avx512cd"; } }; #if XSIMD_WITH_AVX512BW diff --git a/include/xsimd/types/xsimd_avx512dq_register.hpp b/include/xsimd/types/xsimd_avx512dq_register.hpp index fb2c59f9f..1966ed621 100644 --- a/include/xsimd/types/xsimd_avx512dq_register.hpp +++ b/include/xsimd/types/xsimd_avx512dq_register.hpp @@ -9,6 +9,7 @@ namespace xsimd { static constexpr bool supported() { return XSIMD_WITH_AVX512DQ; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(3, 3, 0); } + static constexpr char const* name() { return "avx512dq"; } }; #if XSIMD_WITH_AVX512DQ diff --git a/include/xsimd/types/xsimd_avx512f_register.hpp b/include/xsimd/types/xsimd_avx512f_register.hpp index c54c0b701..0543ad4fa 100644 --- a/include/xsimd/types/xsimd_avx512f_register.hpp +++ b/include/xsimd/types/xsimd_avx512f_register.hpp @@ -11,6 +11,7 @@ namespace xsimd { static constexpr unsigned version() { return generic::version(3, 1, 0); } static constexpr std::size_t alignment() { return 64; } static constexpr bool requires_alignment() { return true; } + static constexpr char const* name() { return "avx512f"; } }; #if XSIMD_WITH_AVX512F diff --git a/include/xsimd/types/xsimd_avx_register.hpp b/include/xsimd/types/xsimd_avx_register.hpp index 6ae2536a8..c86731c3f 100644 --- a/include/xsimd/types/xsimd_avx_register.hpp +++ b/include/xsimd/types/xsimd_avx_register.hpp @@ -11,6 +11,7 @@ namespace xsimd { static constexpr unsigned version() { return generic::version(2, 1, 0); } static constexpr std::size_t alignment() { return 32; } static constexpr bool requires_alignment() { return true; } + static constexpr char const* name() { return "avx"; } }; } diff --git a/include/xsimd/types/xsimd_fma3_register.hpp b/include/xsimd/types/xsimd_fma3_register.hpp index edbd9d48b..3b00ad2ec 100644 --- a/include/xsimd/types/xsimd_fma3_register.hpp +++ b/include/xsimd/types/xsimd_fma3_register.hpp @@ -10,6 +10,7 @@ namespace xsimd { static constexpr bool supported() { return XSIMD_WITH_FMA3; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(1, 5, 0); } + static constexpr char const* name() { return "sse4.2+fma"; } }; #if XSIMD_WITH_FMA3 diff --git a/include/xsimd/types/xsimd_fma5_register.hpp b/include/xsimd/types/xsimd_fma5_register.hpp index 9ddb9e298..73d48ff0a 100644 --- a/include/xsimd/types/xsimd_fma5_register.hpp +++ b/include/xsimd/types/xsimd_fma5_register.hpp @@ -10,6 +10,7 @@ namespace xsimd { static constexpr bool supported() { return XSIMD_WITH_FMA5; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(2, 3, 0); } + static constexpr char const* name() { return "avx2+fma"; } }; #if XSIMD_WITH_FMA5 diff --git a/include/xsimd/types/xsimd_neon64_register.hpp b/include/xsimd/types/xsimd_neon64_register.hpp index 5fc0b1dbf..1f7060e8e 100644 --- a/include/xsimd/types/xsimd_neon64_register.hpp +++ b/include/xsimd/types/xsimd_neon64_register.hpp @@ -12,6 +12,7 @@ namespace xsimd static constexpr bool requires_alignment() { return true; } static constexpr std::size_t alignment() { return 16; } static constexpr unsigned version() { return generic::version(8, 1, 0); } + static constexpr char const* name() { return "arm64+neon"; } }; #if XSIMD_WITH_NEON64 diff --git a/include/xsimd/types/xsimd_neon_register.hpp b/include/xsimd/types/xsimd_neon_register.hpp index a97b60998..037b17ea5 100644 --- a/include/xsimd/types/xsimd_neon_register.hpp +++ b/include/xsimd/types/xsimd_neon_register.hpp @@ -17,6 +17,7 @@ namespace xsimd static constexpr bool requires_alignment() { return true; } static constexpr std::size_t alignment() { return 16; } static constexpr unsigned version() { return generic::version(7, 0, 0); } + static constexpr char const* name() { return "arm32+neon"; } }; #if XSIMD_WITH_NEON diff --git a/include/xsimd/types/xsimd_sse2_register.hpp b/include/xsimd/types/xsimd_sse2_register.hpp index 9085f6349..710b4576b 100644 --- a/include/xsimd/types/xsimd_sse2_register.hpp +++ b/include/xsimd/types/xsimd_sse2_register.hpp @@ -18,6 +18,7 @@ namespace xsimd static constexpr bool requires_alignment() { return true; } static constexpr unsigned version() { return generic::version(1, 2, 0); } static constexpr std::size_t alignment() { return 16; } + static constexpr char const* name() { return "sse2"; } }; #if XSIMD_WITH_SSE2 diff --git a/include/xsimd/types/xsimd_sse3_register.hpp b/include/xsimd/types/xsimd_sse3_register.hpp index a2805986b..f08331add 100644 --- a/include/xsimd/types/xsimd_sse3_register.hpp +++ b/include/xsimd/types/xsimd_sse3_register.hpp @@ -14,6 +14,7 @@ namespace xsimd static constexpr bool supported() { return XSIMD_WITH_SSE3; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(1, 3, 0); } + static constexpr char const* name() { return "sse3"; } }; #if XSIMD_WITH_SSE3 diff --git a/include/xsimd/types/xsimd_sse4_1_register.hpp b/include/xsimd/types/xsimd_sse4_1_register.hpp index 9c618d994..e19deafd8 100644 --- a/include/xsimd/types/xsimd_sse4_1_register.hpp +++ b/include/xsimd/types/xsimd_sse4_1_register.hpp @@ -14,6 +14,7 @@ namespace xsimd static constexpr bool supported() { return XSIMD_WITH_SSE4_1; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(1, 4, 1); } + static constexpr char const* name() { return "sse4.1"; } }; #if XSIMD_WITH_SSE4_1 diff --git a/include/xsimd/types/xsimd_sse4_2_register.hpp b/include/xsimd/types/xsimd_sse4_2_register.hpp index a52829d77..d3d218ef7 100644 --- a/include/xsimd/types/xsimd_sse4_2_register.hpp +++ b/include/xsimd/types/xsimd_sse4_2_register.hpp @@ -14,6 +14,7 @@ namespace xsimd static constexpr bool supported() { return XSIMD_WITH_SSE4_2; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(1, 4, 2); } + static constexpr char const* name() { return "sse4.2"; } }; #if XSIMD_WITH_SSE4_2 diff --git a/include/xsimd/types/xsimd_ssse3_register.hpp b/include/xsimd/types/xsimd_ssse3_register.hpp index 52117c3ef..4a37b6a9e 100644 --- a/include/xsimd/types/xsimd_ssse3_register.hpp +++ b/include/xsimd/types/xsimd_ssse3_register.hpp @@ -14,6 +14,7 @@ namespace xsimd static constexpr bool supported() { return XSIMD_WITH_SSSE3; } static constexpr bool available() { return true; } static constexpr unsigned version() { return generic::version(1, 3, 1); } + static constexpr char const* name() { return "ssse3"; } }; #if XSIMD_WITH_SSSE3 diff --git a/test/test_arch.cpp b/test/test_arch.cpp index f508c93a1..3e95a757c 100644 --- a/test/test_arch.cpp +++ b/test/test_arch.cpp @@ -30,6 +30,13 @@ TEST(arch, supported) xsimd::supported_architectures::for_each(check_supported{}); } +TEST(arch, name) +{ + constexpr char const* name = xsimd::default_arch::name(); + (void)name; +} + + struct check_available { template void operator()(Arch) const {