From ec14d45c50cb8e30fd92cf2f6694cd40882afff6 Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 25 Aug 2023 04:03:25 +0300 Subject: [PATCH] round up pointers in self-search allocs --- src/builtins/selfsearch.c | 45 ++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/builtins/selfsearch.c b/src/builtins/selfsearch.c index d8b92a56..e587cbb8 100644 --- a/src/builtins/selfsearch.c +++ b/src/builtins/selfsearch.c @@ -216,6 +216,7 @@ static NOINLINE void memset64(u64* p, u64 v, usz l) { for (usz i=0; i3*n?tn:3*n)+(2*rx+1)*sizeof(usz))); + TALLOC(u8, alloc, 6*n + (4 + (tn>3*n?tn:3*n) + (2*rx+1)*sizeof(usz)) + sizeof(u32)); // timeline // Allocations len count radix hash deradix bytes layout: - usz *c0 = (usz*)(alloc)+1; // rx [+++................] c0 rx # - usz *c1 = (usz*)(c0+rx); // rx [++................] c1 rx # - u8 *k0 = (u8 *)(c1+rx); // n [+.............] k0 n ## - u32 *v2 = (u32*)(k0+n); // n+1 [+.......] v2 4*n+4 ######## - u8 *k1 = (u8 *)(v2+n+1); // n [+............] k1 n ## - u32 *v1 = (u32*)(k1); // n [+-] v1 4*n ######## - u8 *r2 = (u8 *)(v2); // n [+.....] r2 n ## - u8 *r1 = (u8 *)(k1+n); // n [+..] r1 n ## - u8 *tab= (u8 *)(r1); // tn [+] tab tn ##### + usz *c0 = (usz*)(alloc)+1; // rx [+++................] c0 rx # + usz *c1 = (usz*)(c0+rx); // rx [++................] c1 rx # + u8 *k0 = (u8 *)(c1+rx); // n [+.............] k0 n ## + u32 *v2 = PRUP((u32*)(k0+n)); // n+1 [+.......] v2 4*n+4 ######## + u8 *k1 = (u8 *)(v2+n+1); // n [+............] k1 n ## + u32 *v1 = (u32*)(k1); // n [+-] v1 4*n ######## + u8 *r2 = (u8 *)(v2); // n [+.....] r2 n ## + u8 *r1 = (u8 *)(k1+n); // n [+..] r1 n ## + u8 *tab= (u8 *)(r1); // tn [+] tab tn ##### RADIX_LOOKUP_32(1, =0) return taga(cpyBitArr(r)); @@ -393,18 +394,18 @@ B count_c1(B t, B x) { u32* v0 = (u32*)xv; i32* r0 = rp; - TALLOC(u8, alloc, 6*n+(4+4*(tn>n?tn:n)+(2*rx+1)*sizeof(usz))); - // timeline - // Allocations len count radix hash deradix bytes layout: - usz *c0 = (usz*)(alloc)+1; // rx [+++................] c0 rx # - usz *c1 = (usz*)(c0+rx); // rx [++................] c1 rx # - u8 *k0 = (u8 *)(c1+rx); // n [+.............] k0 n ## - u8 *k1 = (u8 *)(k0+n); // n [+............] k1 n ## - u32 *v2 = (u32*)(k1+n); // n+1 [+....-] v2 4*n ######## - u32 *v1 = (u32*)(v2+n+1); // n [+..] v1 4*n ######## - u32 *r2 = (u32*)v2; // n [+.....] r2 4*n ######## - u32 *r1 = (u32*)v1; // n [+..] r1 4*n ######## - u32 *tab= (u32*)v1; // tn [+] tab 4*tn ########### + TALLOC(u8, alloc, 6*n + (4 + 4*(tn>n?tn:n) + (2*rx+1)*sizeof(usz)) + sizeof(u32)); + // timeline + // Allocations len count radix hash deradix bytes layout: + usz *c0 = (usz*)(alloc)+1; // rx [+++................] c0 rx # + usz *c1 = (usz*)(c0+rx); // rx [++................] c1 rx # + u8 *k0 = (u8 *)(c1+rx); // n [+.............] k0 n ## + u8 *k1 = (u8 *)(k0+n); // n [+............] k1 n ## + u32 *v2=PRUP((u32*)(k1+n)); // n+1 [+....-] v2 4*n ######## + u32 *v1 = (u32*)(v2+n+1); // n [+..] v1 4*n ######## + u32 *r2 = (u32*)v2; // n [+.....] r2 4*n ######## + u32 *r1 = (u32*)v1; // n [+..] r1 4*n ######## + u32 *tab= (u32*)v1; // tn [+] tab 4*tn ########### RADIX_LOOKUP_32(0, ++) return num_squeeze(r);