specialize x86-64 homMask of 2x[n]i16, use for comparison
This commit is contained in:
parent
3ebfb24b0f
commit
08fa7d3d30
@ -59,6 +59,7 @@ def homAny{x:T & w256i{T}} = ~emit{u1, '_mm256_testz_si256', v2i{x}, v2i{x}}
|
||||
def homAll{x:T & w256i{T}} = homMask{[32]u8 ~~ x} == 0xffff_ffff
|
||||
def topAny{x:T & w256i{T}} = topMask{x} != 0
|
||||
def topAll{x:T & w256i{T}} = topMask{x} == (1<<vcount{T})-1
|
||||
def homMask{a:T, b:T & w256i{T,16}} = homMask{shuf{[4]u64, packQ{ty_s{a},ty_s{b}}, 4b3120}}
|
||||
|
||||
def topAny{x:T & w256i{T,32}} = ~emit{u1, '_mm256_testz_ps', v2f{x}, v2f{x}}
|
||||
def topAny{x:T & w256i{T,64}} = ~emit{u1, '_mm256_testz_pd', v2d{x}, v2d{x}}
|
||||
|
||||
@ -109,7 +109,8 @@ def table{aa, F, w, G_bit, G_vec} = {
|
||||
...each{{E}=>{
|
||||
def E2 = (if (aa and isunsigned{E} and ((same{F,__eq} | same{F,__ne}) | (E==u32))) {ty_s{E}} else E)
|
||||
def bulk = w/width{E2}
|
||||
G_vec{[bulk]E2, max{tern{hasarch{'AARCH64'},2,1}, 8/bulk}}
|
||||
def unr = if (hasarch{'X86_64'} and width{E2}==16) 2 else max{8/bulk,1}
|
||||
G_vec{[bulk]E2, max{tern{hasarch{'AARCH64'},2,1}, unr}}
|
||||
}, tup{i8, i16, i32, f64, u8, u16, u32}}
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,6 +52,7 @@ def topMask{x:T & w128{T, 32}} = emit{u8, '_mm_movemask_ps', v2f{x}}
|
||||
def topMask{x:T & w128{T, 64}} = emit{u8, '_mm_movemask_pd', v2d{x}}
|
||||
def homMask{x:T & w128{T}} = topMask{x}
|
||||
def homMaskX{a:T & elwidth{T}==16} = tup{2, homMask{re_el{u8,a}}}
|
||||
def homMask{a:T, b:T & w128i{T,16}} = homMask{packs{ty_s{a},ty_s{b}}}
|
||||
|
||||
def homAny{x:T & w128i{T}} = homMask{[16]u8 ~~ x} != 0
|
||||
def homAll{x:T & w128i{T}} = homMask{[16]u8 ~~ x} == 0xffff
|
||||
|
||||
Loading…
Reference in New Issue
Block a user