From 6c110a29eec5053f76e40e04884c20280e4f9323 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 26 Jun 2024 03:07:02 +0300 Subject: [PATCH] use loadu_* & storeu_* for unaligned loads/stores --- src/builtins/fold.c | 6 +++--- src/builtins/scan.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/builtins/fold.c b/src/builtins/fold.c index 169e2068..0b35c113 100644 --- a/src/builtins/fold.c +++ b/src/builtins/fold.c @@ -475,12 +475,12 @@ B sum_rows_bit(B x, usz n, usz m) { if (m <= 64) { if (m%8 == 0) { usz k = m/8; u64 b = (m==64? 0 : 1ull<> (j%8); + u64 xw = loadu_u64((u8*)xp+j/8) >> (j%8); rp[i] = POPC(b & xw); } } else { @@ -489,7 +489,7 @@ B sum_rows_bit(B x, usz n, usz m) { u64 b = ~(~(u64)0 >> m); u64 prev = 0; for (usz i=0, j=m; i> (m-sh); diff --git a/src/builtins/scan.c b/src/builtins/scan.c index f083314c..f86f2074 100644 --- a/src/builtins/scan.c +++ b/src/builtins/scan.c @@ -416,7 +416,7 @@ B scan_rows_bit(u8 rtid, B x, usz m) { memset(rp+i, -c, len); i8* bi = buf-i; assert(j > i); - if (mk) while (j+mk <= e) { *(u64*)(rp+j) = *(u64*)(bi+j-1) & mm; j+=mk; } + if (mk) while (j+mk <= e) { storeu_u64(rp+j, loadu_u64(bi+j-1) & mm); j+=mk; } for (; j < e; j += m) rp[j] = bi[j-1]; si_scan_max_init_i8(rp+i, rp+i, len, I8_MIN); for (usz k = i; k < e; k++) rp[k] = bi[k] - rp[k];