use loadu_* & storeu_* for unaligned loads/stores
This commit is contained in:
parent
ace06e96ae
commit
6c110a29ee
@ -475,12 +475,12 @@ B sum_rows_bit(B x, usz n, usz m) {
|
|||||||
if (m <= 64) {
|
if (m <= 64) {
|
||||||
if (m%8 == 0) {
|
if (m%8 == 0) {
|
||||||
usz k = m/8; u64 b = (m==64? 0 : 1ull<<m)-1;
|
usz k = m/8; u64 b = (m==64? 0 : 1ull<<m)-1;
|
||||||
for (usz i=0; i<n; i++) rp[i] = POPC(b & *(u64*)((u8*)xp+k*i));
|
for (usz i=0; i<n; i++) rp[i] = POPC(b & loadu_u64((u8*)xp+k*i));
|
||||||
} else {
|
} else {
|
||||||
if (m<=58 || m==60) {
|
if (m<=58 || m==60) {
|
||||||
u64 b = (1ull<<m)-1;
|
u64 b = (1ull<<m)-1;
|
||||||
for (usz i=0, j=0; i<n; i++, j+=m) {
|
for (usz i=0, j=0; i<n; i++, j+=m) {
|
||||||
u64 xw = *(u64*)((u8*)xp+j/8) >> (j%8);
|
u64 xw = loadu_u64((u8*)xp+j/8) >> (j%8);
|
||||||
rp[i] = POPC(b & xw);
|
rp[i] = POPC(b & xw);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -489,7 +489,7 @@ B sum_rows_bit(B x, usz n, usz m) {
|
|||||||
u64 b = ~(~(u64)0 >> m);
|
u64 b = ~(~(u64)0 >> m);
|
||||||
u64 prev = 0;
|
u64 prev = 0;
|
||||||
for (usz i=0, j=m; i<n; i++, j+=m) {
|
for (usz i=0, j=m; i<n; i++, j+=m) {
|
||||||
u64 xw = ((u64*)((u8*)xp+(j+7)/8))[-1];
|
u64 xw = loadu_u64(((u64*) ((u8*)xp + (j+7)/8)) - 1);
|
||||||
usz sh = (-j)%8;
|
usz sh = (-j)%8;
|
||||||
rp[i] = POPC(b & (xw<<sh | prev));
|
rp[i] = POPC(b & (xw<<sh | prev));
|
||||||
prev = xw >> (m-sh);
|
prev = xw >> (m-sh);
|
||||||
|
|||||||
@ -416,7 +416,7 @@ B scan_rows_bit(u8 rtid, B x, usz m) {
|
|||||||
memset(rp+i, -c, len);
|
memset(rp+i, -c, len);
|
||||||
i8* bi = buf-i;
|
i8* bi = buf-i;
|
||||||
assert(j > 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];
|
for (; j < e; j += m) rp[j] = bi[j-1];
|
||||||
si_scan_max_init_i8(rp+i, rp+i, len, I8_MIN);
|
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];
|
for (usz k = i; k < e; k++) rp[k] = bi[k] - rp[k];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user