non-reusing i32arr→i32arr ⌜
This commit is contained in:
parent
21412be6c5
commit
da095a0ff4
52
src/md1.c
52
src/md1.c
@ -8,30 +8,52 @@ B tbl_c1(B d, B x) { B f = c(Md1D,d)->f;
|
|||||||
usz i = 0;
|
usz i = 0;
|
||||||
B cr = c1(f, xget(x,0));
|
B cr = c1(f, xget(x,0));
|
||||||
HArr_p rH;
|
HArr_p rH;
|
||||||
if (reusable(x) && TI(x).canStore(cr)) {
|
if (TI(x).canStore(cr)) {
|
||||||
|
bool reuse = reusable(x);
|
||||||
if (v(x)->type==t_harr) {
|
if (v(x)->type==t_harr) {
|
||||||
B* p = harr_ptr(x);
|
B* xp = harr_ptr(x);
|
||||||
p[i++] = cr;
|
if (reuse) {
|
||||||
for (; i < ia; i++) p[i] = c1(f, p[i]);
|
xp[i++] = cr;
|
||||||
return x;
|
for (; i < ia; i++) xp[i] = c1(f, xp[i]);
|
||||||
|
return x;
|
||||||
|
} else {
|
||||||
|
HArr_p rp = m_harrc(x);
|
||||||
|
rp.a[i++] = cr;
|
||||||
|
for (; i < ia; i++) rp.a[i] = c1(f, inc(xp[i]));
|
||||||
|
dec(x);
|
||||||
|
return rp.b;
|
||||||
|
}
|
||||||
} else if (v(x)->type==t_i32arr) {
|
} else if (v(x)->type==t_i32arr) {
|
||||||
i32* p = i32arr_ptr(x);
|
i32* xp = i32arr_ptr(x);
|
||||||
p[i++] = o2iu(cr);
|
B r = reuse? x : m_i32arrc(x);
|
||||||
|
i32* rp = i32arr_ptr(r);
|
||||||
|
rp[i++] = o2iu(cr);
|
||||||
for (; i < ia; i++) {
|
for (; i < ia; i++) {
|
||||||
cr = c1(f, m_i32(p[i]));
|
cr = c1(f, m_i32(xp[i]));
|
||||||
if (!q_i32(cr)) {
|
if (!q_i32(cr)) {
|
||||||
rH = m_harrc(x);
|
rH = m_harrc(x);
|
||||||
for (usz j = 0; j < i; j++) rH.a[j] = m_i32(p[j]);
|
for (usz j = 0; j < i; j++) rH.a[j] = m_i32(rp[j]);
|
||||||
|
if (!reuse) dec(r);
|
||||||
goto fallback;
|
goto fallback;
|
||||||
}
|
}
|
||||||
p[i] = o2iu(cr);
|
rp[i] = o2iu(cr);
|
||||||
}
|
}
|
||||||
return x;
|
if (!reuse) dec(x);
|
||||||
|
return r;
|
||||||
} else if (v(x)->type==t_fillarr) {
|
} else if (v(x)->type==t_fillarr) {
|
||||||
B* p = fillarr_ptr(x);
|
B* xp = fillarr_ptr(x);
|
||||||
p[i++] = cr;
|
if (reuse) {
|
||||||
for (; i < ia; i++) p[i] = c1(f, p[i]);
|
c(FillArr,x)->fill = bi_noFill;
|
||||||
return x;
|
xp[i++] = cr;
|
||||||
|
for (; i < ia; i++) xp[i] = c1(f, xp[i]);
|
||||||
|
return x;
|
||||||
|
} else {
|
||||||
|
HArr_p rp = m_harrc(x);
|
||||||
|
rp.a[i++] = cr;
|
||||||
|
for (; i < ia; i++) rp.a[i] = c1(f, inc(xp[i]));
|
||||||
|
dec(x);
|
||||||
|
return rp.b;
|
||||||
|
}
|
||||||
} else rH = m_harrc(x);
|
} else rH = m_harrc(x);
|
||||||
} else rH = m_harrc(x);
|
} else rH = m_harrc(x);
|
||||||
fallback:
|
fallback:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user