8000 Merge pull request #183 from sterrettm2/defensive-emms · intel/x86-simd-sort@7604f9e · GitHub
[go: up one dir, main page]

Skip to content

Commit 7604f9e

Browse files
author
Raghuveer Devulapalli
authored
Merge pull request #183 from sterrettm2/defensive-emms
Add defensive EMMS instructions to each SIMD sort function
2 parents b27f82b + 96f3ff4 commit 7604f9e

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

src/avx512-16bit-qsort.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,11 @@ avx512_qsort_fp16(uint16_t *arr,
572572
}
573573
replace_inf_with_nan(arr, arrsize, nan_count, descending);
574574
}
575+
576+
#ifdef __MMX__
577+
// Workaround for compiler bug generating MMX instructions without emms
578+
_mm_empty();
579+
#endif
575580
}
576581

577582
[[maybe_unused]] X86_SIMD_SORT_INLINE void
@@ -605,6 +610,11 @@ avx512_qselect_fp16(uint16_t *arr,
605610
2 * (arrsize_t)log2(indx_last_elem));
606611
}
607612
}
613+
614+
#ifdef __MMX__
615+
// Workaround for compiler bug generating MMX instructions without emms
616+
_mm_empty();
617+
#endif
608618
}
609619

610620
[[maybe_unused]] X86_SIMD_SORT_INLINE void

src/xss-common-keyvaluesort.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,11 @@ X86_SIMD_SORT_INLINE void xss_qsort_kv(
652652
std::reverse(indexes, indexes + arrsize);
653653
}
654654
}
655+
656+
#ifdef __MMX__
657+
// Workaround for compiler bug generating MMX instructions without emms
658+
_mm_empty();
659+
#endif
655660
}
656661

657662
template <typename T1,
@@ -712,6 +717,11 @@ X86_SIMD_SORT_INLINE void xss_select_kv(T1 *keys,
712717
std::reverse(indexes, indexes + arrsize);
713718
}
714719
}
720+
721+
#ifdef __MMX__
722+
// Workaround for compiler bug generating MMX instructions without emms
723+
_mm_empty();
724+
#endif
715725
}
716726

717727
template <typename T1,

src/xss-common-qsort.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,11 @@ X86_SIMD_SORT_INLINE void xss_qsort(T *arr, arrsize_t arrsize, bool hasnan)
632632

633633
replace_inf_with_nan(arr, arrsize, nan_count, descending);
634634
}
635+
636+
#ifdef __MMX__
637+
// Workaround for compiler bug generating MMX instructions without emms
638+
_mm_empty();
639+
#endif
635640
}
636641

637642
// Quick select methods
@@ -666,6 +671,11 @@ xss_qselect(T *arr, arrsize_t k, arrsize_t arrsize, bool hasnan)
666671
index_last_elem,
667672
2 * (arrsize_t)log2(arrsize));
668673
}
674+
675+
#ifdef __MMX__
676+
// Workaround for compiler bug generating MMX instructions without emms
677+
_mm_empty();
678+
#endif
669679
}
670680

671681
// Partial sort methods:

0 commit comments

Comments
 (0)
0