move unaligned load/store helpers to stuff.h
also replace a NULL with "" to make iBuf+0 not be UB
This commit is contained in:
parent
22237d39bc
commit
f0d6a65240
@ -822,7 +822,7 @@ B slash_c2(B t, B w, B x) {
|
|||||||
u64 mt = (u64)1<<(d+1); // Bit d+1 may be needed, isn't pdep-ed
|
u64 mt = (u64)1<<(d+1); // Bit d+1 may be needed, isn't pdep-ed
|
||||||
usz tsh = d*wv-(d+1);
|
usz tsh = d*wv-(d+1);
|
||||||
for (usz xi=0, o=0, j=0; j<BIT_N(s); j++) {
|
for (usz xi=0, o=0, j=0; j<BIT_N(s); j++) {
|
||||||
xw = *(u64*)((u8*)xp+xi/8) >> (xi%8);
|
xw = loadu_u64((u64*)((u8*)xp+xi/8)) >> (xi%8);
|
||||||
u64 ex = (xw&mt)<<tsh;
|
u64 ex = (xw&mt)<<tsh;
|
||||||
u64 rw = _pdep_u64(xw, m);
|
u64 rw = _pdep_u64(xw, m);
|
||||||
rp[j] = ((rw-ex)<<(wv-o))-(rw>>o|(xw&1));
|
rp[j] = ((rw-ex)<<(wv-o))-(rw>>o|(xw&1));
|
||||||
|
|||||||
@ -1058,7 +1058,7 @@ B sh_c2(B t, B w, B x) {
|
|||||||
iBuf = TALLOCP(char, iLen);
|
iBuf = TALLOCP(char, iLen);
|
||||||
toUTF8(inObj, iBuf);
|
toUTF8(inObj, iBuf);
|
||||||
}
|
}
|
||||||
} else iBuf = NULL;
|
} else iBuf = "";
|
||||||
#define FREE_INPUT do { if (iLen>0) { if (raw) free_chars(iBufRaw); else TFREE(iBuf); } } while(0)
|
#define FREE_INPUT do { if (iLen>0) { if (raw) free_chars(iBufRaw); else TFREE(iBuf); } } while(0)
|
||||||
|
|
||||||
bool iDone = false;
|
bool iDone = false;
|
||||||
|
|||||||
@ -3,6 +3,10 @@
|
|||||||
#define MAP_NORESERVE 0 // apparently needed for freebsd or something
|
#define MAP_NORESERVE 0 // apparently needed for freebsd or something
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void storeu_u64(u64* p, u64 v) { memcpy((char*)p, &v, 8); } static u64 loadu_u64(u64* p) { u64 v; memcpy(&v, (char*)p, 8); return v; }
|
||||||
|
static void storeu_u32(u32* p, u32 v) { memcpy((char*)p, &v, 4); } static u32 loadu_u32(u32* p) { u32 v; memcpy(&v, (char*)p, 4); return v; }
|
||||||
|
static void storeu_u16(u16* p, u16 v) { memcpy((char*)p, &v, 2); } static u16 loadu_u16(u16* p) { u16 v; memcpy(&v, (char*)p, 2); return v; }
|
||||||
|
|
||||||
void print_allocStats(void);
|
void print_allocStats(void);
|
||||||
void vm_pstLive(void);
|
void vm_pstLive(void);
|
||||||
|
|
||||||
|
|||||||
@ -117,9 +117,6 @@ FORCE_INLINE void ab_add(ABState* state, u64 val, ux count) { // assumes bits pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FORCE_INLINE u64 ruu64(void* p) { u64 r; memcpy(&r, p, 8); return r; } // read byte-unaligned u64
|
|
||||||
FORCE_INLINE void wuu64(void* p, u64 v) { memcpy(p, &v, 8); } // write byte-unaligned u64
|
|
||||||
|
|
||||||
static NOINLINE B zeroPadToCellBits0(B x, usz lr, usz cam, usz pcsz, usz ncsz) { // consumes; for now assumes ncsz is either a multiple of 64, or one of 8,16,32
|
static NOINLINE B zeroPadToCellBits0(B x, usz lr, usz cam, usz pcsz, usz ncsz) { // consumes; for now assumes ncsz is either a multiple of 64, or one of 8,16,32
|
||||||
assert((ncsz&7) == 0 && RNK(x)>=1 && pcsz<ncsz);
|
assert((ncsz&7) == 0 && RNK(x)>=1 && pcsz<ncsz);
|
||||||
// printf("zeroPadToCellBits0 ia=%d cam=%d pcsz=%d ncsz=%d\n", IA(x), cam, pcsz, ncsz);
|
// printf("zeroPadToCellBits0 ia=%d cam=%d pcsz=%d ncsz=%d\n", IA(x), cam, pcsz, ncsz);
|
||||||
@ -257,8 +254,8 @@ B narrowWidenedBitArr(B x, ur axis, ur cr, usz* csh) { // for now assumes the bi
|
|||||||
ux rfu64 = ocsz>>6; // full u64 count per cell in x
|
ux rfu64 = ocsz>>6; // full u64 count per cell in x
|
||||||
u64 msk = (1ull<<(ocsz&63))-1;
|
u64 msk = (1ull<<(ocsz&63))-1;
|
||||||
for (ux i = 0; i < cam; i++) {
|
for (ux i = 0; i < cam; i++) {
|
||||||
for (ux j = 0; j < rfu64; j++) ab_add(&ab, ruu64(j + (u64*)xp), 64);
|
for (ux j = 0; j < rfu64; j++) ab_add(&ab, loadu_u64(j + (u64*)xp), 64);
|
||||||
ab_add(&ab, ruu64(rfu64 + (u64*)xp)&msk, ocsz&63);
|
ab_add(&ab, loadu_u64(rfu64 + (u64*)xp)&msk, ocsz&63);
|
||||||
rp+= ocsz>>6;
|
rp+= ocsz>>6;
|
||||||
xp+= xcsz>>3;
|
xp+= xcsz>>3;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,9 +13,6 @@
|
|||||||
#define _mm_storeu_si32 custom_storeu_si32
|
#define _mm_storeu_si32 custom_storeu_si32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void storeu_u64(u64* p, u64 v) { memcpy((char*)p, &v, 8); } static u64 loadu_u64(u64* p) { u64 v; memcpy(&v, (char*)p, 8); return v; }
|
|
||||||
static void storeu_u32(u32* p, u32 v) { memcpy((char*)p, &v, 4); } static u32 loadu_u32(u32* p) { u32 v; memcpy(&v, (char*)p, 4); return v; }
|
|
||||||
static void storeu_u16(u16* p, u16 v) { memcpy((char*)p, &v, 2); } static u16 loadu_u16(u16* p) { u16 v; memcpy(&v, (char*)p, 2); return v; }
|
|
||||||
|
|
||||||
#define BCALL(N, X) N(b(X))
|
#define BCALL(N, X) N(b(X))
|
||||||
#define interp_f64(X) b(X).f
|
#define interp_f64(X) b(X).f
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user