Simplify multiversioning using target_clones()

This commit is contained in:
Marcus Holland-Moritz 2023-09-04 22:50:44 +02:00
parent f82fb8509e
commit b4becd5d48
2 changed files with 6 additions and 36 deletions

View File

@ -79,25 +79,10 @@ int distance(std::array<T, N> const& a, std::array<T, N> const& b) {
#ifdef DWARFS_MULTIVERSIONING
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
__attribute__((target("avx512vpopcntdq"))) int
distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);
}
__attribute__((target_clones("avx512vpopcntdq", "popcnt", "default")))
#else
__attribute__((target_clones("popcnt", "default")))
#endif
__attribute__((target("popcnt"))) int
distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);
}
#ifdef __clang__
#pragma clang diagnostic pop
#endif
#endif
#ifdef DWARFS_MULTIVERSIONING
__attribute__((target("default")))
#endif
int distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);

View File

@ -46,25 +46,10 @@ int distance(std::array<T, N> const& a, std::array<T, N> const& b) {
#ifdef DWARFS_MULTIVERSIONING
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
__attribute__((target("avx512vpopcntdq"))) int
distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);
}
__attribute__((target_clones("avx512vpopcntdq", "popcnt", "default")))
#else
__attribute__((target_clones("popcnt", "default")))
#endif
__attribute__((target("popcnt"))) int
distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);
}
#ifdef __clang__
#pragma clang diagnostic pop
#endif
#endif
#ifdef DWARFS_MULTIVERSIONING
__attribute__((target("default")))
#endif
int distance(std::array<uint64_t, 4> const& a, std::array<uint64_t, 4> const& b) {
return distance<uint64_t, 4>(a, b);