From d1e40a01dfece357e2dfa97f2e5c387a98e2489c Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sun, 23 Oct 2022 12:06:38 -0400 Subject: [PATCH] Use saved counts and possibly dense table initialization for 1-byte radix lookup --- src/builtins/selfsearch.c | 53 +++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/builtins/selfsearch.c b/src/builtins/selfsearch.c index e985ffd5..dcbb07dd 100644 --- a/src/builtins/selfsearch.c +++ b/src/builtins/selfsearch.c @@ -19,27 +19,38 @@ u8 radix_offsets_2_u32(usz* c0, u32* v0, usz n) { if ((c0+1)[(u8)(v>>16)] < n) { RADIX_SUM_1_u32; return 1; } return 0; } -#define RADIX_LOOKUP_32(INIT, SETTAB) \ - /* Radix moves */ \ - u8 bytes = radix_offsets_2_u32(c0, v0, n); \ - if (bytes==0) { \ - for (usz i=0; i>16); usz c=c0[k]++; v1[c]=v; } \ - if (bytes==2) for (usz i=0; i>24); usz c=c1[k]++; v2[c]=v; } \ - /* Table lookup */ \ - u32 tv=v2[0]>>16; v2[n]=~v2[n-1]; \ - for (usz l=0, i=0; l>16; if (tv!=t0) break; tab[(u16)v]=INIT; } \ - for (; i>16); usz c=c0[k]++; v1[c]=v; } \ + if (bytes==1) { \ + /* Table lookup, getting radix boundaries from c0 */ \ + for (usz i=0; i>16)]; \ + if (l-i < tim) for (usz ii=i; ii>24); usz c=c1[k]++; v2[c]=v; } \ + /* Table lookup */ \ + u32 tv=v2[0]>>16; v2[n]=~v2[n-1]; \ + for (usz l=0, i=0; l>16; if (tv!=t0) break; tab[(u16)v]=INIT; } \ + for (; i