Compare commits

..

No commits in common. "4c675015112127721038b58f50e5a93ae5448360" and "ac01d33519a66b885d4514f29e4174ef2d427794" have entirely different histories.

View File

@ -158,22 +158,11 @@ static inline int schwab_partition(
/* TODO: should be copy of whole element when not just uint32s! */ /* TODO: should be copy of whole element when not just uint32s! */
uint32_t curr = arr[b3]; uint32_t curr = arr[b3];
/* Full branchless - see below for branch alternative */ /* TODO: We can do "ILP-memcpy"s here:
int where = (curr < klo) ? 0 : *
((curr < kmid) ? 1 : 2); * Key from b2->b3, value from b2->b3, key from b1->b2, value from b1... etc
int target = (curr < klo) ? b0 : * This is likely faster than calling a memcpy if we code this for not just uint32s!
((curr < kmid) ? b1 : b2); */
arr[b3] = arr[b2];
arr[b2] = (where == 2) ? arr[b2] : arr[b1];
arr[b1] = (where == 1) ? arr[b1] : arr[b0];
++b2;
b1 += (where < 2);
b0 += (where < 1);
arr[target] = curr;
/* Same as this would have been:
if(curr < klo) { if(curr < klo) {
arr[b3] = arr[b2]; arr[b3] = arr[b2];
arr[b2] = arr[b1]; arr[b2] = arr[b1];
@ -187,13 +176,12 @@ static inline int schwab_partition(
arr[b3] = arr[b2]; arr[b3] = arr[b2];
arr[b2] = arr[b1]; arr[b2] = arr[b1];
arr[b1] = curr; arr[b1] = curr;
++b1; ++b1; ++b2;
} else { } else {
arr[b3] = arr[b2]; arr[b3] = arr[b2];
arr[b2] = curr; arr[b2] = curr;
}
++b2; ++b2;
*/ }
} }
/* [*] Swap the chosen pivot to begin of last block */ /* [*] Swap the chosen pivot to begin of last block */