10
10
11
11
#include < cstring>
12
12
13
- #ifdef __AVX512F__
14
- size_t __attribute__ ((target(" avx512bw" , " avx512f" ), optimize(" no-tree-vectorize" )))
15
- gen_null_bitmap_8(uint8_t * dst, const uint8_t * src, size_t size, const uint8_t null_val) {
13
+ #include < iostream>
14
+
15
+ #ifndef _WIN32
16
+ size_t __attribute__ ((target(" avx512f" , " avx512bw" ), optimize(" no-tree-vectorize" )))
17
+ gen_null_bitmap_8_impl(uint8_t * dst,
18
+ const uint8_t * src,
19
+ size_t size,
20
+ const uint8_t null_val) {
16
21
__m512i nulls_mask = _mm512_set1_epi8 (reinterpret_cast <const int8_t &>(null_val));
17
22
18
23
size_t null_count = 0 ;
@@ -35,11 +40,11 @@ gen_null_bitmap_8(uint8_t* dst, const uint8_t* src, size_t size, const uint8_t n
35
40
return null_count;
36
41
}
37
42
38
- size_t __attribute__ ((target(" avx512bw " , " avx512f " ), optimize(" no-tree-vectorize" )))
39
- gen_null_bitmap_16 (uint8_t * dst,
40
- const uint16_t * src,
41
- size_t size,
42
- const uint16_t null_val) {
43
+ size_t __attribute__ ((target(" avx512f " , " avx512bw " ), optimize(" no-tree-vectorize" )))
44
+ gen_null_bitmap_16_impl (uint8_t * dst,
45
+ const uint16_t * src,
46
+ size_t size,
47
+ const uint16_t null_val) {
43
48
__m512i nulls_mask = _mm512_set1_epi16 (reinterpret_cast <const int16_t &>(null_val));
44
49
45
50
size_t null_count = 0 ;
@@ -62,11 +67,11 @@ gen_null_bitmap_16(uint8_t* dst,
62
67
return null_count;
63
68
}
64
69
65
- size_t __attribute__ ((target(" avx512bw " , " avx512f " ), optimize(" no-tree-vectorize" )))
66
- gen_null_bitmap_32 (uint8_t * dst,
67
- const uint32_t * src,
68
- size_t size,
69
- const uint32_t null_val) {
70
+ size_t __attribute__ ((target(" avx512f " , " avx512bw " ), optimize(" no-tree-vectorize" )))
71
+ gen_null_bitmap_32_impl (uint8_t * dst,
72
+ const uint32_t * src,
73
+ size_t size,
74
+ const uint32_t null_val) {
70
75
__m512i nulls_mask = _mm512_set1_epi32 (reinterpret_cast <const int32_t &>(null_val));
71
76
72
77
size_t null_count = 0 ;
@@ -88,11 +93,11 @@ gen_null_bitmap_32(uint8_t* dst,
88
93
return null_count;
89
94
}
90
95
91
- size_t __attribute__ ((target(" avx512bw " , " avx512f " ), optimize(" no-tree-vectorize" )))
92
- gen_null_bitmap_64 (uint8_t * dst,
93
- const uint64_t * src,
94
- size_t size,
95
- const uint64_t null_val) {
96
+ size_t __attribute__ ((target(" avx512f " , " avx512bw " ), optimize(" no-tree-vectorize" )))
97
+ gen_null_bitmap_64_impl (uint8_t * dst,
98
+ const uint64_t * src,
99
+ size_t size,
100
+ const uint64_t null_val) {
96
101
__m512i nulls_mask = _mm512_set1_epi64 (reinterpret_cast <const int64_t &>(null_val));
97
102
98
103
size_t null_count = 0 ;
@@ -142,35 +147,65 @@ size_t gen_null_bitmap_default(uint8_t* dst,
142
147
}
143
148
144
149
#if defined(_MSC_VER)
145
- #define DEFAULT_TARGET_ATTRIBUTE
150
+ #define BITMAP_GEN_TARGET_ATTRS
146
151
#else
147
- #define DEFAULT_TARGET_ATTRIBUTE __attribute__ ((target(" default" )))
152
+ #define BITMAP_GEN_TARGET_ATTRS __attribute__ ((target(" default" )))
148
153
#endif
149
154
150
- size_t DEFAULT_TARGET_ATTRIBUTE gen_null_bitmap_8 (uint8_t * dst,
151
- const uint8_t * src,
152
- size_t size,
153
- const uint8_t null_val) {
155
+ size_t BITMAP_GEN_TARGET_ATTRS gen_null_bitmap_8_impl (uint8_t * dst,
156
+ const uint8_t * src,
157
+ size_t size,
158
+ const uint8_t null_val) {
159
+ // std::cout << "Using default impl " << std::endl;
154
160
return gen_null_bitmap_default<uint8_t >(dst, src, size, null_val);
155
161
}
156
162
157
- size_t DEFAULT_TARGET_ATTRIBUTE gen_null_bitmap_16 (uint8_t * dst,
158
- const uint16_t * src,
159
- size_t size,
160
- const uint16_t null_val) {
163
+ size_t BITMAP_GEN_TARGET_ATTRS gen_null_bitmap_16_impl (uint8_t * dst,
164
+ const uint16_t * src,
165
+ size_t size,
166
+ const uint16_t null_val) {
161
167
return gen_null_bitmap_default<uint16_t >(dst, src, size, null_val);
162
168
}
163
169
164
- size_t DEFAULT_TARGET_ATTRIBUTE gen_null_bitmap_32 (uint8_t * dst,
165
- const uint32_t * src,
166
- size_t size,
167
- const uint32_t null_val) {
170
+ size_t BITMAP_GEN_TARGET_ATTRS gen_null_bitmap_32_impl (uint8_t * dst,
171
+ const uint32_t * src,
172
+ size_t size,
173
+ const uint32_t null_val) {
168
174
return gen_null_bitmap_default<uint32_t >(dst, src, size, null_val);
169
175
}
170
176
171
- size_t DEFAULT_TARGET_ATTRIBUTE gen_null_bitmap_64 (uint8_t * dst,
172
- const uint64_t * src,
173
- size_t size,
174
- const uint64_t null_val) {
177
+ size_t BITMAP_GEN_TARGET_ATTRS gen_null_bitmap_64_impl (uint8_t * dst,
178
+ const uint64_t * src,
179
+ size_t size,
180
+ const uint64_t null_val) {
175
181
return gen_null_bitmap_default<uint64_t >(dst, src, size, null_val);
176
182
}
183
+
184
+ // dispatchers
185
+ size_t gen_null_bitmap_8 (uint8_t * dst,
186
+ const uint8_t * src,
187
+ size_t size,
188
+ const uint8_t null_val) {
189
+ return gen_null_bitmap_8_impl (dst, src, size, null_val);
190
+ }
191
+
192
+ size_t gen_null_bitmap_16 (uint8_t * dst,
193
+ const uint16_t * src,
194
+ size_t size,
195
+ const uint16_t null_val) {
196
+ return gen_null_bitmap_16_impl (dst, src, size, null_val);
197
+ }
198
+
199
+ size_t gen_null_bitmap_32 (uint8_t * dst,
200
+ const uint32_t * src,
201
+ size_t size,
202
+ const uint32_t null_val) {
203
+ return gen_null_bitmap_32_impl (dst, src, size, null_val);
204
+ }
205
+
206
+ size_t gen_null_bitmap_64 (uint8_t * dst,
207
+ const uint64_t * src,
208
+ size_t size,
209
+ const uint64_t null_val) {
210
+ return gen_null_bitmap_64_impl (dst, src, size, null_val);
211
+ }
0 commit comments