1- // AVX2 specific routines:
2-
3- #include " x86simdsort-static-incl.h"
4- #include " x86simdsort-internal.h"
5-
6- #define DEFINE_ALL_METHODS (type ) \
7- template <> \
8- void qsort (type *arr, size_t arrsize, bool hasnan, bool descending) \
9- { \
10- x86simdsortStatic::qsort (arr, arrsize, hasnan, descending); \
11- } \
12- template <> \
13- void qselect ( \
14- type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
15- { \
16- x86simdsortStatic::qselect (arr, k, arrsize, hasnan, descending); \
17- } \
18- template <> \
19- void partial_qsort ( \
20- type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
21- { \
22- x86simdsortStatic::partial_qsort (arr, k, arrsize, hasnan, descending); \
23- } \
24- template <> \
25- std::vector<size_t > argsort ( \
26- type *arr, size_t arrsize, bool hasnan, bool descending) \
27- { \
28- return x86simdsortStatic::argsort (arr, arrsize, hasnan, descending); \
29- } \
30- template <> \
31- std::vector<size_t > argselect ( \
32- type *arr, size_t k, size_t arrsize, bool hasnan) \
33- { \
34- return x86simdsortStatic::argselect (arr, k, arrsize, hasnan); \
35- }
36-
37- #define DEFINE_KEYVALUE_METHODS_BASE (type1, type2 ) \
38- template <> \
39- void keyvalue_qsort (type1 *key, \
40- type2 *val, \
41- size_t arrsize, \
42- bool hasnan, \
43- bool descending) \
44- { \
45- x86simdsortStatic::keyvalue_qsort ( \
46- key, val, arrsize, hasnan, descending); \
47- } \
48- template <> \
49- void keyvalue_select (type1 *key, \
50- type2 *val, \
51- size_t k, \
52- size_t arrsize, \
53- bool hasnan, \
54- bool descending) \
55- { \
56- x86simdsortStatic::keyvalue_select ( \
57- key, val, k, arrsize, hasnan, descending); \
58- } \
59- template <> \
60- void keyvalue_partial_sort (type1 *key, \
61- type2 *val, \
62- size_t k, \
63- size_t arrsize, \
64- bool hasnan, \
65- bool descending) \
66- { \
67- x86simdsortStatic::keyvalue_partial_sort ( \
68- key, val, k, arrsize, hasnan, descending); \
69- }
70-
71- #define DEFINE_KEYVALUE_METHODS (type ) \
72- DEFINE_KEYVALUE_METHODS_BASE (type, uint64_t ) \
73- DEFINE_KEYVALUE_METHODS_BASE(type, int64_t ) \
74- DEFINE_KEYVALUE_METHODS_BASE(type, double ) \
75- DEFINE_KEYVALUE_METHODS_BASE(type, uint32_t ) \
76- DEFINE_KEYVALUE_METHODS_BASE(type, int32_t ) \
77- DEFINE_KEYVALUE_METHODS_BASE(type, float )
78-
79- namespace xss {
80- namespace avx2 {
81- DEFINE_ALL_METHODS (uint32_t )
82- DEFINE_ALL_METHODS (int32_t )
83- DEFINE_ALL_METHODS (float )
84- DEFINE_ALL_METHODS (uint64_t )
85- DEFINE_ALL_METHODS (int64_t )
86- DEFINE_ALL_METHODS (double )
87- DEFINE_KEYVALUE_METHODS (uint64_t )
88- DEFINE_KEYVALUE_METHODS (int64_t )
89- DEFINE_KEYVALUE_METHODS (double )
90- DEFINE_KEYVALUE_METHODS (uint32_t )
91- DEFINE_KEYVALUE_METHODS (int32_t )
92- DEFINE_KEYVALUE_METHODS (float )
93- } // namespace avx2
1+ // AVX2 specific routines:
2+
3+ #include " x86simdsort-static-incl.h"
4+ #include " x86simdsort-internal.h"
5+
6+ #define DEFINE_ALL_METHODS (type ) \
7+ template <> \
8+ void qsort (type *arr, size_t arrsize, bool hasnan, bool descending) \
9+ { \
10+ x86simdsortStatic::qsort (arr, arrsize, hasnan, descending); \
11+ } \
12+ template <> \
13+ void qselect ( \
14+ type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
15+ { \
16+ x86simdsortStatic::qselect (arr, k, arrsize, hasnan, descending); \
17+ } \
18+ template <> \
19+ void partial_qsort ( \
20+ type *arr, size_t k, size_t arrsize, bool hasnan, bool descending) \
21+ { \
22+ x86simdsortStatic::partial_qsort (arr, k, arrsize, hasnan, descending); \
23+ } \
24+ template <> \
25+ std::vector<size_t > argsort ( \
26+ type *arr, size_t arrsize, bool hasnan, bool descending) \
27+ { \
28+ return x86simdsortStatic::argsort (arr, arrsize, hasnan, descending); \
29+ } \
30+ template <> \
31+ std::vector<size_t > argselect ( \
32+ type *arr, size_t k, size_t arrsize, bool hasnan) \
33+ { \
34+ return x86simdsortStatic::argselect (arr, k, arrsize, hasnan); \
35+ }
36+
37+ #define DEFINE_KEYVALUE_METHODS_BASE (type1, type2 ) \
38+ template <> \
39+ void keyvalue_qsort (type1 *key, \
40+ type2 *val, \
41+ size_t arrsize, \
42+ bool hasnan, \
43+ bool descending) \
44+ { \
45+ x86simdsortStatic::keyvalue_qsort ( \
46+ key, val, arrsize, hasnan, descending); \
47+ } \
48+ template <> \
49+ void keyvalue_select (type1 *key, \
50+ type2 *val, \
51+ size_t k, \
52+ size_t arrsize, \
53+ bool hasnan, \
54+ bool descending) \
55+ { \
56+ x86simdsortStatic::keyvalue_select ( \
57+ key, val, k, arrsize, hasnan, descending); \
58+ } \
59+ template <> \
60+ void keyvalue_partial_sort (type1 *key, \
61+ type2 *val, \
62+ size_t k, \
63+ size_t arrsize, \
64+ bool hasnan, \
65+ bool descending) \
66+ { \
67+ x86simdsortStatic::keyvalue_partial_sort ( \
68+ key, val, k, arrsize, hasnan, descending); \
69+ }
70+
71+ #define DEFINE_KEYVALUE_METHODS (type ) \
72+ DEFINE_KEYVALUE_METHODS_BASE (type, uint64_t ) \
73+ DEFINE_KEYVALUE_METHODS_BASE(type, int64_t ) \
74+ DEFINE_KEYVALUE_METHODS_BASE(type, double ) \
75+ DEFINE_KEYVALUE_METHODS_BASE(type, uint32_t ) \
76+ DEFINE_KEYVALUE_METHODS_BASE(type, int32_t ) \
77+ DEFINE_KEYVALUE_METHODS_BASE(type, float )
78+
79+ namespace xss {
80+ namespace avx2 {
81+ DEFINE_ALL_METHODS (uint32_t )
82+ DEFINE_ALL_METHODS (int32_t )
83+ DEFINE_ALL_METHODS (float )
84+ DEFINE_ALL_METHODS (uint64_t )
85+ DEFINE_ALL_METHODS (int64_t )
86+ DEFINE_ALL_METHODS (double )
87+ DEFINE_KEYVALUE_METHODS (uint64_t )
88+ DEFINE_KEYVALUE_METHODS (int64_t )
89+ DEFINE_KEYVALUE_METHODS (double )
90+ DEFINE_KEYVALUE_METHODS (uint32_t )
91+ DEFINE_KEYVALUE_METHODS (int32_t )
92+ DEFINE_KEYVALUE_METHODS (float )
93+ } // namespace avx2
9494} // namespace xss
0 commit comments