Skip to content

Commit 52b7ba7

Browse files
committed
Surround "#pragma clang" with checks for Clang to fix compilation on GCC 12 and GCC 13
These changes were performed automatically by the following script: https://gist.githubusercontent.com/mbautin/9a9ec9933dd4daf954b2a878f48a8048/raw (generated by ChatGPT). See also ashvardanian#192.
1 parent 21145a9 commit 52b7ba7

File tree

7 files changed

+226
-0
lines changed

7 files changed

+226
-0
lines changed

include/simsimd/binary.h

+20
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,11 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_serial(simsimd_b8_t const* a, simsimd_b8_
8080
#if SIMSIMD_TARGET_NEON
8181
#pragma GCC push_options
8282
#pragma GCC target("arch=armv8.2-a+simd")
83+
#ifdef __clang__
8384
#pragma clang attribute push(__attribute__((target("arch=armv8.2-a+simd"))), apply_to = function)
8485

86+
#endif
87+
8588
SIMSIMD_PUBLIC void simsimd_hamming_b8_neon(simsimd_b8_t const* a, simsimd_b8_t const* b, simsimd_size_t n_words,
8689
simsimd_distance_t* result) {
8790
simsimd_i32_t differences = 0;
@@ -113,15 +116,20 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_neon(simsimd_b8_t const* a, simsimd_b8_t
113116
*result = (union_ != 0) ? 1 - (simsimd_f64_t)intersection / (simsimd_f64_t)union_ : 1;
114117
}
115118

119+
#ifdef __clang__
116120
#pragma clang attribute pop
121+
#endif
117122
#pragma GCC pop_options
118123
#endif // SIMSIMD_TARGET_NEON
119124

120125
#if SIMSIMD_TARGET_SVE
121126
#pragma GCC push_options
122127
#pragma GCC target("arch=armv8.2-a+sve")
128+
#ifdef __clang__
123129
#pragma clang attribute push(__attribute__((target("arch=armv8.2-a+sve"))), apply_to = function)
124130

131+
#endif
132+
125133
SIMSIMD_PUBLIC void simsimd_hamming_b8_sve(simsimd_b8_t const* a, simsimd_b8_t const* b, simsimd_size_t n_words,
126134
simsimd_distance_t* result) {
127135
simsimd_size_t i = 0;
@@ -151,7 +159,9 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_sve(simsimd_b8_t const* a, simsimd_b8_t c
151159
*result = (union_ != 0) ? 1 - (simsimd_f64_t)intersection / (simsimd_f64_t)union_ : 1;
152160
}
153161

162+
#ifdef __clang__
154163
#pragma clang attribute pop
164+
#endif
155165
#pragma GCC pop_options
156166
#endif // SIMSIMD_TARGET_SVE
157167
#endif // SIMSIMD_TARGET_ARM
@@ -160,9 +170,12 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_sve(simsimd_b8_t const* a, simsimd_b8_t c
160170
#if SIMSIMD_TARGET_ICE
161171
#pragma GCC push_options
162172
#pragma GCC target("avx2", "avx512f", "avx512vl", "bmi2", "avx512bw", "avx512vpopcntdq")
173+
#ifdef __clang__
163174
#pragma clang attribute push(__attribute__((target("avx2,avx512f,avx512vl,bmi2,avx512bw,avx512vpopcntdq"))), \
164175
apply_to = function)
165176

177+
#endif
178+
166179
SIMSIMD_PUBLIC void simsimd_hamming_b8_ice(simsimd_b8_t const* a, simsimd_b8_t const* b, simsimd_size_t n_words,
167180
simsimd_distance_t* result) {
168181
__m512i differences_vec = _mm512_setzero_si512();
@@ -216,15 +229,20 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_ice(simsimd_b8_t const* a, simsimd_b8_t c
216229
*result = (union_ != 0) ? 1 - (simsimd_f64_t)intersection / (simsimd_f64_t)union_ : 1;
217230
}
218231

232+
#ifdef __clang__
219233
#pragma clang attribute pop
234+
#endif
220235
#pragma GCC pop_options
221236
#endif // SIMSIMD_TARGET_ICE
222237

223238
#if SIMSIMD_TARGET_HASWELL
224239
#pragma GCC push_options
225240
#pragma GCC target("popcnt")
241+
#ifdef __clang__
226242
#pragma clang attribute push(__attribute__((target("popcnt"))), apply_to = function)
227243

244+
#endif
245+
228246
SIMSIMD_PUBLIC void simsimd_hamming_b8_haswell(simsimd_b8_t const* a, simsimd_b8_t const* b, simsimd_size_t n_words,
229247
simsimd_distance_t* result) {
230248
// x86 supports unaligned loads and works just fine with the scalar version for small vectors.
@@ -248,7 +266,9 @@ SIMSIMD_PUBLIC void simsimd_jaccard_b8_haswell(simsimd_b8_t const* a, simsimd_b8
248266
*result = (union_ != 0) ? 1 - (simsimd_f64_t)intersection / (simsimd_f64_t)union_ : 1;
249267
}
250268

269+
#ifdef __clang__
251270
#pragma clang attribute pop
271+
#endif
252272
#pragma GCC pop_options
253273
#endif // SIMSIMD_TARGET_HASWELL
254274
#endif // SIMSIMD_TARGET_X86

include/simsimd/curved.h

+35
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,11 @@ SIMSIMD_MAKE_MAHALANOBIS(accurate, bf16, f64, SIMSIMD_BF16_TO_F32) // simsimd_ma
153153
#if SIMSIMD_TARGET_NEON
154154
#pragma GCC push_options
155155
#pragma GCC target("arch=armv8.2-a+simd")
156+
#ifdef __clang__
156157
#pragma clang attribute push(__attribute__((target("arch=armv8.2-a+simd"))), apply_to = function)
157158

159+
#endif
160+
158161
SIMSIMD_PUBLIC void simsimd_bilinear_f32_neon(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_f32_t const* c,
159162
simsimd_size_t n, simsimd_distance_t* result) {
160163
float32x4_t sum_vec = vdupq_n_f32(0);
@@ -220,15 +223,20 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_f32_neon(simsimd_f32_t const* a, simsimd
220223
*result = sum;
221224
}
222225

226+
#ifdef __clang__
223227
#pragma clang attribute pop
228+
#endif
224229
#pragma GCC pop_options
225230
#endif // SIMSIMD_TARGET_NEON
226231

227232
#if SIMSIMD_TARGET_NEON_F16
228233
#pragma GCC push_options
229234
#pragma GCC target("arch=armv8.2-a+simd+fp16")
235+
#ifdef __clang__
230236
#pragma clang attribute push(__attribute__((target("arch=armv8.2-a+simd+fp16"))), apply_to = function)
231237

238+
#endif
239+
232240
SIMSIMD_PUBLIC void simsimd_bilinear_f16_neon(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_f16_t const* c,
233241
simsimd_size_t n, simsimd_distance_t* result) {
234242
float32x4_t sum_vec = vdupq_n_f32(0);
@@ -301,15 +309,20 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_f16_neon(simsimd_f16_t const* a, simsimd
301309
*result = sum;
302310
}
303311

312+
#ifdef __clang__
304313
#pragma clang attribute pop
314+
#endif
305315
#pragma GCC pop_options
306316
#endif // SIMSIMD_TARGET_NEON_F16
307317

308318
#if SIMSIMD_TARGET_NEON_BF16
309319
#pragma GCC push_options
310320
#pragma GCC target("arch=armv8.6-a+simd+bf16")
321+
#ifdef __clang__
311322
#pragma clang attribute push(__attribute__((target("arch=armv8.6-a+simd+bf16"))), apply_to = function)
312323

324+
#endif
325+
313326
SIMSIMD_PUBLIC void simsimd_bilinear_bf16_neon(simsimd_bf16_t const* a, simsimd_bf16_t const* b,
314327
simsimd_bf16_t const* c, simsimd_size_t n, simsimd_distance_t* result) {
315328
float32x4_t sum_vec = vdupq_n_f32(0);
@@ -401,7 +414,9 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_bf16_neon(simsimd_bf16_t const* a, simsi
401414
*result = sum;
402415
}
403416

417+
#ifdef __clang__
404418
#pragma clang attribute pop
419+
#endif
405420
#pragma GCC pop_options
406421
#endif // SIMSIMD_TARGET_NEON_BF16
407422

@@ -411,8 +426,11 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_bf16_neon(simsimd_bf16_t const* a, simsi
411426
#if SIMSIMD_TARGET_HASWELL
412427
#pragma GCC push_options
413428
#pragma GCC target("avx2", "f16c", "fma")
429+
#ifdef __clang__
414430
#pragma clang attribute push(__attribute__((target("avx2,f16c,fma"))), apply_to = function)
415431

432+
#endif
433+
416434
SIMSIMD_PUBLIC void simsimd_bilinear_f16_haswell(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_f16_t const* c,
417435
simsimd_size_t n, simsimd_distance_t* result) {
418436
__m256 sum_vec = _mm256_setzero_ps();
@@ -558,15 +576,20 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_bf16_haswell(simsimd_bf16_t const* a, si
558576
*result = sum;
559577
}
560578

579+
#ifdef __clang__
561580
#pragma clang attribute pop
581+
#endif
562582
#pragma GCC pop_options
563583
#endif // SIMSIMD_TARGET_HASWELL
564584

565585
#if SIMSIMD_TARGET_SKYLAKE
566586
#pragma GCC push_options
567587
#pragma GCC target("avx2", "avx512f", "avx512vl", "bmi2")
588+
#ifdef __clang__
568589
#pragma clang attribute push(__attribute__((target("avx2,avx512f,avx512vl,bmi2"))), apply_to = function)
569590

591+
#endif
592+
570593
SIMSIMD_PUBLIC void simsimd_bilinear_f32_skylake(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_f32_t const* c,
571594
simsimd_size_t n, simsimd_distance_t* result) {
572595
simsimd_size_t tail_length = n % 16;
@@ -634,16 +657,21 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_f32_skylake(simsimd_f32_t const* a, sims
634657
*result = _mm512_reduce_add_ps(sum_vec);
635658
}
636659

660+
#ifdef __clang__
637661
#pragma clang attribute pop
662+
#endif
638663
#pragma GCC pop_options
639664
#endif // SIMSIMD_TARGET_SKYLAKE
640665

641666
#if SIMSIMD_TARGET_GENOA
642667
#pragma GCC push_options
643668
#pragma GCC target("avx2", "avx512f", "avx512vl", "bmi2", "avx512bw", "avx512bf16")
669+
#ifdef __clang__
644670
#pragma clang attribute push(__attribute__((target("avx2,avx512f,avx512vl,bmi2,avx512bw,avx512bf16"))), \
645671
apply_to = function)
646672

673+
#endif
674+
647675
SIMSIMD_PUBLIC void simsimd_bilinear_bf16_genoa(simsimd_bf16_t const* a, simsimd_bf16_t const* b,
648676
simsimd_bf16_t const* c, simsimd_size_t n, simsimd_distance_t* result) {
649677
simsimd_size_t tail_length = n % 32;
@@ -711,16 +739,21 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_bf16_genoa(simsimd_bf16_t const* a, sims
711739
*result = _mm512_reduce_add_ps(sum_vec);
712740
}
713741

742+
#ifdef __clang__
714743
#pragma clang attribute pop
744+
#endif
715745
#pragma GCC pop_options
716746
#endif // SIMSIMD_TARGET_GENOA
717747

718748
#if SIMSIMD_TARGET_SAPPHIRE
719749
#pragma GCC push_options
720750
#pragma GCC target("avx2", "avx512f", "avx512vl", "bmi2", "avx512bw", "avx512fp16")
751+
#ifdef __clang__
721752
#pragma clang attribute push(__attribute__((target("avx2,avx512f,avx512vl,bmi2,avx512bw,avx512fp16"))), \
722753
apply_to = function)
723754

755+
#endif
756+
724757
SIMSIMD_PUBLIC void simsimd_bilinear_f16_sapphire(simsimd_f16_t const* a, simsimd_f16_t const* b,
725758
simsimd_f16_t const* c, simsimd_size_t n,
726759
simsimd_distance_t* result) {
@@ -800,7 +833,9 @@ SIMSIMD_PUBLIC void simsimd_mahalanobis_bf16_sapphire(simsimd_bf16_t const* a, s
800833
simsimd_bf16_t const* c, simsimd_size_t n,
801834
simsimd_distance_t* result) {}
802835

836+
#ifdef __clang__
803837
#pragma clang attribute pop
838+
#endif
804839
#pragma GCC pop_options
805840
#endif // SIMSIMD_TARGET_SAPPHIRE
806841
#endif // SIMSIMD_TARGET_X86

0 commit comments

Comments
 (0)