round up some pointers
This commit is contained in:
parent
f0d6a65240
commit
81a291f860
@ -143,7 +143,7 @@ extern i8 (*const avx2_count_i8)(usz*, i8*, u64, i8);
|
||||
TFREE(c0)
|
||||
|
||||
#define RADIX_SORT_i16(T, TYP, I) \
|
||||
TALLOC(u8, alloc, (2*256+ROFF)*sizeof(T) + n*(2 + CHOOSE_SG_##TYP(0,sizeof(I)))); \
|
||||
TALLOC(u8, alloc, (2*256+ROFF)*sizeof(T) + n*(2 + CHOOSE_SG_##TYP(0,sizeof(I))) + sizeof(i32)); \
|
||||
T* c0=(T*)alloc; T* c1=c0+256; T* c1o=c1+128; \
|
||||
for (usz j=0; j<2*256; j++) c0[j]=0; \
|
||||
c1[0]=GRADE_UD(-n,c0[0]=n); \
|
||||
@ -154,7 +154,7 @@ extern i8 (*const avx2_count_i8)(usz*, i8*, u64, i8);
|
||||
for (usz i=0; i<n; i++) { i16 v=xp[i]; r0[c0 [(u8)v ]++]=v; } \
|
||||
for (usz i=0; i<n; i++) { i16 v=r0[i]; rp[c1o[(i8)(v>>8)]++]=v; } \
|
||||
, \
|
||||
I *g0 = (i32*)(r0+n); \
|
||||
I *g0 = ptr_roundUpToEl((i32*)(r0+n)); \
|
||||
for (usz i=0; i<n; i++) { i16 v=xp[i]; T c=c0[(u8)v ]++; r0[c]=v; g0[c]=i; } \
|
||||
for (usz i=0; i<n; i++) { i16 v=r0[i]; rp[c1o[(i8)(v>>8)]++]=g0[i]; } \
|
||||
) \
|
||||
|
||||
@ -170,7 +170,7 @@ B transp_c2(B t, B w, B x) {
|
||||
if (isAtm(x) || (xr=RNK(x))<wia) thrM("⍉: Length of 𝕨 must be at most rank of 𝕩");
|
||||
|
||||
// Axis permutation
|
||||
TALLOC(u8, alloc, xr*(sizeof(ur) + 3*sizeof(usz))); // ur* p, usz* rsh, usz* st, usz* ri
|
||||
TALLOC(u8, alloc, xr*(sizeof(ur) + 3*sizeof(usz)) + sizeof(usz)); // ur* p, usz* rsh, usz* st, usz* ri
|
||||
ur* p = (ur*)alloc;
|
||||
if (isAtm(w)) {
|
||||
usz a=o2s(w);
|
||||
@ -191,7 +191,7 @@ B transp_c2(B t, B w, B x) {
|
||||
|
||||
// Compute shape for the given axes
|
||||
usz* xsh = SH(x);
|
||||
usz* rsh = (usz*)(p + xr); // Length xr
|
||||
usz* rsh = ptr_roundUpToEl((usz*)(p + xr)); // Length xr
|
||||
usz dup = 0, max = 0, id = 0;
|
||||
usz no_sh = -(usz)1;
|
||||
for (usz j=0; j<xr; j++) rsh[j] = no_sh;
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
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 ptr_roundUp(P, N) ({ AUTO p_ = (P); u64 n_ = (N); TOPTR(typeof(*p_), (ptr2u64(p_)+n_-1) & ~(n_-1)); })
|
||||
#define ptr_roundUpToEl(P) ({ AUTO p2_ = (P); ptr_roundUp(p2_, _Alignof(typeof(*p2_))); })
|
||||
|
||||
void print_allocStats(void);
|
||||
void vm_pstLive(void);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user