move last bit of equal.singeli to loadBatch
This commit is contained in:
parent
40f36fa366
commit
9768526ddc
@ -12,13 +12,15 @@ def swap{w,x} = {
|
||||
x = t
|
||||
}
|
||||
|
||||
# width{W} ≤ width{X}
|
||||
equal{W, X}(w:*void, x:*void, l:u64, d:u64) : u1 = {
|
||||
def bulk = 256 / width{X}
|
||||
def vw = 256
|
||||
def bulk = vw / width{X}
|
||||
if (W!=X) if (d!=0) swap{w,x}
|
||||
|
||||
if (W==u1) {
|
||||
if (X==u1) { # bitarr ≡ bitarr
|
||||
maskedLoop{256, l, {i, M} => {
|
||||
maskedLoop{vw, l, {i, M} => {
|
||||
cw:= load{*[32]u8 ~~ w, i}
|
||||
cx:= load{*[32]u8 ~~ x, i}
|
||||
if (anyneBit{cw,cx,M}) return{0}
|
||||
@ -35,7 +37,7 @@ equal{W, X}(w:*void, x:*void, l:u64, d:u64) : u1 = {
|
||||
if (anynePositive{wu, cx, M}) return{0}
|
||||
}}
|
||||
} else { # bitarr ≡ i8/i16/i32arr
|
||||
def T = [256/width{X}]X
|
||||
def T = [vw/width{X}]X
|
||||
def sh{c} = c << (width{X}-1)
|
||||
def sh{c & X==u8} = T ~~ (to_el{u16,c}<<7)
|
||||
|
||||
@ -49,17 +51,15 @@ equal{W, X}(w:*void, x:*void, l:u64, d:u64) : u1 = {
|
||||
}}
|
||||
1
|
||||
}
|
||||
} else { # everything not involving bitarrs
|
||||
} else { # everything not involving bitarrs (i.e. floats/ints, and chars)
|
||||
if (W==i8 and X==i8) l<<= d
|
||||
def ww{gw, E} = [gw/width{E}]E
|
||||
def fac = width{X}/width{W}
|
||||
|
||||
def R = [bulk]X
|
||||
|
||||
maskedLoopPositive{bulk, l, {i, M} => {
|
||||
# TODO update this to modern mask stuff
|
||||
cw:= load{*ww{tern{fac==1, 256, 128}, W} ~~ (w + i*32/fac)}
|
||||
cx:= load{*ww{256, X} ~~ x, i}
|
||||
cwc:= widen{ww{256, X}, to_el{W, cw}}
|
||||
if (anynePositive{cwc,cx,M}) return{0}
|
||||
cw:= loadBatch{*W~~w, i, R}
|
||||
cx:= loadBatch{*X~~x, i, R}
|
||||
if (anynePositive{cw,cx,M}) return{0}
|
||||
}}
|
||||
}
|
||||
1
|
||||
|
||||
Loading…
Reference in New Issue
Block a user