split fillEqual into rare and non-rare versions
This commit is contained in:
parent
d9110e8b5a
commit
3ad82faadd
@ -64,12 +64,7 @@ void validateFill(B x) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fillEqual(B w, B x) { // doesn't consume
|
NOINLINE bool fillEqualR(B w, B x) { // doesn't consume; both args must be arrays
|
||||||
if (w.u==x.u) return true;
|
|
||||||
bool wa = isAtm(w);
|
|
||||||
bool xa = isAtm(x);
|
|
||||||
if (wa!=xa) return false;
|
|
||||||
if (wa) return false;
|
|
||||||
if (!eqShape(w, x)) return false;
|
if (!eqShape(w, x)) return false;
|
||||||
usz ia = a(w)->ia;
|
usz ia = a(w)->ia;
|
||||||
if (ia==0) return true;
|
if (ia==0) return true;
|
||||||
|
|||||||
@ -10,7 +10,7 @@ typedef struct FillSlice {
|
|||||||
|
|
||||||
B asFill(B x); // consumes
|
B asFill(B x); // consumes
|
||||||
void validateFill(B x);
|
void validateFill(B x);
|
||||||
bool fillEqual(B w, B x);
|
|
||||||
B withFill(B x, B fill); // consumes both
|
B withFill(B x, B fill); // consumes both
|
||||||
static B qWithFill(B x, B fill) { // consumes both
|
static B qWithFill(B x, B fill) { // consumes both
|
||||||
assert(isArr(x));
|
assert(isArr(x));
|
||||||
@ -18,6 +18,13 @@ static B qWithFill(B x, B fill) { // consumes both
|
|||||||
return withFill(x, fill);
|
return withFill(x, fill);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NOINLINE bool fillEqualR(B w, B x);
|
||||||
|
static bool fillEqual(B w, B x) {
|
||||||
|
if (w.u==x.u) return true;
|
||||||
|
if (isAtm(w)|isAtm(x)) return false;
|
||||||
|
return fillEqualR(w, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static B getFillR(B x) { // doesn't consume; can return bi_noFill
|
static B getFillR(B x) { // doesn't consume; can return bi_noFill
|
||||||
if (isArr(x)) {
|
if (isArr(x)) {
|
||||||
|
|||||||
2
src/h.h
2
src/h.h
@ -104,7 +104,7 @@ CTR_FOR(F)
|
|||||||
static const u16 C32_TAG = 0b0111111111110001; // 0111111111110001................00000000000ccccccccccccccccccccc char
|
static const u16 C32_TAG = 0b0111111111110001; // 0111111111110001................00000000000ccccccccccccccccccccc char
|
||||||
static const u16 TAG_TAG = 0b0111111111110010; // 0111111111110010................nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn special value (0=nothing, 1=undefined var, 2=bad header; 3=optimized out; 4=error?; 5=no fill)
|
static const u16 TAG_TAG = 0b0111111111110010; // 0111111111110010................nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn special value (0=nothing, 1=undefined var, 2=bad header; 3=optimized out; 4=error?; 5=no fill)
|
||||||
static const u16 VAR_TAG = 0b0111111111110011; // 0111111111110011ddddddddddddddddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn variable reference
|
static const u16 VAR_TAG = 0b0111111111110011; // 0111111111110011ddddddddddddddddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn variable reference
|
||||||
static const u16 EXT_TAG = 0b0111111111110100; // 0111111111110011ddddddddddddddddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn extended variable reference
|
static const u16 EXT_TAG = 0b0111111111110100; // 0111111111110100ddddddddddddddddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn extended variable reference
|
||||||
static const u16 I32_TAG = 0b0111111111110111; // 0111111111110111................nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 32-bit int; unused
|
static const u16 I32_TAG = 0b0111111111110111; // 0111111111110111................nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 32-bit int; unused
|
||||||
static const u16 MD1_TAG = 0b1111111111110010; // 1111111111110010ppppppppppppppppppppppppppppppppppppppppppppp000 1-modifier
|
static const u16 MD1_TAG = 0b1111111111110010; // 1111111111110010ppppppppppppppppppppppppppppppppppppppppppppp000 1-modifier
|
||||||
static const u16 MD2_TAG = 0b1111111111110011; // 1111111111110011ppppppppppppppppppppppppppppppppppppppppppppp000 2-modifier
|
static const u16 MD2_TAG = 0b1111111111110011; // 1111111111110011ppppppppppppppppppppppppppppppppppppppppppppp000 2-modifier
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user