From f80d3ce263f42eab57e67301084a2ed101c8b3f1 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sun, 28 Aug 2022 09:16:25 -0400 Subject: [PATCH] Branchless integer binary search --- src/builtins/grade.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/builtins/grade.h b/src/builtins/grade.h index 3d56a06f..66c77276 100644 --- a/src/builtins/grade.h +++ b/src/builtins/grade.h @@ -318,13 +318,9 @@ B GRADE_CAT(c2)(B t, B w, B x) { for (usz i = 0; i < xia; i++) { i32 c = xi[i]; - usz s = 0, e = wia+1; - while (e-s > 1) { - usz m = (s+(i64)e)/2; - if (c LT wi[m-1]) e = m; - else s = m; - } - rp[i] = s; + i32 *s = wi-1; + for (usz l = wia+1, h; (h=l/2)>0; l-=h) s += h * !(c LT s[h]); + rp[i] = s - (wi-1); } } else { gen: