less branchless mor... not good I think
This commit is contained in:
parent
3f4b17f0ef
commit
8e8d4257bc
9
ypsu.cpp
9
ypsu.cpp
@ -150,7 +150,7 @@ static inline uint32_t morgrab(uint32_t elem) noexcept {
|
|||||||
}
|
}
|
||||||
template<int j>
|
template<int j>
|
||||||
static inline void mormord_sort_impl(uint32_t *a, int n) noexcept {
|
static inline void mormord_sort_impl(uint32_t *a, int n) noexcept {
|
||||||
/* Edge-case */
|
// Early-exit the edge-case
|
||||||
if(n == 0) return;
|
if(n == 0) return;
|
||||||
|
|
||||||
/* Preparation */
|
/* Preparation */
|
||||||
@ -187,13 +187,16 @@ static inline void mormord_sort_impl(uint32_t *a, int n) noexcept {
|
|||||||
uint32_t reali = 0;
|
uint32_t reali = 0;
|
||||||
#pragma GCC unroll 16
|
#pragma GCC unroll 16
|
||||||
for(int i = 0; i < 256; ++i) {
|
for(int i = 0; i < 256; ++i) {
|
||||||
radics[i] += prev;
|
|
||||||
if(radics[i] != 0) {
|
if(radics[i] != 0) {
|
||||||
|
radics[i] += prev;
|
||||||
real_radics[reali] = prev;
|
real_radics[reali] = prev;
|
||||||
real_radics[reali + 1] = radics[i];
|
real_radics[reali + 1] = radics[i];
|
||||||
|
prev = radics[i];
|
||||||
reali += 2;
|
reali += 2;
|
||||||
|
} else {
|
||||||
|
radics[i] += prev;
|
||||||
|
prev = radics[i];
|
||||||
}
|
}
|
||||||
prev = radics[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user