From 6a9e03bdb1b7edef7bf3cd6d41a180f5b35b12f3 Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 28 Dec 2022 17:31:02 +0200 Subject: [PATCH] use arr_shSetU/arr_shSetI inline and use incG more in rank_c2 --- src/builtins/fns.c | 7 ++----- src/builtins/md1.c | 2 +- src/builtins/md2.c | 15 +++++++-------- src/builtins/sfns.c | 18 +++++------------- src/builtins/sysfn.c | 4 ++-- src/core/harr.c | 6 ++---- 6 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/builtins/fns.c b/src/builtins/fns.c index dc8c6f8b..1587fdc7 100644 --- a/src/builtins/fns.c +++ b/src/builtins/fns.c @@ -119,8 +119,7 @@ B ud_c2(B t, B w, B x) { for (usz i=wr; i1) ptr_dec(X##_csh); decG(X); diff --git a/src/builtins/md2.c b/src/builtins/md2.c index b5a21160..6ba2dd3e 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -326,7 +326,7 @@ B rank_c1(Md2D* d, B x) { B f = d->f; B g = d->g; M_HARR(r, cam); usz p = 0; for (usz i = 0; i < cam; i++) { - Arr* s = slice(inc(x), p, csz); arr_shSetI(s, cr, csh); + Arr* s = arr_shSetI(slice(incG(x), p, csz), cr, csh); HARR_ADD(r, i, c1(f, taga(s))); p+= csz; } @@ -373,7 +373,7 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g; M_HARR(r, cam); usz p = 0; for (usz i = 0; i < cam; i++) { - Arr* s = slice(inc(x), p, csz); arr_shSetI(s, xc, csh); + Arr* s = arr_shSetI(slice(incG(x), p, csz), xc, csh); HARR_ADD(r, i, c2(f, inc(w), taga(s))); p+= csz; } @@ -397,8 +397,8 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g; M_HARR(r, cam); usz p = 0; for (usz i = 0; i < cam; i++) { - Arr* s = slice(inc(w), p, csz); arr_shSetI(s, wc, csh); - HARR_ADD(r, i, c2(f, taga(s), inc(x))); + Arr* s = arr_shSetI(slice(incG(w), p, csz), wc, csh); + HARR_ADD(r, i, c2(f, taga(s), incG(x))); p+= csz; } @@ -432,8 +432,7 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g; M_HARR(r, cam); usz wp = 0, xp = 0; #define CELL(wx) \ - Arr* wx##s = wx##slice(inc(wx), wx##p, wx##sz); \ - arr_shSetI(wx##s, wx##c, wx##cs); \ + Arr* wx##s = arr_shSetI(wx##slice(incG(wx), wx##p, wx##sz), wx##c, wx##cs); \ wx##p+= wx##sz #define F(W,X) HARR_ADD(r, i, c2(f, W, X)) if (ext == 1) { @@ -443,13 +442,13 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g; } else if (wk < xk) { for (usz i = 0; i < cam; ) { CELL(w); B wb=taga(ws); - for (usz e = i+ext; i < e; i++) { CELL(x); F(inc(wb), taga(xs)); } + for (usz e = i+ext; i < e; i++) { CELL(x); F(incG(wb), taga(xs)); } dec(wb); } } else { for (usz i = 0; i < cam; ) { CELL(x); B xb=taga(xs); - for (usz e = i+ext; i < e; i++) { CELL(w); F(taga(ws), inc(xb)); } + for (usz e = i+ext; i < e; i++) { CELL(w); F(taga(ws), incG(xb)); } dec(xb); } } diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index a2a92a75..e0e9789b 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -265,9 +265,7 @@ B shape_c2(B t, B w, B x) { for (i64 i = 0; i < div; i++) mut_copyG(m, i*xia, x, 0, xia); mut_copyG(m, div*xia, x, 0, mod); decG(x); - Arr* ra = mut_fp(m); - arr_shSetU(ra, nr, sh); - return withFill(taga(ra), xf); + return withFill(taga(arr_shSetU(mut_fp(m), nr, sh)), xf); } u8 xk = xl - 3; rp = m_tyarrp(&r, 1<a[i] = 1; - arr_shSetU(ra, rr, rsh); - x = VALIDATE(taga(ra)); + x = VALIDATE(taga(arr_shSetU(ra, rr, rsh))); } if (cellStart==-1) { // printf("equal shape\n"); r = x; @@ -514,9 +510,7 @@ static NOINLINE B takedrop_highrank(bool take, B w, B x) { goto basicTake; } } else if (ria==0) { // printf("empty result\n"); - Arr* ra = emptyArr(x, rr); - arr_shSetU(ra, rr, rsh); - r = taga(ra); + r = taga(arr_shSetU(emptyArr(x, rr), rr, rsh)); } else { // printf("generic\n"); MAKE_MUT(rm, ria); mut_init(rm, TI(x,elType)); B xf = getFillR(x); @@ -589,9 +583,7 @@ static NOINLINE B takedrop_highrank(bool take, B w, B x) { } // end of actual generic copying code - Arr* ra = mut_fp(rm); - arr_shSetU(ra, rr, rsh); - r = withFill(taga(ra), xf); + r = withFill(taga(arr_shSetU(mut_fp(rm), rr, rsh)), xf); } decG(x); decW_tfree: TFREE(tmp); diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 2fd29a07..c3207a5f 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -1168,8 +1168,8 @@ B bitcast_impl(B el0, B el1, B x) { r = taga(copy(xct, r)); } else if (v(r)->refc!=1) { B pr = r; - r = taga(TI(r,slice)(r, 0, IA(r))); - arr_shSetI(a(r), xr, shObj(pr)); // safe to use pr because r has refcount>1 and slice only consumes one, leaving some behind + Arr* r2 = TI(r,slice)(r, 0, IA(r)); + r = taga(arr_shSetI(r2, xr, shObj(pr))); // safe to use pr because r has refcount>1 and slice only consumes one, leaving some behind } else { #if VERIFY_TAIL if (xct.s==1 && rct.s!=1) { diff --git a/src/core/harr.c b/src/core/harr.c index 4b74a625..fc0e4da0 100644 --- a/src/core/harr.c +++ b/src/core/harr.c @@ -21,8 +21,7 @@ B toCells(B x) { usz* xsh = SH(x); shcpy(csh->a, xsh+1, cr); for (usz i = 0; i < cam; i++) { - Arr* s = slice(incG(x), p, csz); arr_shSetI(s, cr, csh); - HARR_ADD(r, i, taga(s)); + HARR_ADD(r, i, taga(arr_shSetI(slice(incG(x), p, csz), cr, csh))); p+= csz; } ptr_dec(csh); @@ -47,8 +46,7 @@ B toKCells(B x, ur k) { M_HARR(r, cam); usz p = 0; for (usz i = 0; i < cam; i++) { - Arr* s = slice(incG(x), p, csz); arr_shSetI(s, cr, csh); - HARR_ADD(r, i, taga(s)); + HARR_ADD(r, i, taga(arr_shSetI(slice(incG(x), p, csz), cr, csh))); p+= csz; } if (cr>1) ptr_dec(csh);