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
|
||||
usz tsh = d*wv-(d+1);
|
||||
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 rw = _pdep_u64(xw, m);
|
||||
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);
|
||||
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)
|
||||
|
||||
bool iDone = false;
|
||||
|
||||
@ -3,6 +3,10 @@
|
||||
#define MAP_NORESERVE 0 // apparently needed for freebsd or something
|
||||
#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 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
|
||||
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);
|
||||
@ -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
|
||||
u64 msk = (1ull<<(ocsz&63))-1;
|
||||
for (ux i = 0; i < cam; i++) {
|
||||
for (ux j = 0; j < rfu64; j++) ab_add(&ab, ruu64(j + (u64*)xp), 64);
|
||||
ab_add(&ab, ruu64(rfu64 + (u64*)xp)&msk, ocsz&63);
|
||||
for (ux j = 0; j < rfu64; j++) ab_add(&ab, loadu_u64(j + (u64*)xp), 64);
|
||||
ab_add(&ab, loadu_u64(rfu64 + (u64*)xp)&msk, ocsz&63);
|
||||
rp+= ocsz>>6;
|
||||
xp+= xcsz>>3;
|
||||
}
|
||||
|
||||
@ -13,9 +13,6 @@
|
||||
#define _mm_storeu_si32 custom_storeu_si32
|
||||
#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 interp_f64(X) b(X).f
|
||||
|
||||
Loading…
Reference in New Issue
Block a user