IndexOfAnyZero
148 lines
; System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized[[System.Buffers.IndexOfAnyAsciiSearcher+DontNegate, System.Private.CoreLib],[System.Buffers.IndexOfAnyAsciiSearcher+Ssse3AndWasmHandleZeroInNeedle, System.Private.CoreLib]](Int16 ByRef, Int32, System.Runtime.Intrinsics.Vector128`1<Byte>)
; System.Buffers.IndexOfAnyAsciiSearcher.IndexOfAnyVectorized[[System.Buffers.IndexOfAnyAsciiSearcher+DontNegate, System.Private.CoreLib],[System.Buffers.IndexOfAnyAsciiSearcher+Ssse3AndWasmHandleZeroInNeedle, System.Private.CoreLib]](Int16 ByRef, Int32, System.Runtime.Intrinsics.Vector128`1<Byte>)
sub rsp,18
vzeroupper
vzeroupper
vmovaps [rsp],xmm6
mov rax,rcx
mov rax,rcx
cmp edx,10
cmp edx,10
jle near ptr M01_L05
jle near ptr M01_L05
vmovups xmm0,[r8]
vmovups xmm0,[r8]
vinserti128 ymm0,ymm0,xmmword ptr [r8],1
vinserti128 ymm0,ymm0,xmmword ptr [r8],1
cmp edx,20
cmp edx,20
jle near ptr M01_L01
jle short M01_L01
lea r8d,[rdx-20]
lea r8d,[rdx-20]
movsxd r8,r8d
movsxd r8,r8d
lea r8,[rax+r8*2]
lea r8,[rax+r8*2]
vmovups ymm1,[7FF981530600]
vmovups ymm1,[7FF981510500]
vmovups ymm2,[7FF981530620]
vmovups ymm2,[7FF981510520]
nop word ptr [rax+rax]
M01_L00:
M01_L00:
vmovups ymm3,[rax]
vpminuw ymm3,ymm1,[rax]
vmovups ymm4,[rax+20]
vpminuw ymm4,ymm1,[rax+20]
vpackuswb ymm5,ymm3,ymm4
vpackuswb ymm3,ymm3,ymm4
vpshufb ymm16,ymm0,ymm5
vpshufb ymm4,ymm0,ymm3
vpsrld ymm5,ymm5,4
vpsrld ymm3,ymm3,4
vpand ymm5,ymm5,ymm1
vpand ymm3,ymm3,ymm2
vmovups ymm6,[7FF981530640]
vmovups ymm5,[7FF981510540]
vpshufb ymm5,ymm6,ymm5
vpshufb ymm3,ymm5,ymm3
vpandd ymm5,ymm16,ymm5
vpand ymm3,ymm4,ymm3
vpsubw ymm3,ymm3,ymm2
vptest ymm3,ymm3
vmovups ymm6,[7FF981530660]
vpcmpgtw ymm3,ymm6,ymm3
vpsubw ymm4,ymm4,ymm2
vmovups ymm6,[7FF981530660]
vpcmpgtw ymm4,ymm6,ymm4
vpacksswb ymm3,ymm3,ymm4
vpand ymm5,ymm5,ymm3
vptest ymm5,ymm5
jne short M01_L02
jne short M01_L02
add rax,40
add rax,40
cmp rax,r8
cmp rax,r8
jb short M01_L00
jb short M01_L00
M01_L01:
M01_L01:
add edx,0FFFFFFF0
add edx,0FFFFFFF0
movsxd rdx,edx
movsxd rdx,edx
lea rdx,[rcx+rdx*2]
lea rdx,[rcx+rdx*2]
cmp rax,rdx
cmp rax,rdx
cmova rax,rdx
cmova rax,rdx
jmp short M01_L03
jmp short M01_L03
M01_L02:
M01_L02:
sub rax,rcx
sub rax,rcx
shr rax,1
shr rax,1
vpermq ymm0,ymm5,0D8
vpermq ymm1,ymm3,0D8
vxorps ymm1,ymm1,ymm1
vxorps ymm0,ymm0,ymm0
vpcmpeqb ymm2,ymm0,ymm1
vpcmpeqb ymm2,ymm1,ymm0
vpmovmskb edx,ymm2
vpmovmskb edx,ymm2
mov ecx,edx
mov ecx,edx
not ecx
not ecx
xor edx,edx
xor edx,edx
tzcnt edx,ecx
tzcnt edx,ecx
add eax,edx
add eax,edx
jmp near ptr M01_L07
jmp near ptr M01_L07
M01_L03:
M01_L03:
vmovups ymm1,[rax]
vmovups ymm1,[7FF981510500]
vmovups ymm2,[rdx]
vpminuw ymm2,ymm1,[rax]
vpackuswb ymm3,ymm1,ymm2
vpminuw ymm1,ymm1,[rdx]
vpshufb ymm0,ymm0,ymm3
vpackuswb ymm1,ymm2,ymm1
vpsrld ymm3,ymm3,4
vpshufb ymm0,ymm0,ymm1
vmovups ymm4,[7FF981530600]
vpsrld ymm1,ymm1,4
vpand ymm3,ymm3,ymm4
vmovups ymm2,[7FF981510520]
vmovups ymm4,[7FF981530640]
vpand ymm1,ymm1,ymm2
vpshufb ymm3,ymm4,ymm3
vmovups ymm2,[7FF981510540]
vpand ymm0,ymm0,ymm3
vpshufb ymm1,ymm2,ymm1
vmovups ymm3,[7FF981530620]
vpsubw ymm1,ymm1,ymm3
vmovups ymm4,[7FF981530660]
vpcmpgtw ymm1,ymm4,ymm1
vpsubw ymm2,ymm2,ymm3
vmovups ymm3,[7FF981530660]
vpcmpgtw ymm2,ymm3,ymm2
vpacksswb ymm1,ymm1,ymm2
vpand ymm0,ymm0,ymm1
vpand ymm0,ymm0,ymm1
vptest ymm0,ymm0
vptest ymm0,ymm0
je near ptr M01_L08
je near ptr M01_L08
vpermq ymm0,ymm0,0D8
vpermq ymm0,ymm0,0D8
vxorps ymm1,ymm1,ymm1
vxorps ymm1,ymm1,ymm1
vpcmpeqb ymm0,ymm0,ymm1
vpcmpeqb ymm0,ymm0,ymm1
vpmovmskb r8d,ymm0
vpmovmskb r8d,ymm0
not r8d
not r8d
tzcnt r8d,r8d
tzcnt r8d,r8d
cmp r8d,10
cmp r8d,10
jl short M01_L04
jl short M01_L04
mov rax,rdx
mov rax,rdx
add r8d,0FFFFFFF0
add r8d,0FFFFFFF0
M01_L04:
M01_L04:
sub rax,rcx
sub rax,rcx
shr rax,1
shr rax,1
add eax,r8d
add eax,r8d
jmp near ptr M01_L07
jmp near ptr M01_L07
M01_L05:
M01_L05:
add edx,0FFFFFFF8
add edx,0FFFFFFF8
movsxd rdx,edx
movsxd rdx,edx
lea rax,[rax+rdx*2]
lea rax,[rax+rdx*2]
cmp rcx,rax
cmp rcx,rax
mov rdx,rcx
mov rdx,rcx
cmova rdx,rax
cmova rdx,rax
vmovups xmm0,[rdx]
vmovups xmm0,[rdx]
vmovups xmm1,[rax]
vmovups xmm1,[7FF981510500]
vpackuswb xmm2,xmm0,xmm1
vpminuw xmm0,xmm0,xmm1
vmovups xmm3,[r8]
vmovups xmm2,[rax]
vpshufb xmm3,xmm3,xmm2
vpminuw xmm1,xmm2,xmm1
vpsrld xmm2,xmm2,4
vpackuswb xmm0,xmm0,xmm1
vpand xmm2,xmm2,[7FF981530600]
vmovups xmm1,[r8]
vmovups xmm4,[7FF981530680]
vpshufb xmm1,xmm1,xmm0
vpshufb xmm2,xmm4,xmm2
vpsrld xmm0,xmm0,4
vpand xmm2,xmm3,xmm2
vpand xmm0,xmm0,[7FF981510520]
vmovups xmm3,[7FF981530620]
vmovups xmm2,[7FF981510560]
vpsubw xmm0,xmm0,xmm3
vpshufb xmm0,xmm2,xmm0
vmovups xmm4,[7FF981530660]
vpand xmm0,xmm1,xmm0
vpcmpgtw xmm0,xmm4,xmm0
vptest xmm0,xmm0
vpsubw xmm1,xmm1,xmm3
vpcmpgtw xmm1,xmm4,xmm1
vpacksswb xmm0,xmm0,xmm1
vpand xmm2,xmm2,xmm0
vptest xmm2,xmm2
je short M01_L08
je short M01_L08
vxorps xmm0,xmm0,xmm0
vxorps xmm1,xmm1,xmm1
vpcmpeqb xmm0,xmm2,xmm0
vpcmpeqb xmm0,xmm0,xmm1
vpmovmskb r8d,xmm0
vpmovmskb r8d,xmm0
not r8d
not r8d
tzcnt r8d,r8d
tzcnt r8d,r8d
cmp r8d,8
cmp r8d,8
jl short M01_L06
jl short M01_L06
mov rdx,rax
mov rdx,rax
add r8d,0FFFFFFF8
add r8d,0FFFFFFF8
M01_L06:
M01_L06:
sub rdx,rcx
sub rdx,rcx
shr rdx,1
shr rdx,1
lea eax,[rdx+r8]
lea eax,[rdx+r8]
M01_L07:
M01_L07:
vmovaps xmm6,[rsp]
vzeroupper
vzeroupper
add rsp,18
ret
ret
M01_L08:
M01_L08:
mov eax,0FFFFFFFF
mov eax,0FFFFFFFF
vmovaps xmm6,[rsp]
vzeroupper
vzeroupper
add rsp,18
ret
ret
; Total bytes of code 590
; Total bytes of code 464