10
10
11
11
#include < cstring>
12
12
13
- #include < iostream>
14
-
15
13
#ifndef _WIN32
16
- size_t __attribute__ ((target(" avx512f" , " avx512bw" ), optimize(" no-tree-vectorize" )))
14
+
15
+ #if defined(__clang__)
16
+ #define AVX512_TARGET target (" avx512bw" )
17
+ #else
18
+ #define AVX512_TARGET target (" avx512f" , " avx512bw" )
19
+ #endif
20
+
21
+ size_t __attribute__ ((AVX512_TARGET, optimize(" no-tree-vectorize" )))
17
22
gen_null_bitmap_8_impl(uint8_t * dst,
18
23
const uint8_t * src,
19
24
size_t size,
@@ -40,7 +45,7 @@ gen_null_bitmap_8_impl(uint8_t* dst,
40
45
return null_count;
41
46
}
42
47
43
- size_t __attribute__ ((target( " avx512f " , " avx512bw " ) , optimize(" no-tree-vectorize" )))
48
+ size_t __attribute__ ((AVX512_TARGET , optimize(" no-tree-vectorize" )))
44
49
gen_null_bitmap_16_impl(uint8_t * dst,
45
50
const uint16_t * src,
46
51
size_t size,
@@ -67,7 +72,7 @@ gen_null_bitmap_16_impl(uint8_t* dst,
67
72
return null_count;
68
73
}
69
74
70
- size_t __attribute__ ((target( " avx512f " , " avx512bw " ) , optimize(" no-tree-vectorize" )))
75
+ size_t __attribute__ ((AVX512_TARGET , optimize(" no-tree-vectorize" )))
71
76
gen_null_bitmap_32_impl(uint8_t * dst,
72
77
const uint32_t * src,
73
78
size_t size,
@@ -93,7 +98,7 @@ gen_null_bitmap_32_impl(uint8_t* dst,
93
98
return null_count;
94
99
}
95
100
96
- size_t __attribute__ ((target( " avx512f " , " avx512bw " ) , optimize(" no-tree-vectorize" )))
101
+ size_t __attribute__ ((AVX512_TARGET , optimize(" no-tree-vectorize" )))
97
102
gen_null_bitmap_64_impl(uint8_t * dst,
98
103
const uint64_t * src,
99
104
size_t size,
@@ -120,11 +125,15 @@ gen_null_bitmap_64_impl(uint8_t* dst,
120
125
}
121
126
#endif
122
127
128
+ #if defined(_MSC_VER) || defined(__clang__)
129
+ #define BITMAP_GEN_DEFAULT_TARGET_ATTRS
130
+ #else
131
+ #define BITMAP_GEN_DEFAULT_TARGET_ATTRS __attribute__ ((target_clones(" bmi2" , " default" )))
132
+ #endif
133
+
123
134
template <typename TYPE>
124
- size_t gen_null_bitmap_default (uint8_t * dst,
125
- const TYPE* src,
126
- size_t size,
127
- const TYPE null_val) {
135
+ size_t BITMAP_GEN_DEFAULT_TARGET_ATTRS
136
+ gen_null_bitmap_default (uint8_t * dst, const TYPE* src, size_t size, const TYPE null_val) {
128
137
size_t null_count = 0 ;
129
138
TYPE loaded_data[8 ];
130
139
@@ -156,7 +165,6 @@ size_t BITMAP_GEN_TARGET_ATTRS gen_null_bitmap_8_impl(uint8_t* dst,
156
165
const uint8_t * src,
157
166
size_t size,
158
167
const uint8_t null_val) {
159
- // std::cout << "Using default impl " << std::endl;
160
168
return gen_null_bitmap_default<uint8_t >(dst, src, size, null_val);
161
169
}
162
170
0 commit comments