Span_IndexOf_31_vs_50

Erstellt Diff läuft nie ab
36 Entfernungen
187 Zeilen
25 Hinzufügungen
180 Zeilen
## .NET Core 3.1.6 (CoreCLR 4.700.20.26901, CoreFX 4.700.20.31603), X64 RyuJIT
## .NET Core 5.0.0 (CoreCLR 5.0.20.40416, CoreFX 5.0.20.40416), X64 RyuJIT
```assembly
```assembly
; System.Memory.Span`1[[System.Char, System.Private.CoreLib]].IndexOfValue()
; System.Memory.Span`1[[System.Char, System.Private.CoreLib]].IndexOfValue()
sub rsp,28
sub rsp,28
mov rdx,[rcx+18]
mov rdx,[rcx+18]
test rdx,rdx
test rdx,rdx
jne short M00_L00
jne short M00_L00
xor r8d,r8d
xor r8d,r8d
xor eax,eax
xor eax,eax
jmp short M00_L01
jmp short M00_L01
M00_L00:
M00_L00:
lea r8,[rdx+10]
lea r8,[rdx+10]
mov eax,[rdx+8]
mov eax,[rdx+8]
M00_L01:
M00_L01:
movzx ecx,word ptr [rcx+2C]
movzx edx,word ptr [rcx+2C]
mov [rsp+24],ecx
mov edx,[rsp+24]
mov rcx,r8
mov rcx,r8
mov r8d,eax
mov r8d,eax
call System.SpanHelpers.IndexOf(Char ByRef, Char, Int32)
call System.SpanHelpers.IndexOf(Char ByRef, Char, Int32)
nop
nop
add rsp,28
add rsp,28
ret
ret
; Total bytes of code 56
; Total bytes of code 48
```
```
```assembly
```assembly
; System.SpanHelpers.IndexOf(Char ByRef, Char, Int32)
; System.SpanHelpers.IndexOf(Char ByRef, Char, Int32)
push rsi
push rsi
vzeroupper
vzeroupper
xor r9d,r9d
xor r9d,r9d
movsxd r10,r8d
movsxd r10,r8d
mov rax,r10
mov rax,r10
mov r11,rcx
mov r11,rcx
test r11b,1
test r11b,1
jne short M01_L01
jne short M01_L01
cmp r8d,10
cmp r8d,10
jl short M01_L01
jl short M01_L01
mov rax,rcx
mov rax,rcx
neg eax
neg eax
mov r8d,eax
mov r8d,eax
shr r8d,1F
shr r8d,1F
add eax,r8d
add eax,r8d
sar eax,1
sar eax,1
mov eax,eax
mov eax,eax
and rax,7
and rax,7
cmp rax,4
cmp rax,4
jl short M01_L02
jl short M01_L02
M01_L00:
M01_L00:
lea r8,[rcx+r9*2]
lea r8,[rcx+r9*2]
movzx r11d,dx
movzx r11d,dx
movzx esi,word ptr [r8]
movzx esi,word ptr [r8]
cmp r11d,esi
cmp r11d,esi
je near ptr M01_L16
je near ptr M01_L16
movzx esi,word ptr [r8+2]
movzx esi,word ptr [r8+2]
cmp r11d,esi
cmp r11d,esi
je near ptr M01_L15
je near ptr M01_L15
movzx esi,word ptr [r8+4]
movzx esi,word ptr [r8+4]
cmp r11d,esi
cmp r11d,esi
je near ptr M01_L14
je near ptr M01_L14
movzx r8d,word ptr [r8+6]
movzx r8d,word ptr [r8+6]
cmp r11d,r8d
cmp r11d,r8d
je near ptr M01_L13
je near ptr M01_L13
add r9,4
add r9,4
add rax,0FFFFFFFFFFFFFFFC
add rax,0FFFFFFFFFFFFFFFC
M01_L01:
M01_L01:
cmp rax,4
cmp rax,4
jge short M01_L00
jge short M01_L00
M01_L02:
M01_L02:
test rax,rax
test rax,rax
jle short M01_L04
jle short M01_L04
movzx r11d,dx
movzx r11d,dx
M01_L03:
M01_L03:
movzx r8d,word ptr [rcx+r9*2]
movzx r8d,word ptr [rcx+r9*2]
cmp r8d,r11d
cmp r8d,r11d
je near ptr M01_L16
je near ptr M01_L16
inc r9
inc r9
dec rax
dec rax
test rax,rax
test rax,rax
jg short M01_L03
jg short M01_L03
M01_L04:
M01_L04:
cmp r9,r10
cmp r9,r10
jge near ptr M01_L12
jge near ptr M01_L12
lea rax,[rcx+r9*2]
lea rax,[rcx+r9*2]
mov r11,rax
mov r11,rax
test r11b,1F
mov r8d,r11d
test r8b,1F
je short M01_L06
je short M01_L06
movzx r11d,dx
movzx r11d,dx
vmovd xmm0,r11d
vmovd xmm0,r11d
vpbroadcastw xmm0,xmm0
vpbroadcastw xmm0,xmm0
vmovupd xmm1,[rax]
vmovupd xmm1,[rax]
vpcmpeqw xmm0,xmm0,xmm1
vpcmpeqw xmm0,xmm0,xmm1
vpmovmskb r11d,xmm0
vpmovmskb r11d,xmm0
test r11d,r11d
test r11d,r11d
jne short M01_L05
jne short M01_L05
add r9,8
add r9,8
jmp short M01_L06
jmp short M01_L06
M01_L05:
M01_L05:
xor eax,eax
xor r10d,r10d
tzcnt eax,r11d
tzcnt r10d,r11d
mov r10d,eax
shr r10d,1
shr r10d,1F
mov edx,r10d
add eax,r10d
mov eax,edx
sar eax,1
add eax,r9d
add eax,r9d
jmp near ptr M01_L17
jmp near ptr M01_L17
M01_L06:
M01_L06:
mov rax,r10
mov rax,r10