@@ -319,16 +319,18 @@ count_bitarray_AND4_t *count_bitarray_AND4_function_p = &count_bitarray_AND4_dis
319
319
// determine the available instruction set at runtime and call the correct function
320
320
uint32_t * malloc_bitarray_dispatch (uint32_t x ) {
321
321
#if defined (__i386__ ) || defined (__x86_64__ )
322
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
322
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
323
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
323
324
if (__builtin_cpu_supports ("avx512f" )) malloc_bitarray_function_p = & malloc_bitarray_AVX512 ;
324
325
else if (__builtin_cpu_supports ("avx2" )) malloc_bitarray_function_p = & malloc_bitarray_AVX2 ;
325
- #else
326
+ #else
326
327
if (__builtin_cpu_supports ("avx2" )) malloc_bitarray_function_p = & malloc_bitarray_AVX2 ;
327
- #endif
328
+ #endif
328
329
else if (__builtin_cpu_supports ("avx ")) malloc_bitarray_function_p = & malloc_bitarray_AVX ;
329
330
else if (__builtin_cpu_supports ("sse2 ")) malloc_bitarray_function_p = & malloc_bitarray_SSE2 ;
330
331
else if (__builtin_cpu_supports ("mmx ")) malloc_bitarray_function_p = & malloc_bitarray_MMX ;
331
- else
332
+ else
333
+ #endif
332
334
#endif
333
335
malloc_bitarray_function_p = & malloc_bitarray_NOSIMD ;
334
336
@@ -337,17 +339,19 @@ uint32_t *malloc_bitarray_dispatch(uint32_t x) {
337
339
}
338
340
339
341
void free_bitarray_dispatch (uint32_t * x ) {
340
- #if defined (__i386__ ) || defined (__x86_64__ )
341
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
342
+ #if defined (__i386__ ) || defined (__x86_64__ )
343
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
344
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
342
345
if (__builtin_cpu_supports ("avx512f" )) free_bitarray_function_p = & free_bitarray_AVX512 ;
343
346
else if (__builtin_cpu_supports ("avx2" )) free_bitarray_function_p = & free_bitarray_AVX2 ;
344
- #else
347
+ #else
345
348
if (__builtin_cpu_supports ("avx2" )) free_bitarray_function_p = & free_bitarray_AVX2 ;
346
- #endif
349
+ #endif
347
350
else if (__builtin_cpu_supports ("avx ")) free_bitarray_function_p = & free_bitarray_AVX ;
348
351
else if (__builtin_cpu_supports ("sse2 ")) free_bitarray_function_p = & free_bitarray_SSE2 ;
349
352
else if (__builtin_cpu_supports ("mmx ")) free_bitarray_function_p = & free_bitarray_MMX ;
350
- else
353
+ else
354
+ #endif
351
355
#endif
352
356
free_bitarray_function_p = & free_bitarray_NOSIMD ;
353
357
@@ -357,16 +361,18 @@ void free_bitarray_dispatch(uint32_t *x) {
357
361
358
362
uint32_t bitcount_dispatch (uint32_t a ) {
359
363
#if defined (__i386__ ) || defined (__x86_64__ )
360
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
364
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
365
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
361
366
if (__builtin_cpu_supports ("avx512f" )) bitcount_function_p = & bitcount_AVX512 ;
362
367
else if (__builtin_cpu_supports ("avx2" )) bitcount_function_p = & bitcount_AVX2 ;
363
- #else
368
+ #else
364
369
if (__builtin_cpu_supports ("avx2" )) bitcount_function_p = & bitcount_AVX2 ;
365
- #endif
370
+ #endif
366
371
else if (__builtin_cpu_supports ("avx ")) bitcount_function_p = & bitcount_AVX ;
367
372
else if (__builtin_cpu_supports ("sse2 ")) bitcount_function_p = & bitcount_SSE2 ;
368
373
else if (__builtin_cpu_supports ("mmx ")) bitcount_function_p = & bitcount_MMX ;
369
- else
374
+ else
375
+ #endif
370
376
#endif
371
377
bitcount_function_p = & bitcount_NOSIMD ;
372
378
@@ -376,16 +382,18 @@ uint32_t bitcount_dispatch(uint32_t a) {
376
382
377
383
uint32_t count_states_dispatch (uint32_t * bitarray ) {
378
384
#if defined (__i386__ ) || defined (__x86_64__ )
379
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
385
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
386
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
380
387
if (__builtin_cpu_supports ("avx512f" )) count_states_function_p = & count_states_AVX512 ;
381
388
else if (__builtin_cpu_supports ("avx2" )) count_states_function_p = & count_states_AVX2 ;
382
- #else
389
+ #else
383
390
if (__builtin_cpu_supports ("avx2" )) count_states_function_p = & count_states_AVX2 ;
384
- #endif
391
+ #endif
385
392
else if (__builtin_cpu_supports ("avx ")) count_states_function_p = & count_states_AVX ;
386
393
else if (__builtin_cpu_supports ("sse2 ")) count_states_function_p = & count_states_SSE2 ;
387
394
else if (__builtin_cpu_supports ("mmx ")) count_states_function_p = & count_states_MMX ;
388
- else
395
+ else
396
+ #endif
389
397
#endif
390
398
count_states_function_p = & count_states_NOSIMD ;
391
399
@@ -395,16 +403,18 @@ uint32_t count_states_dispatch(uint32_t *bitarray) {
395
403
396
404
void bitarray_AND_dispatch (uint32_t * A , uint32_t * B ) {
397
405
#if defined (__i386__ ) || defined (__x86_64__ )
398
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
406
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
407
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
399
408
if (__builtin_cpu_supports ("avx512f" )) bitarray_AND_function_p = & bitarray_AND_AVX512 ;
400
409
else if (__builtin_cpu_supports ("avx2" )) bitarray_AND_function_p = & bitarray_AND_AVX2 ;
401
- #else
410
+ #else
402
411
if (__builtin_cpu_supports ("avx2" )) bitarray_AND_function_p = & bitarray_AND_AVX2 ;
403
- #endif
412
+ #endif
404
413
else if (__builtin_cpu_supports ("avx ")) bitarray_AND_function_p = & bitarray_AND_AVX ;
405
414
else if (__builtin_cpu_supports ("sse2 ")) bitarray_AND_function_p = & bitarray_AND_SSE2 ;
406
415
else if (__builtin_cpu_supports ("mmx ")) bitarray_AND_function_p = & bitarray_AND_MMX ;
407
- else
416
+ else
417
+ #endif
408
418
#endif
409
419
bitarray_AND_function_p = & bitarray_AND_NOSIMD ;
410
420
@@ -413,17 +423,19 @@ void bitarray_AND_dispatch(uint32_t *A, uint32_t *B) {
413
423
}
414
424
415
425
void bitarray_low20_AND_dispatch (uint32_t * A , uint32_t * B ) {
416
- #if defined (__i386__ ) || defined (__x86_64__ )
417
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
426
+ #if defined (__i386__ ) || defined (__x86_64__ )
427
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
428
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
418
429
if (__builtin_cpu_supports ("avx512f" )) bitarray_low20_AND_function_p = & bitarray_low20_AND_AVX512 ;
419
430
else if (__builtin_cpu_supports ("avx2" )) bitarray_low20_AND_function_p = & bitarray_low20_AND_AVX2 ;
420
- #else
431
+ #else
421
432
if (__builtin_cpu_supports ("avx2" )) bitarray_low20_AND_function_p = & bitarray_low20_AND_AVX2 ;
422
- #endif
433
+ #endif
423
434
else if (__builtin_cpu_supports ("avx ")) bitarray_low20_AND_function_p = & bitarray_low20_AND_AVX ;
424
435
else if (__builtin_cpu_supports ("sse2 ")) bitarray_low20_AND_function_p = & bitarray_low20_AND_SSE2 ;
425
436
else if (__builtin_cpu_supports ("mmx ")) bitarray_low20_AND_function_p = & bitarray_low20_AND_MMX ;
426
- else
437
+ else
438
+ #endif
427
439
#endif
428
440
bitarray_low20_AND_function_p = & bitarray_low20_AND_NOSIMD ;
429
441
@@ -433,16 +445,18 @@ void bitarray_low20_AND_dispatch(uint32_t *A, uint32_t *B) {
433
445
434
446
uint32_t count_bitarray_AND_dispatch (uint32_t * A , uint32_t * B ) {
435
447
#if defined (__i386__ ) || defined (__x86_64__ )
436
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
448
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
449
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
437
450
if (__builtin_cpu_supports ("avx512f" )) count_bitarray_AND_function_p = & count_bitarray_AND_AVX512 ;
438
451
else if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND_function_p = & count_bitarray_AND_AVX2 ;
439
- #else
452
+ #else
440
453
if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND_function_p = & count_bitarray_AND_AVX2 ;
441
- #endif
454
+ #endif
442
455
else if (__builtin_cpu_supports ("avx ")) count_bitarray_AND_function_p = & count_bitarray_AND_AVX ;
443
456
else if (__builtin_cpu_supports ("sse2 ")) count_bitarray_AND_function_p = & count_bitarray_AND_SSE2 ;
444
457
else if (__builtin_cpu_supports ("mmx ")) count_bitarray_AND_function_p = & count_bitarray_AND_MMX ;
445
- else
458
+ else
459
+ #endif
446
460
#endif
447
461
count_bitarray_AND_function_p = & count_bitarray_AND_NOSIMD ;
448
462
@@ -452,16 +466,18 @@ uint32_t count_bitarray_AND_dispatch(uint32_t *A, uint32_t *B) {
452
466
453
467
uint32_t count_bitarray_low20_AND_dispatch (uint32_t * A , uint32_t * B ) {
454
468
#if defined (__i386__ ) || defined (__x86_64__ )
455
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
469
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
470
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
456
471
if (__builtin_cpu_supports ("avx512f" )) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_AVX512 ;
457
472
else if (__builtin_cpu_supports ("avx2" )) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_AVX2 ;
458
- #else
473
+ #else
459
474
if (__builtin_cpu_supports ("avx2" )) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_AVX2 ;
460
- #endif
475
+ #endif
461
476
else if (__builtin_cpu_supports ("avx ")) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_AVX ;
462
477
else if (__builtin_cpu_supports ("sse2 ")) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_SSE2 ;
463
478
else if (__builtin_cpu_supports ("mmx ")) count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_MMX ;
464
- else
479
+ else
480
+ #endif
465
481
#endif
466
482
count_bitarray_low20_AND_function_p = & count_bitarray_low20_AND_NOSIMD ;
467
483
@@ -471,16 +487,18 @@ uint32_t count_bitarray_low20_AND_dispatch(uint32_t *A, uint32_t *B) {
471
487
472
488
void bitarray_AND4_dispatch (uint32_t * A , uint32_t * B , uint32_t * C , uint32_t * D ) {
473
489
#if defined (__i386__ ) || defined (__x86_64__ )
474
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
490
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
491
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
475
492
if (__builtin_cpu_supports ("avx512f" )) bitarray_AND4_function_p = & bitarray_AND4_AVX512 ;
476
493
else if (__builtin_cpu_supports ("avx2" )) bitarray_AND4_function_p = & bitarray_AND4_AVX2 ;
477
- #else
494
+ #else
478
495
if (__builtin_cpu_supports ("avx2" )) bitarray_AND4_function_p = & bitarray_AND4_AVX2 ;
479
- #endif
496
+ #endif
480
497
else if (__builtin_cpu_supports ("avx ")) bitarray_AND4_function_p = & bitarray_AND4_AVX ;
481
498
else if (__builtin_cpu_supports ("sse2 ")) bitarray_AND4_function_p = & bitarray_AND4_SSE2 ;
482
499
else if (__builtin_cpu_supports ("mmx ")) bitarray_AND4_function_p = & bitarray_AND4_MMX ;
483
- else
500
+ else
501
+ #endif
484
502
#endif
485
503
bitarray_AND4_function_p = & bitarray_AND4_NOSIMD ;
486
504
@@ -490,16 +508,18 @@ void bitarray_AND4_dispatch(uint32_t *A, uint32_t *B, uint32_t *C, uint32_t *D)
490
508
491
509
void bitarray_OR_dispatch (uint32_t * A , uint32_t * B ) {
492
510
#if defined (__i386__ ) || defined (__x86_64__ )
493
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
511
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
512
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
494
513
if (__builtin_cpu_supports ("avx512f" )) bitarray_OR_function_p = & bitarray_OR_AVX512 ;
495
514
else if (__builtin_cpu_supports ("avx2" )) bitarray_OR_function_p = & bitarray_OR_AVX2 ;
496
- #else
515
+ #else
497
516
if (__builtin_cpu_supports ("avx2" )) bitarray_OR_function_p = & bitarray_OR_AVX2 ;
498
- #endif
517
+ #endif
499
518
else if (__builtin_cpu_supports ("avx ")) bitarray_OR_function_p = & bitarray_OR_AVX ;
500
519
else if (__builtin_cpu_supports ("sse2 ")) bitarray_OR_function_p = & bitarray_OR_SSE2 ;
501
520
else if (__builtin_cpu_supports ("mmx ")) bitarray_OR_function_p = & bitarray_OR_MMX ;
502
- else
521
+ else
522
+ #endif
503
523
#endif
504
524
bitarray_OR_function_p = & bitarray_OR_NOSIMD ;
505
525
@@ -509,16 +529,18 @@ void bitarray_OR_dispatch(uint32_t *A, uint32_t *B) {
509
529
510
530
uint32_t count_bitarray_AND2_dispatch (uint32_t * A , uint32_t * B ) {
511
531
#if defined (__i386__ ) || defined (__x86_64__ )
512
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
532
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
533
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
513
534
if (__builtin_cpu_supports ("avx512f" )) count_bitarray_AND2_function_p = & count_bitarray_AND2_AVX512 ;
514
535
else if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND2_function_p = & count_bitarray_AND2_AVX2 ;
515
- #else
536
+ #else
516
537
if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND2_function_p = & count_bitarray_AND2_AVX2 ;
517
- #endif
538
+ #endif
518
539
else if (__builtin_cpu_supports ("avx ")) count_bitarray_AND2_function_p = & count_bitarray_AND2_AVX ;
519
540
else if (__builtin_cpu_supports ("sse2 ")) count_bitarray_AND2_function_p = & count_bitarray_AND2_SSE2 ;
520
541
else if (__builtin_cpu_supports ("mmx ")) count_bitarray_AND2_function_p = & count_bitarray_AND2_MMX ;
521
- else
542
+ else
543
+ #endif
522
544
#endif
523
545
count_bitarray_AND2_function_p = & count_bitarray_AND2_NOSIMD ;
524
546
@@ -528,16 +550,18 @@ uint32_t count_bitarray_AND2_dispatch(uint32_t *A, uint32_t *B) {
528
550
529
551
uint32_t count_bitarray_AND3_dispatch (uint32_t * A , uint32_t * B , uint32_t * C ) {
530
552
#if defined (__i386__ ) || defined (__x86_64__ )
531
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
553
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
554
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
532
555
if (__builtin_cpu_supports ("avx512f" )) count_bitarray_AND3_function_p = & count_bitarray_AND3_AVX512 ;
533
556
else if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND3_function_p = & count_bitarray_AND3_AVX2 ;
534
- #else
557
+ #else
535
558
if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND3_function_p = & count_bitarray_AND3_AVX2 ;
536
- #endif
559
+ #endif
537
560
else if (__builtin_cpu_supports ("avx ")) count_bitarray_AND3_function_p = & count_bitarray_AND3_AVX ;
538
561
else if (__builtin_cpu_supports ("sse2 ")) count_bitarray_AND3_function_p = & count_bitarray_AND3_SSE2 ;
539
562
else if (__builtin_cpu_supports ("mmx ")) count_bitarray_AND3_function_p = & count_bitarray_AND3_MMX ;
540
- else
563
+ else
564
+ #endif
541
565
#endif
542
566
count_bitarray_AND3_function_p = & count_bitarray_AND3_NOSIMD ;
543
567
@@ -547,16 +571,18 @@ uint32_t count_bitarray_AND3_dispatch(uint32_t *A, uint32_t *B, uint32_t *C) {
547
571
548
572
uint32_t count_bitarray_AND4_dispatch (uint32_t * A , uint32_t * B , uint32_t * C , uint32_t * D ) {
549
573
#if defined (__i386__ ) || defined (__x86_64__ )
550
- #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
574
+ #if !defined(__APPLE__ ) || (defined(__APPLE__ ) && (__clang_major__ > 8 ))
575
+ #if (__GNUC__ >= 5 ) && (__GNUC__ > 5 || __GNUC_MINOR__ > 2 )
551
576
if (__builtin_cpu_supports ("avx512f" )) count_bitarray_AND4_function_p = & count_bitarray_AND4_AVX512 ;
552
577
else if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND4_function_p = & count_bitarray_AND4_AVX2 ;
553
- #else
578
+ #else
554
579
if (__builtin_cpu_supports ("avx2" )) count_bitarray_AND4_function_p = & count_bitarray_AND4_AVX2 ;
555
- #endif
580
+ #endif
556
581
else if (__builtin_cpu_supports ("avx ")) count_bitarray_AND4_function_p = & count_bitarray_AND4_AVX ;
557
582
else if (__builtin_cpu_supports ("sse2 ")) count_bitarray_AND4_function_p = & count_bitarray_AND4_SSE2 ;
558
583
else if (__builtin_cpu_supports ("mmx ")) count_bitarray_AND4_function_p = & count_bitarray_AND4_MMX ;
559
- else
584
+ else
585
+ #endif
560
586
#endif
561
587
count_bitarray_AND4_function_p = & count_bitarray_AND4_NOSIMD ;
562
588
0 commit comments