From a622a6761b9a02eb4b4d19510591d626efc4d213 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 15 Apr 2023 15:10:58 +0300 Subject: [PATCH] use vtestz/vptestz instead of movemask for mask-any checks --- src/singeli/src/avx2.singeli | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/singeli/src/avx2.singeli b/src/singeli/src/avx2.singeli index e7b4e03e..5be6a3d9 100644 --- a/src/singeli/src/avx2.singeli +++ b/src/singeli/src/avx2.singeli @@ -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<=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}