use vtestz/vptestz instead of movemask for mask-any checks
This commit is contained in:
parent
712707d27b
commit
a622a6761b
@ -132,11 +132,15 @@ def topMask{x:T & w256{T, 16}} = {
|
||||
(msk&255) | (msk>>8)
|
||||
}
|
||||
|
||||
def homAny{x:T & w256i{T}} = homMask{[32]u8 ~~ x} != 0
|
||||
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 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}}
|
||||
def homAny{x:T & w256i{T} & elwidth{T}>=32} = topAny{x}
|
||||
|
||||
def topAny{x:T & w256i{T,16}} = homAny{[16]i16~~x < [16]i16**0}
|
||||
def topAll{x:T & w256i{T,16}} = homAll{[16]i16~~x < [16]i16**0}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user