From 09ed5dd54842a8a07f75dd3c5c0bab8db3ec3a91 Mon Sep 17 00:00:00 2001 From: Richard Thier Date: Mon, 5 May 2025 23:04:27 +0200 Subject: [PATCH] branchless partition3_sp2 - only half is branchless but already faster --- qsort.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/qsort.h b/qsort.h index a935535..7236112 100644 --- a/qsort.h +++ b/qsort.h @@ -258,10 +258,11 @@ static inline pret3 partition3_sp2(uint32_t array[], int low, int high, uint32_t while(jl <= jr) { /* Handle left and find wrongly placed element */ while((array[jl] <= pivotval) && (jl <= jr)) { - if(array[jl] != pivotval) { - if(++il != jl) - swapit(&array[il], &array[jl]); - } + int isNonPivot = (array[jl] != pivotval); + int nonSameIndex = (il + 1 != jl); + if(isNonPivot & nonSameIndex) + swapit(&array[il + 1], &array[jl]); + il += isNonPivot & nonSameIndex; ++jl; }