round up some pointers

This commit is contained in:
dzaima 2023-08-25 03:47:05 +03:00
parent f0d6a65240
commit 81a291f860
3 changed files with 6 additions and 4 deletions

View File

@ -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]; } \
) \

View File

@ -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;

View File

@ -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);