New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regressions around IndexOf #80441
Comments
Run Information
Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt32>*' PayloadsHistogramSystem.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt32>.GetHashCodeBenchmark
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Collections.ContainsFalse<String>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsFalse<String>*' PayloadsHistogramSystem.Collections.ContainsFalse<String>.ImmutableArray(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Int
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Int*' PayloadsHistogramSystem.Runtime.Intrinsics.Tests.Perf_Vector128Int.GetHashCodeBenchmark
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.Tests.Perf_BitArray
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.Tests.Perf_BitArray*' PayloadsHistogramSystem.Collections.Tests.Perf_BitArray.BitArrayLengthValueCtor(Size: 4)
Description of detection logic
; System.Collections.BitArray..ctor(Int32, Boolean)
push rdi
push rsi
push rbx
sub rsp,20
mov rsi,rcx
mov edi,edx
mov ebx,r8d
test edi,edi
jl short M01_L01
lea edx,[rdi+1F]
shr edx,5
movsxd rdx,edx
mov rcx,offset MT_System.Int32[]
call CORINFO_HELP_NEWARR_1_VC
lea rcx,[rsi+8]
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
mov [rsi+10],edi
test bl,bl
je short M01_L00
mov rcx,[rsi+8]
mov edx,0FFFFFFFF
call qword ptr [7FFACD149E40]; System.Array.Fill[[System.Int32, System.Private.CoreLib]](Int32[], Int32)
and edi,1F
jle short M01_L00
mov rcx,[rsi+8]
mov edx,[rcx+8]
lea eax,[rdx-1]
cmp eax,edx
jae short M01_L02
mov edx,eax
mov eax,1
shlx eax,eax,edi
dec eax
mov [rcx+rdx*4+10],eax
M01_L00:
xor ecx,ecx
mov [rsi+14],ecx
add rsp,20
pop rbx
pop rsi
pop rdi
ret
M01_L01:
mov ecx,775
mov rdx,7FFACCF23070
call CORINFO_HELP_STRCNS
mov rcx,rax
mov edx,edi
call qword ptr [7FFACCD27BD0]
int 3
M01_L02:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 165 Compare Jit Disasm; System.Collections.Tests.Perf_BitArray.BitArrayLengthValueCtor()
push rdi
push rsi
sub rsp,28
mov rsi,rcx
mov rcx,offset MT_System.Collections.BitArray
call CORINFO_HELP_NEWSFAST
mov rdi,rax
mov edx,[rsi+30]
mov rcx,rdi
mov r8d,1
call qword ptr [7FFB00B51A08]; System.Collections.BitArray..ctor(Int32, Boolean)
mov rax,rdi
add rsp,28
pop rsi
pop rdi
ret
; Total bytes of code 55 ; System.Collections.BitArray..ctor(Int32, Boolean)
push rdi
push rsi
push rbx
sub rsp,20
mov rsi,rcx
mov edi,edx
mov ebx,r8d
test edi,edi
jl short M01_L01
lea edx,[rdi+1F]
shr edx,5
movsxd rdx,edx
mov rcx,offset MT_System.Int32[]
call CORINFO_HELP_NEWARR_1_VC
lea rcx,[rsi+8]
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
mov [rsi+10],edi
test bl,bl
je short M01_L00
mov rcx,[rsi+8]
mov edx,0FFFFFFFF
call qword ptr [7FFB00CC7E40]; System.Array.Fill[[System.Int32, System.Private.CoreLib]](Int32[], Int32)
and edi,1F
jle short M01_L00
mov rcx,[rsi+8]
mov edx,[rcx+8]
lea eax,[rdx-1]
cmp eax,edx
jae short M01_L02
mov edx,eax
mov eax,1
shlx eax,eax,edi
dec eax
mov [rcx+rdx*4+10],eax
M01_L00:
xor ecx,ecx
mov [rsi+14],ecx
add rsp,20
pop rbx
pop rsi
pop rdi
ret
M01_L01:
mov ecx,775
mov rdx,7FFB00AA43D8
call CORINFO_HELP_STRCNS
mov rcx,rax
mov edx,edi
call qword ptr [7FFB008ABAC8]
int 3
M01_L02:
call CORINFO_HELP_RNGCHKFAIL
int 3
; Total bytes of code 165 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Tests.Perf_HashCode
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_HashCode*' PayloadsHistogramSystem.Tests.Perf_HashCode.Add
Description of detection logic
; System.HashCode.Add(Int32)
mov eax,[rcx+1C]
lea r8d,[rax+1]
mov [rcx+1C],r8d
mov r8d,eax
and r8d,3
je short M01_L01
cmp r8d,1
je short M01_L00
cmp r8d,2
jne short M01_L03
jmp short M01_L02
M01_L00:
mov [rcx+14],edx
ret
M01_L01:
mov [rcx+10],edx
ret
M01_L02:
mov [rcx+18],edx
ret
M01_L03:
cmp eax,3
jne short M01_L04
lea rax,[rcx+4]
lea r8,[rcx+8]
lea r9,[rcx+0C]
mov dword ptr [rcx],0DB4532AD
mov dword ptr [rax],3D0DB8FC
mov dword ptr [r8],0B721EE85
mov dword ptr [r9],18EA74D4
M01_L04:
mov eax,[rcx]
imul r8d,[rcx+10],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx],eax
mov eax,[rcx+4]
imul r8d,[rcx+14],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx+4],eax
mov eax,[rcx+8]
imul r8d,[rcx+18],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx+8],eax
imul edx,85EBCA77
add edx,[rcx+0C]
rol edx,0D
imul eax,edx,9E3779B1
mov [rcx+0C],eax
ret
; Total bytes of code 187 ; System.HashCode.ToHashCode()
mov eax,[rcx+1C]
mov edx,eax
and edx,3
cmp eax,4
jb short M02_L02
mov r8d,[rcx]
mov r9d,[rcx+4]
mov r10d,[rcx+8]
mov r11d,[rcx+0C]
rol r8d,1
rol r9d,7
add r8d,r9d
rol r10d,0C
add r8d,r10d
rol r11d,12
add r8d,r11d
M02_L00:
lea eax,[r8+rax*4]
test edx,edx
je short M02_L01
imul r8d,[rcx+10],0C2B2AE3D
add eax,r8d
rol eax,11
imul eax,27D4EB2F
cmp edx,1
ja short M02_L03
M02_L01:
mov edx,eax
shr edx,0F
xor eax,edx
imul eax,85EBCA77
mov edx,eax
shr edx,0D
xor eax,edx
imul eax,0C2B2AE3D
mov edx,eax
shr edx,10
xor eax,edx
ret
M02_L02:
mov r8d,0CD785636
jmp short M02_L00
M02_L03:
imul r8d,[rcx+14],0C2B2AE3D
add r8d,eax
rol r8d,11
imul eax,r8d,27D4EB2F
cmp edx,2
jbe short M02_L01
imul edx,[rcx+18],0C2B2AE3D
add edx,eax
rol edx,11
imul eax,edx,27D4EB2F
jmp short M02_L01
; Total bytes of code 174 Compare Jit Disasm; System.Tests.Perf_HashCode.Add()
push rsi
sub rsp,40
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+20],xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
xor esi,esi
M00_L00:
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
lea rcx,[rsp+20]
mov edx,esi
call qword ptr [7FF7D0C391B0]; System.HashCode.Add(Int32)
inc esi
cmp esi,64
jl short M00_L00
lea rcx,[rsp+20]
call qword ptr [7FF7D0C391C8]; System.HashCode.ToHashCode()
nop
add rsp,40
pop rsi
ret
; Total bytes of code 165 ; System.HashCode.Add(Int32)
mov eax,[rcx+1C]
lea r8d,[rax+1]
mov [rcx+1C],r8d
mov r8d,eax
and r8d,3
je short M01_L01
cmp r8d,1
je short M01_L00
cmp r8d,2
jne short M01_L03
jmp short M01_L02
M01_L00:
mov [rcx+14],edx
ret
M01_L01:
mov [rcx+10],edx
ret
M01_L02:
mov [rcx+18],edx
ret
M01_L03:
cmp eax,3
jne short M01_L04
lea rax,[rcx+4]
lea r8,[rcx+8]
lea r9,[rcx+0C]
mov dword ptr [rcx],522AE901
mov dword ptr [rax],0B3F36F50
mov dword ptr [r8],2E07A4D9
mov dword ptr [r9],8FD02B28
M01_L04:
mov eax,[rcx]
imul r8d,[rcx+10],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx],eax
mov eax,[rcx+4]
imul r8d,[rcx+14],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx+4],eax
mov eax,[rcx+8]
imul r8d,[rcx+18],85EBCA77
add eax,r8d
rol eax,0D
imul eax,9E3779B1
mov [rcx+8],eax
imul edx,85EBCA77
add edx,[rcx+0C]
rol edx,0D
imul eax,edx,9E3779B1
mov [rcx+0C],eax
ret
; Total bytes of code 187 ; System.HashCode.ToHashCode()
mov eax,[rcx+1C]
mov edx,eax
and edx,3
cmp eax,4
jb short M02_L02
mov r8d,[rcx]
mov r9d,[rcx+4]
mov r10d,[rcx+8]
mov r11d,[rcx+0C]
rol r8d,1
rol r9d,7
add r8d,r9d
rol r10d,0C
add r8d,r10d
rol r11d,12
add r8d,r11d
M02_L00:
lea eax,[r8+rax*4]
test edx,edx
je short M02_L01
imul r8d,[rcx+10],0C2B2AE3D
add eax,r8d
rol eax,11
imul eax,27D4EB2F
cmp edx,1
ja short M02_L03
M02_L01:
mov edx,eax
shr edx,0F
xor eax,edx
imul eax,85EBCA77
mov edx,eax
shr edx,0D
xor eax,edx
imul eax,0C2B2AE3D
mov edx,eax
shr edx,10
xor eax,edx
ret
M02_L02:
mov r8d,445E0C8A
jmp short M02_L00
M02_L03:
imul r8d,[rcx+14],0C2B2AE3D
add r8d,eax
rol r8d,11
imul eax,r8d,27D4EB2F
cmp edx,2
jbe short M02_L01
imul edx,[rcx+18],0C2B2AE3D
add edx,eax
rol edx,11
imul eax,edx,27D4EB2F
jmp short M02_L01
; Total bytes of code 174 DocsProfiling workflow for dotnet/runtime repository |
Run Information
Regressions in System.Memory.Span<Byte>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Byte>*' PayloadsHistogramSystem.Memory.Span<Byte>.IndexOfAnyThreeValues(Size: 33)
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int64>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int64>*' PayloadsHistogramSystem.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int64>.GetHashCodeBenchmark
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in LinqBenchmarks
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'LinqBenchmarks*' PayloadsHistogramLinqBenchmarks.Count00LinqMethodX
Description of detection logic
Compare Jit Disasm; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__()
push rbp
sub rsp,20
lea rbp,[rsp+20]
mov [rbp+10],rcx
mov rcx,[rbp+10]
cmp dword ptr [rcx+40],0B
jne short M00_L00
mov rcx,[rbp+10]
call qword ptr [7FF8797EBB40]
nop
add rsp,20
pop rbp
ret
M00_L00:
xor eax,eax
add rsp,20
pop rbp
ret
; Total bytes of code 49 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Memory.Span<Char>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Char>*' PayloadsHistogramSystem.Memory.Span<Char>.SequenceEqual(Size: 512)
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int32>*' PayloadsHistogramSystem.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int32>.GetHashCodeBenchmark
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.TryGetValueFalse<Int32, Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.TryGetValueFalse<Int32, Int32>*' PayloadsHistogramSystem.Collections.TryGetValueFalse<Int32, Int32>.ImmutableDictionary(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in Benchstone.BenchI.IniArray
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Benchstone.BenchI.IniArray*' PayloadsHistogramBenchstone.BenchI.IniArray.Test
Description of detection logic
Compare Jit Disasm; Benchstone.BenchI.IniArray.Test()
sub rsp,28
mov rcx,offset MT_System.Char[]
mov edx,10
call CORINFO_HELP_NEWARR_1_VC
xor edx,edx
M00_L00:
xor ecx,ecx
nop dword ptr [rax]
M00_L01:
mov r8d,ecx
mov word ptr [rax+r8*2+10],20
inc ecx
cmp ecx,10
jl short M00_L01
inc edx
cmp edx,989680
jl short M00_L00
add rsp,28
ret
; Total bytes of code 65 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in PerfLabTests.CastingPerf2.CastingPerf
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf2.CastingPerf*' PayloadsHistogramPerfLabTests.CastingPerf2.CastingPerf.FooObjIsNull
Description of detection logic
Compare Jit Disasm; PerfLabTests.CastingPerf2.CastingPerf.FooObjIsNull()
push rdi
push rsi
push rbp
push rbx
xor esi,esi
mov edi,[7FFC503929B8]
test edi,edi
jle short M00_L01
mov rdx,131664064D0
mov rbx,[rdx]
mov rbp,131664064E0
M00_L00:
mov rcx,rbp
mov rdx,rbx
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L01:
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 61 DocsProfiling workflow for dotnet/runtime repository |
Run Information
Regressions in Microsoft.Extensions.Primitives.StringSegmentBenchmark
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.StringSegmentBenchmark*' PayloadsHistogramMicrosoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny
Description of detection logic
; System.String.IndexOfAny(Char[], Int32, Int32)
push rsi
sub rsp,40
mov esi,r8d
M01_L00:
test rdx,rdx
je near ptr M01_L04
mov r8d,[rcx+8]
cmp r8d,esi
jb near ptr M01_L05
sub r8d,esi
cmp r8d,r9d
jb near ptr M01_L06
movsxd r8,esi
lea rcx,[rcx+r8*2+0C]
lea r8,[rdx+10]
mov edx,[rdx+8]
mov [rsp+3C],edx
cmp edx,5
ja near ptr M01_L01
mov edx,[rsp+3C]
lea rax,[7FF9AB3D3A00]
mov eax,[rax+rdx*4]
lea r10,[M01_L00]
add rax,r10
jmp rax
mov eax,0FFFFFFFF
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
mov r8d,r9d
call qword ptr [7FF9AB9316A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
movsx r8,word ptr [r8+2]
call qword ptr [7FF9ABAEB930]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32)
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
mov [rsp+20],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABBBD7E0]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int16, Int32)
jmp short M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r8,word ptr [r8+6]
mov [rsp+20],r8d
mov [rsp+28],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABD41EE8]
jmp short M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r11,word ptr [r8+6]
movsx r8,word ptr [r8+8]
mov [rsp+20],r11d
mov [rsp+28],r8d
mov [rsp+30],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABD43720]
jmp short M01_L02
M01_L01:
mov edx,r9d
mov r9d,[rsp+3C]
call qword ptr [7FF9ABD43F90]
M01_L02:
test eax,eax
jge short M01_L03
add rsp,40
pop rsi
ret
M01_L03:
add eax,esi
add rsp,40
pop rsi
ret
M01_L04:
mov ecx,60
call qword ptr [7FF9ABAE37F8]
int 3
M01_L05:
mov ecx,8
xor edx,edx
call qword ptr [7FF9ABAE3840]
int 3
M01_L06:
mov ecx,1B
mov edx,4
call qword ptr [7FF9ABAE3840]
int 3
; Total bytes of code 348 Compare Jit Disasm; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny()
push rsi
sub rsp,20
lea rsi,[rcx+38]
mov rdx,[rcx+10]
mov eax,0FFFFFFFF
mov rcx,[rsi]
test rcx,rcx
je short M00_L00
mov r8d,[rsi+0C]
test r8d,r8d
je short M00_L01
dec r8d
cmp r8d,7
jb short M00_L02
mov r8d,[rsi+8]
inc r8d
mov r9d,7
cmp [rcx],ecx
call qword ptr [7FFCF2F45660]; System.String.IndexOfAny(Char[], Int32, Int32)
cmp eax,0FFFFFFFF
je short M00_L00
sub eax,[rsi+8]
M00_L00:
add rsp,20
pop rsi
ret
M00_L01:
mov ecx,4
call qword ptr [7FFCF38B7018]
int 3
M00_L02:
mov ecx,5
call qword ptr [7FFCF38B7018]
int 3
; Total bytes of code 103 ; System.String.IndexOfAny(Char[], Int32, Int32)
push rdi
push rsi
push rbx
sub rsp,50
mov esi,r8d
M01_L00:
test rdx,rdx
je near ptr M01_L10
cmp [rcx+8],esi
jb near ptr M01_L11
mov r8d,[rcx+8]
sub r8d,esi
cmp r8d,r9d
jb near ptr M01_L12
movsxd r8,esi
lea rcx,[rcx+r8*2+0C]
lea r8,[rdx+10]
mov edx,[rdx+8]
mov eax,r9d
mov r9d,edx
cmp r9d,5
ja near ptr M01_L07
mov edx,r9d
lea r9,[7FFCF2F85E98]
mov r9d,[r9+rdx*4]
lea r10,[M01_L00]
add r9,r10
jmp r9
mov eax,0FFFFFFFF
jmp near ptr M01_L08
movsx rdx,word ptr [r8]
movsx rdx,dx
mov [rsp+4C],edx
movzx edi,word ptr [rsp+4C]
lea edx,[rdi-1]
cmp edx,0FE
jae short M01_L01
movsx rdx,di
mov r8d,eax
call qword ptr [7FFCF34E58E8]
jmp short M01_L02
M01_L01:
mov edx,[rsp+4C]
mov r8d,eax
call qword ptr [7FFCF387DB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
M01_L02:
jmp near ptr M01_L08
movsx rdx,word ptr [r8]
movsx r8,word ptr [r8+2]
mov r9d,eax
movsx rdx,dx
mov [rsp+48],edx
movsx r8,r8w
mov [rsp+44],r8d
movzx edi,word ptr [rsp+48]
lea r8d,[rdi-1]
cmp r8d,0FE
jae short M01_L03
movzx ebx,word ptr [rsp+44]
lea r8d,[rbx-1]
cmp r8d,0FE
jae short M01_L03
mov edx,edi
movsx r8,bx
movsx rdx,dx
call qword ptr [7FFCF36B5E28]; System.PackedSpanHelpers.IndexOfAny[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32)
jmp short M01_L04
M01_L03:
mov edx,[rsp+48]
mov r8d,[rsp+44]
call qword ptr [7FFCF38F3ED0]
M01_L04:
jmp near ptr M01_L08
movsx r9,word ptr [r8]
movsx rdx,word ptr [r8+2]
movsx r8,word ptr [r8+4]
movsx r9,r9w
mov [rsp+40],r9d
movsx r9,dx
mov [rsp+3C],r9d
movsx r9,r8w
mov [rsp+38],r9d
movzx edi,word ptr [rsp+40]
lea r9d,[rdi-1]
cmp r9d,0FE
jae short M01_L05
movzx ebx,word ptr [rsp+3C]
lea r9d,[rbx-1]
cmp r9d,0FE
jae short M01_L05
movzx r9d,word ptr [rsp+38]
lea edx,[r9-1]
cmp edx,0FE
jae short M01_L05
mov edx,edi
mov r8d,ebx
mov [rsp+20],eax
movsx r9,r9w
movsx rdx,dx
movsx r8,r8w
call qword ptr [7FFCF3775B28]
jmp short M01_L06
M01_L05:
mov [rsp+20],eax
mov edx,[rsp+40]
mov r8d,[rsp+3C]
mov r9d,[rsp+38]
call qword ptr [7FFCF38F5E40]
M01_L06:
jmp short M01_L08
movsx rdx,word ptr [r8]
movsx r9,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r8,word ptr [r8+6]
mov [rsp+20],r8d
mov [rsp+28],eax
mov r8d,r9d
mov r9d,r10d
call qword ptr [7FFCF38F7618]
jmp short M01_L08
movsx rdx,word ptr [r8]
movsx r9,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r11,word ptr [r8+6]
movsx r8,word ptr [r8+8]
mov [rsp+20],r11d
mov [rsp+28],r8d
mov [rsp+30],eax
mov r8d,r9d
mov r9d,r10d
call qword ptr [7FFCF38F7DF8]
jmp short M01_L08
M01_L07:
mov edx,eax
call qword ptr [7FFCF38F9708]
M01_L08:
test eax,eax
jge short M01_L09
add rsp,50
pop rbx
pop rsi
pop rdi
ret
M01_L09:
add eax,esi
add rsp,50
pop rbx
pop rsi
pop rdi
ret
M01_L10:
mov ecx,60
call qword ptr [7FFCF3463378]
int 3
M01_L11:
mov ecx,8
xor edx,edx
call qword ptr [7FFCF34633C0]
int 3
M01_L12:
mov ecx,1B
mov edx,4
call qword ptr [7FFCF34633C0]
int 3
; Total bytes of code 593 Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOf
Description of detection logic
; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
vzeroupper
cmp r8d,8
jge near ptr M01_L06
xor r9d,r9d
cmp r8d,4
jl short M01_L00
add r8d,0FFFFFFFC
movsx rax,word ptr [rcx+r9*2]
movsx r10,dx
cmp eax,r10d
je short M01_L05
nop dword ptr [rax]
movsx rax,word ptr [rcx+r9*2+2]
cmp eax,r10d
je short M01_L04
movsx rax,word ptr [rcx+r9*2+4]
cmp eax,r10d
je short M01_L03
movsx rax,word ptr [rcx+r9*2+6]
cmp eax,r10d
je short M01_L02
add r9,4
M01_L00:
test r8d,r8d
jle near ptr M01_L13
movsx r10,dx
xchg ax,ax
M01_L01:
dec r8d
movsx rax,word ptr [rcx+r9*2]
cmp eax,r10d
je short M01_L05
inc r9
test r8d,r8d
jg short M01_L01
jmp near ptr M01_L13
M01_L02:
lea eax,[r9+3]
jmp near ptr M01_L12
M01_L03:
lea eax,[r9+2]
jmp near ptr M01_L12
M01_L04:
lea eax,[r9+1]
jmp near ptr M01_L12
M01_L05:
mov eax,r9d
jmp near ptr M01_L12
M01_L06:
cmp r8d,10
jl near ptr M01_L09
movsx r10,dx
vmovd xmm0,r10d
vpbroadcastw ymm0,xmm0
mov rax,rcx
lea edx,[r8-10]
movsxd r10,edx
lea r9,[rax+r10*2]
M01_L07:
vpcmpeqw ymm1,ymm0,[rax]
vptest ymm1,ymm1
jne short M01_L08
add rax,20
cmp rax,r9
jbe short M01_L07
mov eax,r8d
test al,0F
je near ptr M01_L13
vpcmpeqw ymm1,ymm0,[r9]
vptest ymm1,ymm1
je near ptr M01_L13
sub r9,rcx
mov rax,r9
shr rax,3F
add rax,r9
sar rax,1
vmovupd ymm0,[7FFC51DA2820]
vpshufb ymm1,ymm1,ymm0
vpermq ymm0,ymm1,0D8
vpmovmskb ecx,xmm0
xor r8d,r8d
tzcnt r8d,ecx
add eax,r8d
jmp near ptr M01_L12
nop word ptr [rax+rax]
M01_L08:
sub rax,rcx
mov rcx,rax
shr rcx,3F
add rax,rcx
sar rax,1
vmovupd ymm0,[7FFC51DA2820]
vpshufb ymm0,ymm1,ymm0
vpermq ymm0,ymm0,0D8
vpmovmskb edx,xmm0
tzcnt edx,edx
add eax,edx
jmp near ptr M01_L12
M01_L09:
movsx r10,dx
vmovd xmm0,r10d
vpbroadcastw xmm0,xmm0
mov rax,rcx
lea edx,[r8-8]
movsxd r10,edx
lea rdx,[rax+r10*2]
M01_L10:
vpcmpeqw xmm1,xmm0,[rax]
vptest xmm1,xmm1
jne short M01_L11
add rax,10
cmp rax,rdx
jbe short M01_L10
mov eax,r8d
test al,7
je short M01_L13
vpcmpeqw xmm1,xmm0,[rdx]
vptest xmm1,xmm1
je short M01_L13
sub rdx,rcx
mov rax,rdx
shr rax,3F
add rax,rdx
sar rax,1
vpshufb xmm1,xmm1,[7FFC51DA2820]
vpmovmskb ecx,xmm1
xor r8d,r8d
tzcnt r8d,ecx
add eax,r8d
jmp short M01_L12
M01_L11:
sub rax,rcx
mov rcx,rax
shr rcx,3F
add rax,rcx
sar rax,1
vpshufb xmm0,xmm1,[7FFC51DA2820]
vpmovmskb edx,xmm0
tzcnt edx,edx
add eax,edx
M01_L12:
vzeroupper
ret
M01_L13:
mov eax,0FFFFFFFF
vzeroupper
ret
; Total bytes of code 512 Compare Jit Disasm; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOf()
sub rsp,28
add rcx,38
mov eax,0FFFFFFFF
mov rdx,[rcx]
test rdx,rdx
je short M00_L00
mov r8d,[rcx+0C]
test r8d,r8d
je short M00_L01
lea eax,[r8-1]
cmp eax,7
jb short M00_L02
cmp r8d,8
jb short M00_L03
mov ecx,[rcx+8]
inc ecx
mov r8d,[rdx+8]
mov eax,ecx
add rax,7
cmp r8,rax
jb short M00_L04
mov ecx,ecx
lea rcx,[rdx+rcx*2+0C]
mov edx,20
mov r8d,7
call qword ptr [7FF9AB9458E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
test eax,eax
jl short M00_L00
inc eax
M00_L00:
add rsp,28
ret
M00_L01:
mov ecx,4
call qword ptr [7FF9ABD17018]
int 3
M00_L02:
mov ecx,5
call qword ptr [7FF9ABD17018]
int 3
M00_L03:
mov edx,1
mov r8d,7
mov r9d,4
call qword ptr [7FF9ABB1BF60]
int 3
M00_L04:
mov ecx,21
call qword ptr [7FF9AB8C33A8]
int 3
; Total bytes of code 160 ; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
vzeroupper
cmp r8d,8
jge near ptr M01_L07
xor r9d,r9d
cmp r8d,4
jl short M01_L04
add r8d,0FFFFFFFC
movsx rax,word ptr [rcx]
movsx r10,dx
cmp eax,r10d
jne short M01_L00
xor eax,eax
vzeroupper
ret
M01_L00:
movsx rax,word ptr [rcx+2]
cmp eax,r10d
jne short M01_L01
mov eax,1
vzeroupper
ret
M01_L01:
movsx rax,word ptr [rcx+4]
cmp eax,r10d
jne short M01_L02
mov eax,2
vzeroupper
ret
M01_L02:
movsx r9,word ptr [rcx+6]
cmp r9d,r10d
jne short M01_L03
mov eax,3
jmp near ptr M01_L19
nop word ptr [rax+rax]
M01_L03:
mov r9d,4
M01_L04:
test r8d,r8d
jle near ptr M01_L18
movsx r10,dx
M01_L05:
dec r8d
movsx rax,word ptr [rcx+r9*2]
cmp eax,r10d
je short M01_L06
inc r9
test r8d,r8d
jg short M01_L05
jmp near ptr M01_L18
nop dword ptr [rax]
M01_L06:
mov eax,r9d
jmp near ptr M01_L19
M01_L07:
mov rax,rcx
cmp r8d,10
jle near ptr M01_L14
movzx edx,dl
vmovd xmm0,edx
vpbroadcastb ymm0,xmm0
cmp r8d,20
jle short M01_L09
lea r10d,[r8-20]
movsxd r9,r10d
lea rdx,[rax+r9*2]
M01_L08:
vmovdqu ymm1,ymmword ptr [rax]
vpackuswb ymm1,ymm1,[rax+20]
vpcmpeqb ymm1,ymm0,ymm1
vptest ymm1,ymm1
jne short M01_L10
add rax,40
cmp rax,rdx
jb short M01_L08
M01_L09:
add r8d,0FFFFFFF0
movsxd rdx,r8d
lea rdx,[rcx+rdx*2]
cmp rax,rdx
ja short M01_L11
mov r8,rax
jmp short M01_L12
M01_L10:
vpmovmskb edx,ymm1
sub rax,rcx
mov r8,rax
shr r8,3F
add rax,r8
sar rax,1
mov ecx,edx
and ecx,0FF0000FF
and edx,0FFFF00
bswap edx
or edx,ecx
tzcnt edx,edx
add eax,edx
jmp near ptr M01_L19
M01_L11:
mov r8,rdx
M01_L12:
vmovdqu ymm1,ymmword ptr [r8]
vpackuswb ymm1,ymm1,[rdx]
vpcmpeqb ymm0,ymm0,ymm1
vptest ymm0,ymm0
je near ptr M01_L18
vpmovmskb eax,ymm0
mov r9d,eax
and r9d,0FF0000FF
and eax,0FFFF00
bswap eax
or eax,r9d
tzcnt eax,eax
cmp eax,10
jl short M01_L13
mov r8,rdx
add eax,0FFFFFFF0
M01_L13:
sub r8,rcx
mov rcx,r8
shr rcx,3F
add rcx,r8
sar rcx,1
add eax,ecx
jmp short M01_L19
M01_L14:
movzx edx,dl
vmovd xmm0,edx
vpbroadcastb xmm0,xmm0
add r8d,0FFFFFFF8
movsxd rdx,r8d
lea rax,[rax+rdx*2]
cmp rcx,rax
ja short M01_L15
mov rdx,rcx
jmp short M01_L16
M01_L15:
mov rdx,rax
M01_L16:
vmovdqu xmm1,xmmword ptr [rdx]
vpackuswb xmm1,xmm1,[rax]
vpcmpeqb xmm0,xmm0,xmm1
vptest xmm0,xmm0
je short M01_L18
vpmovmskb r8d,xmm0
tzcnt r8d,r8d
cmp r8d,8
jl short M01_L17
mov rdx,rax
add r8d,0FFFFFFF8
M01_L17:
sub rdx,rcx
mov rax,rdx
shr rax,3F
add rax,rdx
sar rax,1
add eax,r8d
jmp short M01_L19
M01_L18:
mov eax,0FFFFFFFF
M01_L19:
vzeroupper
ret
; Total bytes of code 500 DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Collections.ContainsTrue<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsTrue<Int32>*' PayloadsHistogramSystem.Collections.ContainsTrue<Int32>.ICollection(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in PerfLabTests.CastingPerf
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'PerfLabTests.CastingPerf*' PayloadsHistogramPerfLabTests.CastingPerf.FooObjIsFoo
Description of detection logic
; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
push rdi
push rsi
sub rsp,28
test rdx,rdx
je near ptr M01_L03
mov rax,[rdx]
cmp rax,rcx
je near ptr M01_L03
mov r8,16BB2400D10
mov r8,[r8]
add r8,10
rorx r9,rax,20
xor r9,rcx
mov r10,9E3779B97F4A7C15
imul r9,r10
mov r10d,[r8]
shrx r9,r9,r10
xor r10d,r10d
M01_L00:
lea r11d,[r9+1]
movsxd r11,r11d
lea r11,[r11+r11*2]
lea r11,[r8+r11*8]
mov esi,[r11]
mov rdi,[r11+8]
and esi,0FFFFFFFE
cmp rdi,rax
jne short M01_L01
mov rdi,[r11+10]
xor rdi,rcx
cmp rdi,1
jbe short M01_L02
M01_L01:
test esi,esi
je short M01_L04
inc r10d
add r9d,r10d
and r9d,[r8+4]
cmp r10d,8
jl short M01_L00
jmp short M01_L04
M01_L02:
cmp esi,[r11]
jne short M01_L04
mov eax,edi
cmp eax,1
jne short M01_L04
M01_L03:
mov rax,rdx
add rsp,28
pop rsi
pop rdi
ret
M01_L04:
call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
nop
add rsp,28
pop rsi
pop rdi
ret
; Total bytes of code 178 Compare Jit Disasm; PerfLabTests.CastingPerf.FooObjIsFoo()
push rdi
push rsi
push rbp
push rbx
sub rsp,28
xor esi,esi
mov edi,[7FFCED872948]
test edi,edi
jle short M00_L02
mov rcx,1DAA8C06298
mov rbx,[rcx]
mov rbp,1DAA8C062A8
M00_L00:
mov rdx,rbx
mov rax,rdx
test rax,rax
je short M00_L01
mov rcx,offset MT_PerfLabTests.Foo[]
cmp [rax],rcx
je short M00_L01
call qword ptr [7FFCED0AD858]; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
M00_L01:
mov rcx,rbp
mov rdx,rax
call CORINFO_HELP_ASSIGN_REF
inc esi
cmp esi,edi
jl short M00_L00
M00_L02:
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
ret
; Total bytes of code 101 ; System.Runtime.CompilerServices.CastHelpers.ChkCastAny(Void*, System.Object)
push rdi
push rsi
sub rsp,28
test rdx,rdx
je near ptr M01_L03
mov rax,[rdx]
cmp rax,rcx
je near ptr M01_L03
mov r8,1DAA8C00D00
mov r8,[r8]
cmp [r8],r8b
add r8,10
rorx r9,rax,20
xor r9,rcx
mov r10,9E3779B97F4A7C15
imul r9,r10
mov r10d,[r8]
shrx r9,r9,r10
xor r10d,r10d
M01_L00:
lea r11d,[r9+1]
movsxd r11,r11d
lea r11,[r11+r11*2]
lea r11,[r8+r11*8]
mov esi,[r11]
mov rdi,[r11+8]
and esi,0FFFFFFFE
cmp rdi,rax
jne short M01_L01
mov rdi,[r11+10]
xor rdi,rcx
cmp rdi,1
jbe short M01_L02
M01_L01:
test esi,esi
je short M01_L04
inc r10d
add r9d,r10d
and r9d,[r8+4]
cmp r10d,8
jl short M01_L00
jmp short M01_L04
M01_L02:
cmp esi,[r11]
jne short M01_L04
mov eax,edi
cmp eax,1
jne short M01_L04
M01_L03:
mov rax,rdx
add rsp,28
pop rsi
pop rdi
ret
M01_L04:
call System.Runtime.CompilerServices.CastHelpers.ChkCastAny_NoCacheLookup(Void*, System.Object)
nop
add rsp,28
pop rsi
pop rdi
ret
; Total bytes of code 181 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.CreateAddAndClear<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.CreateAddAndClear<Int32>*' PayloadsHistogramSystem.Collections.CreateAddAndClear<Int32>.ICollection(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt64>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt64>*' PayloadsHistogramSystem.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt64>.GetHashCodeBenchmark
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.IterateForEach<String>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach<String>*' PayloadsHistogramSystem.Collections.IterateForEach<String>.IEnumerable(Size: 512)
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Collections.AddGivenSize<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.AddGivenSize<Int32>*' PayloadsHistogramSystem.Collections.AddGivenSize<Int32>.ICollection(Size: 512)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository |
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak Issue DetailsRun Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*' PayloadsHistogramSystem.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Tests.Perf_String
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*' PayloadsHistogramSystem.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3A3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A6B438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFCA5715510]
nop
add rsp,28
ret
; Total bytes of code 74 Compare Jit Disasm; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14 ; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFEA4995510]
nop
add rsp,28
ret
; Total bytes of code 74 System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3D3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00AAB438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push rdi
push rsi
push rbx
sub rsp,58
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
mov [rbp+30],rax
mov rax,0C6A9C64BB2F3
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L15
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L15
test rbx,rbx
jne short M01_L00
mov rbx,7FFCE0EC0008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+28],rdx
mov dword ptr [rbp+30],80
xor edx,edx
mov [rbp+18],rdx
mov [rbp+20],edx
cmp r14d,1
jne near ptr M01_L06
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
call qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
test eax,eax
jl near ptr M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L04
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L05
M01_L04:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L05:
inc r15d
jmp short M01_L03
M01_L06:
xor r15d,r15d
M01_L07:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFCE12D1408]
test eax,eax
jl short M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L08
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L09
M01_L08:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L09:
add r15d,r14d
jmp short M01_L07
M01_L10:
cmp dword ptr [rbp+20],0
jne short M01_L12
mov rax,rsi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L11
call CORINFO_HELP_FAIL_FAST
M01_L11:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L12:
mov edx,r14d
mov ecx,[rbp+20]
cmp ecx,[rbp+30]
ja near ptr M01_L16
mov r8,[rbp+28]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+18]
test rsi,rsi
je short M01_L13
xor ecx,ecx
mov [rbp+18],rcx
mov rcx,7FFCE0D84D68
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,1A6AE807CD0
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L13:
mov rax,rdi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L14
call CORINFO_HELP_FAIL_FAST
M01_L14:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L15:
mov ecx,16A1
mov rdx,7FFCE0C64000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFCE0E2DC78]
int 3
M01_L16:
call qword ptr [7FFCE15734E0]
int 3
; Total bytes of code 610 Compare Jit Disasm; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)
mov rcx,rdx
mov rdx,r8
mov r8,r9
cmp [rcx],ecx
jmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String)
; Total bytes of code 17 ; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push r12
push rdi
push rsi
push rbx
sub rsp,60
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
vmovdqa xmmword ptr [rbp+30],xmm4
mov rax,23C2D26E54EC
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L17
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L17
test rbx,rbx
jne short M01_L00
mov rbx,7FFEA4A50008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+30],rdx
mov dword ptr [rbp+38],80
xor edx,edx
mov [rbp+20],rdx
mov [rbp+28],edx
cmp r14d,1
jne near ptr M01_L08
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rdx,r15d
lea rcx,[rsi+rdx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
mov [rbp+1C],edx
movzx edx,word ptr [rbp+1C]
dec edx
cmp edx,0FE
jae short M01_L04
movzx edx,word ptr [rbp+1C]
movsx rdx,dx
call qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
jmp short M01_L05
M01_L04:
mov edx,[rbp+1C]
call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
M01_L05:
test r12d,r12d
jl near ptr M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L06
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L07
M01_L06:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L07:
lea r15d,[r15+r12+1]
jmp short M01_L03
M01_L08:
xor r15d,r15d
M01_L09:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFEA4E61408]
mov r12d,eax
test r12d,r12d
jl short M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L10
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L11
M01_L10:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L11:
add r15d,r12d
add r15d,r14d
jmp short M01_L09
M01_L12:
cmp dword ptr [rbp+28],0
jne short M01_L14
mov rax,rsi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L13
call CORINFO_HELP_FAIL_FAST
M01_L13:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L14:
mov edx,r14d
mov ecx,[rbp+28]
cmp ecx,[rbp+38]
ja near ptr M01_L18
mov r8,[rbp+30]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+20]
test rsi,rsi
je short M01_L15
xor ecx,ecx
mov [rbp+20],rcx
mov rcx,7FFEA4914DB8
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,22F6A407CD8
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L15:
mov rax,rdi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L16
call CORINFO_HELP_FAIL_FAST
M01_L16:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L17:
mov ecx,16A1
mov rdx,7FFEA47F4000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFEA49BDC78]
int 3
M01_L18:
call qword ptr [7FFEA4ED3060]
int 3
; Total bytes of code 667 System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Memory.Span<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Int32>*' PayloadsHistogramSystem.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
|
Tagging subscribers to this area: @dotnet/area-system-runtime Issue DetailsRun Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*' PayloadsHistogramSystem.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Tests.Perf_String
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*' PayloadsHistogramSystem.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3A3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A6B438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFCA5715510]
nop
add rsp,28
ret
; Total bytes of code 74 Compare Jit Disasm; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14 ; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFEA4995510]
nop
add rsp,28
ret
; Total bytes of code 74 System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3D3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00AAB438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push rdi
push rsi
push rbx
sub rsp,58
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
mov [rbp+30],rax
mov rax,0C6A9C64BB2F3
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L15
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L15
test rbx,rbx
jne short M01_L00
mov rbx,7FFCE0EC0008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+28],rdx
mov dword ptr [rbp+30],80
xor edx,edx
mov [rbp+18],rdx
mov [rbp+20],edx
cmp r14d,1
jne near ptr M01_L06
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
call qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
test eax,eax
jl near ptr M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L04
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L05
M01_L04:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L05:
inc r15d
jmp short M01_L03
M01_L06:
xor r15d,r15d
M01_L07:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFCE12D1408]
test eax,eax
jl short M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L08
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L09
M01_L08:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L09:
add r15d,r14d
jmp short M01_L07
M01_L10:
cmp dword ptr [rbp+20],0
jne short M01_L12
mov rax,rsi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L11
call CORINFO_HELP_FAIL_FAST
M01_L11:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L12:
mov edx,r14d
mov ecx,[rbp+20]
cmp ecx,[rbp+30]
ja near ptr M01_L16
mov r8,[rbp+28]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+18]
test rsi,rsi
je short M01_L13
xor ecx,ecx
mov [rbp+18],rcx
mov rcx,7FFCE0D84D68
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,1A6AE807CD0
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L13:
mov rax,rdi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L14
call CORINFO_HELP_FAIL_FAST
M01_L14:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L15:
mov ecx,16A1
mov rdx,7FFCE0C64000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFCE0E2DC78]
int 3
M01_L16:
call qword ptr [7FFCE15734E0]
int 3
; Total bytes of code 610 Compare Jit Disasm; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)
mov rcx,rdx
mov rdx,r8
mov r8,r9
cmp [rcx],ecx
jmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String)
; Total bytes of code 17 ; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push r12
push rdi
push rsi
push rbx
sub rsp,60
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
vmovdqa xmmword ptr [rbp+30],xmm4
mov rax,23C2D26E54EC
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L17
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L17
test rbx,rbx
jne short M01_L00
mov rbx,7FFEA4A50008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+30],rdx
mov dword ptr [rbp+38],80
xor edx,edx
mov [rbp+20],rdx
mov [rbp+28],edx
cmp r14d,1
jne near ptr M01_L08
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rdx,r15d
lea rcx,[rsi+rdx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
mov [rbp+1C],edx
movzx edx,word ptr [rbp+1C]
dec edx
cmp edx,0FE
jae short M01_L04
movzx edx,word ptr [rbp+1C]
movsx rdx,dx
call qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
jmp short M01_L05
M01_L04:
mov edx,[rbp+1C]
call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
M01_L05:
test r12d,r12d
jl near ptr M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L06
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L07
M01_L06:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L07:
lea r15d,[r15+r12+1]
jmp short M01_L03
M01_L08:
xor r15d,r15d
M01_L09:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFEA4E61408]
mov r12d,eax
test r12d,r12d
jl short M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L10
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L11
M01_L10:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L11:
add r15d,r12d
add r15d,r14d
jmp short M01_L09
M01_L12:
cmp dword ptr [rbp+28],0
jne short M01_L14
mov rax,rsi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L13
call CORINFO_HELP_FAIL_FAST
M01_L13:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L14:
mov edx,r14d
mov ecx,[rbp+28]
cmp ecx,[rbp+38]
ja near ptr M01_L18
mov r8,[rbp+30]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+20]
test rsi,rsi
je short M01_L15
xor ecx,ecx
mov [rbp+20],rcx
mov rcx,7FFEA4914DB8
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,22F6A407CD8
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L15:
mov rax,rdi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L16
call CORINFO_HELP_FAIL_FAST
M01_L16:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L17:
mov ecx,16A1
mov rdx,7FFEA47F4000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFEA49BDC78]
int 3
M01_L18:
call qword ptr [7FFEA4ED3060]
int 3
; Total bytes of code 667 System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Memory.Span<Int32>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Int32>*' PayloadsHistogramSystem.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
|
cc @MihaZupan looks like regressed by #78861 |
Same on Linux-x64: dotnet/perf-autofiling-issues#11424 |
I'll take a look |
@EgorBo these ones look like they are unrelated to IndexOf changes (don't want them to slip by)
|
The benchmarks I believe are likely related to the Run Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig*' PayloadsHistogramSystem.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository
Regressions in System.Tests.Perf_String
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*' PayloadsHistogramSystem.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3A3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0FFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002F50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008958E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C2FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A6B438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007E1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFCA5715528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFCA5715510]
nop
add rsp,28
ret
; Total bytes of code 74 Compare Jit Disasm; System.Tests.Perf_String.TrimEnd_CharArr(System.String, Char[])
mov rcx,rdx
mov rdx,r8
cmp [rcx],ecx
jmp qword ptr [7FFEA49954F8]; System.String.TrimEnd(Char[])
; Total bytes of code 14 ; System.String.TrimEnd(Char[])
sub rsp,28
xor eax,eax
mov [rsp+20],rax
test rdx,rdx
je short M01_L00
mov r8d,[rdx+8]
test r8d,r8d
je short M01_L00
add rdx,10
mov [rsp+20],rdx
mov rdx,[rsp+20]
mov r9d,2
call qword ptr [7FFEA4995528]; System.String.TrimHelper(Char*, Int32, System.Text.TrimType)
nop
add rsp,28
ret
M01_L00:
mov edx,2
call qword ptr [7FFEA4995510]
nop
add rsp,28
ret
; Total bytes of code 74 System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1F16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA3D3000]
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA12FFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB003350C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008D58E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C6FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00AAB438]
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB00821888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push rdi
push rsi
push rbx
sub rsp,58
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
mov [rbp+30],rax
mov rax,0C6A9C64BB2F3
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L15
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L15
test rbx,rbx
jne short M01_L00
mov rbx,7FFCE0EC0008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+28],rdx
mov dword ptr [rbp+30],80
xor edx,edx
mov [rbp+18],rdx
mov [rbp+20],edx
cmp r14d,1
jne near ptr M01_L06
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFCE0E250C0]; System.String.Replace(Char, Char)
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
call qword ptr [7FFCE13C16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
test eax,eax
jl near ptr M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L04
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L05
M01_L04:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L05:
inc r15d
jmp short M01_L03
M01_L06:
xor r15d,r15d
M01_L07:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFCE12D1408]
test eax,eax
jl short M01_L10
add r15d,eax
mov edx,r15d
mov ecx,[rbp+20]
mov rax,[rbp+28]
mov r8d,[rbp+30]
cmp ecx,r8d
jae short M01_L08
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+20],ecx
jmp short M01_L09
M01_L08:
lea rcx,[rbp+18]
call qword ptr [7FFCE17ABC30]
M01_L09:
add r15d,r14d
jmp short M01_L07
M01_L10:
cmp dword ptr [rbp+20],0
jne short M01_L12
mov rax,rsi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L11
call CORINFO_HELP_FAIL_FAST
M01_L11:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L12:
mov edx,r14d
mov ecx,[rbp+20]
cmp ecx,[rbp+30]
ja near ptr M01_L16
mov r8,[rbp+28]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFCE0E250F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+18]
test rsi,rsi
je short M01_L13
xor ecx,ecx
mov [rbp+18],rcx
mov rcx,7FFCE0D84D68
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,1A6AE807CD0
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFCE1799680]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L13:
mov rax,rdi
mov rcx,0C6A9C64BB2F3
cmp [rbp],rcx
je short M01_L14
call CORINFO_HELP_FAIL_FAST
M01_L14:
nop
lea rsp,[rbp+38]
pop rbx
pop rsi
pop rdi
pop r14
pop r15
pop rbp
ret
M01_L15:
mov ecx,16A1
mov rdx,7FFCE0C64000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFCE0E2DC78]
int 3
M01_L16:
call qword ptr [7FFCE15734E0]
int 3
; Total bytes of code 610 Compare Jit Disasm; System.Tests.Perf_String.Replace_String(System.String, System.String, System.String)
mov rcx,rdx
mov rdx,r8
mov r8,r9
cmp [rcx],ecx
jmp qword ptr [7FFEA49B50D8]; System.String.Replace(System.String, System.String)
; Total bytes of code 17 ; System.String.Replace(System.String, System.String)
push rbp
push r15
push r14
push r12
push rdi
push rsi
push rbx
sub rsp,60
lea rbp,[rsp+20]
xor eax,eax
mov [rbp+8],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rbp+10],xmm4
vmovdqa xmmword ptr [rbp+20],xmm4
vmovdqa xmmword ptr [rbp+30],xmm4
mov rax,23C2D26E54EC
mov [rbp],rax
mov rsi,rcx
mov rdi,rdx
mov rbx,r8
test rdi,rdi
je near ptr M01_L17
mov r14d,[rdi+8]
test r14d,r14d
je near ptr M01_L17
test rbx,rbx
jne short M01_L00
mov rbx,7FFEA4A50008
M01_L00:
test [rsp],esp
sub rsp,200
lea rdx,[rsp+20]
mov [rbp+30],rdx
mov dword ptr [rbp+38],80
xor edx,edx
mov [rbp+20],rdx
mov [rbp+28],edx
cmp r14d,1
jne near ptr M01_L08
cmp dword ptr [rbx+8],1
jne short M01_L02
movzx edx,word ptr [rdi+0C]
movzx r8d,word ptr [rbx+0C]
mov rcx,rsi
call qword ptr [7FFEA49B50C0]; System.String.Replace(Char, Char)
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L01
call CORINFO_HELP_FAIL_FAST
M01_L01:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L02:
movzx edi,word ptr [rdi+0C]
xor r15d,r15d
M01_L03:
movsxd rdx,r15d
lea rcx,[rsi+rdx*2+0C]
mov r8d,[rsi+8]
sub r8d,r15d
movsx rdx,di
mov [rbp+1C],edx
movzx edx,word ptr [rbp+1C]
dec edx
cmp edx,0FE
jae short M01_L04
movzx edx,word ptr [rbp+1C]
movsx rdx,dx
call qword ptr [7FFEA4F558E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
jmp short M01_L05
M01_L04:
mov edx,[rbp+1C]
call qword ptr [7FFEA52EFB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov r12d,eax
M01_L05:
test r12d,r12d
jl near ptr M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L06
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L07
M01_L06:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L07:
lea r15d,[r15+r12+1]
jmp short M01_L03
M01_L08:
xor r15d,r15d
M01_L09:
movsxd rcx,r15d
lea rcx,[rsi+rcx*2+0C]
mov edx,[rsi+8]
sub edx,r15d
lea r8,[rdi+0C]
mov r9d,r14d
call qword ptr [7FFEA4E61408]
mov r12d,eax
test r12d,r12d
jl short M01_L12
lea edx,[r15+r12]
mov ecx,[rbp+28]
mov rax,[rbp+30]
mov r8d,[rbp+38]
cmp ecx,r8d
jae short M01_L10
mov r8d,ecx
mov [rax+r8*4],edx
inc ecx
mov [rbp+28],ecx
jmp short M01_L11
M01_L10:
lea rcx,[rbp+20]
call qword ptr [7FFEA532DC48]
M01_L11:
add r15d,r12d
add r15d,r14d
jmp short M01_L09
M01_L12:
cmp dword ptr [rbp+28],0
jne short M01_L14
mov rax,rsi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L13
call CORINFO_HELP_FAIL_FAST
M01_L13:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L14:
mov edx,r14d
mov ecx,[rbp+28]
cmp ecx,[rbp+38]
ja near ptr M01_L18
mov r8,[rbp+30]
mov [rbp+8],r8
mov [rbp+10],ecx
mov rcx,rsi
mov r8,rbx
lea r9,[rbp+8]
call qword ptr [7FFEA49B50F0]; System.String.ReplaceHelper(Int32, System.String, System.ReadOnlySpan`1<Int32>)
mov rdi,rax
mov rsi,[rbp+20]
test rsi,rsi
je short M01_L15
xor ecx,ecx
mov [rbp+20],rcx
mov rcx,7FFEA4914DB8
mov edx,31
call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
mov rcx,22F6A407CD8
mov rcx,[rcx]
mov rdx,rsi
xor r8d,r8d
cmp [rcx],ecx
call qword ptr [7FFEA5335560]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Int32, System.Private.CoreLib]].Return(Int32[], Boolean)
M01_L15:
mov rax,rdi
mov rcx,23C2D26E54EC
cmp [rbp],rcx
je short M01_L16
call CORINFO_HELP_FAIL_FAST
M01_L16:
nop
lea rsp,[rbp+40]
pop rbx
pop rsi
pop rdi
pop r12
pop r14
pop r15
pop rbp
ret
M01_L17:
mov ecx,16A1
mov rdx,7FFEA47F4000
call CORINFO_HELP_STRCNS
mov rdx,rax
mov rcx,rdi
call qword ptr [7FFEA49BDC78]
int 3
M01_L18:
call qword ptr [7FFEA4ED3060]
int 3
; Total bytes of code 667 System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')
Description of detection logic
; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,28
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx ecx,di
movzx r8d,bx
cmp ecx,r8d
je near ptr M01_L03
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
call qword ptr [7FFBAA1A16A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
test ebp,ebp
jge short M01_L00
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L00:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L04
M01_L01:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L02
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L02:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFBAA383000]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L03:
mov rax,rsi
add rsp,28
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L04:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFBAA0DFFA8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L01
; Total bytes of code 231 Compare Jit Disasm; System.Tests.Perf_String.Replace_Char(System.String, Char, Char)
mov rcx,rdx
mov edx,r8d
movzx r8d,r9w
movzx edx,dx
cmp [rcx],ecx
jmp qword ptr [7FFB002E50C0]; System.String.Replace(Char, Char)
; Total bytes of code 21 ; System.String.Replace(Char, Char)
push r15
push r14
push rdi
push rsi
push rbp
push rbx
sub rsp,38
mov rsi,rcx
mov edi,edx
mov ebx,r8d
movzx edx,di
movzx ecx,bx
cmp edx,ecx
je near ptr M01_L05
lea rcx,[rsi+0C]
mov r8d,[rsi+8]
movsx rdx,di
mov [rsp+34],edx
movzx edx,word ptr [rsp+34]
lea eax,[rdx-1]
cmp eax,0FE
jae short M01_L00
movsx rdx,dx
call qword ptr [7FFB008858E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
jmp short M01_L01
M01_L00:
mov edx,[rsp+34]
call qword ptr [7FFB00C1FB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
mov ebp,eax
M01_L01:
test ebp,ebp
jge short M01_L02
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L02:
mov ecx,[rsi+8]
sub ecx,ebp
mov r14d,ecx
mov ecx,[rsi+8]
call System.String.FastAllocateString(Int32)
mov r15,rax
test ebp,ebp
jg short M01_L06
M01_L03:
mov r8d,ebp
lea rcx,[rsi+r8*2+0C]
cmp [r15],r15b
mov r8d,ebp
lea rdx,[r15+r8*2+0C]
mov r8d,[rsi+8]
cmp r8,8
jb short M01_L04
sub r8,r14
and r8,7
lea r9,[r8+r8]
sub rcx,r9
lea r9,[r8+r8]
sub rdx,r9
add r14,r8
M01_L04:
mov [rsp+20],r14
movzx r8d,di
movzx r9d,bx
call qword ptr [7FFB00A5B438]; System.SpanHelpers.ReplaceValueType[[System.UInt16, System.Private.CoreLib]](UInt16 ByRef, UInt16 ByRef, UInt16, UInt16, UIntPtr)
mov rax,r15
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L05:
mov rax,rsi
add rsp,38
pop rbx
pop rbp
pop rsi
pop rdi
pop r14
pop r15
ret
M01_L06:
cmp [r15],r15b
lea rcx,[r15+0C]
lea rdx,[rsi+0C]
mov r8d,ebp
add r8,r8
call qword ptr [7FFB007D1888]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr)
jmp near ptr M01_L03
; Total bytes of code 266 DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Memory.Span<Byte>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Byte>*' PayloadsHistogramSystem.Memory.Span<Byte>.IndexOfAnyThreeValues(Size: 33)
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in System.Memory.Span<Char>
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span<Char>*' PayloadsHistogramSystem.Memory.Span<Char>.SequenceEqual(Size: 512)
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
Description of detection logic
DocsProfiling workflow for dotnet/runtime repository Run Information
Regressions in Microsoft.Extensions.Primitives.StringSegmentBenchmark
Reprogit clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'Microsoft.Extensions.Primitives.StringSegmentBenchmark*' PayloadsHistogramMicrosoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny
Description of detection logic
; System.String.IndexOfAny(Char[], Int32, Int32)
push rsi
sub rsp,40
mov esi,r8d
M01_L00:
test rdx,rdx
je near ptr M01_L04
mov r8d,[rcx+8]
cmp r8d,esi
jb near ptr M01_L05
sub r8d,esi
cmp r8d,r9d
jb near ptr M01_L06
movsxd r8,esi
lea rcx,[rcx+r8*2+0C]
lea r8,[rdx+10]
mov edx,[rdx+8]
mov [rsp+3C],edx
cmp edx,5
ja near ptr M01_L01
mov edx,[rsp+3C]
lea rax,[7FF9AB3D3A00]
mov eax,[rax+rdx*4]
lea r10,[M01_L00]
add rax,r10
jmp rax
mov eax,0FFFFFFFF
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
mov r8d,r9d
call qword ptr [7FF9AB9316A8]; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
movsx r8,word ptr [r8+2]
call qword ptr [7FF9ABAEB930]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32)
jmp near ptr M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
mov [rsp+20],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABBBD7E0]; System.SpanHelpers.IndexOfAnyValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int16, Int32)
jmp short M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r8,word ptr [r8+6]
mov [rsp+20],r8d
mov [rsp+28],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABD41EE8]
jmp short M01_L02
movsx rdx,word ptr [r8]
movsx rax,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r11,word ptr [r8+6]
movsx r8,word ptr [r8+8]
mov [rsp+20],r11d
mov [rsp+28],r8d
mov [rsp+30],r9d
mov r8d,eax
mov r9d,r10d
call qword ptr [7FF9ABD43720]
jmp short M01_L02
M01_L01:
mov edx,r9d
mov r9d,[rsp+3C]
call qword ptr [7FF9ABD43F90]
M01_L02:
test eax,eax
jge short M01_L03
add rsp,40
pop rsi
ret
M01_L03:
add eax,esi
add rsp,40
pop rsi
ret
M01_L04:
mov ecx,60
call qword ptr [7FF9ABAE37F8]
int 3
M01_L05:
mov ecx,8
xor edx,edx
call qword ptr [7FF9ABAE3840]
int 3
M01_L06:
mov ecx,1B
mov edx,4
call qword ptr [7FF9ABAE3840]
int 3
; Total bytes of code 348 Compare Jit Disasm; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOfAny()
push rsi
sub rsp,20
lea rsi,[rcx+38]
mov rdx,[rcx+10]
mov eax,0FFFFFFFF
mov rcx,[rsi]
test rcx,rcx
je short M00_L00
mov r8d,[rsi+0C]
test r8d,r8d
je short M00_L01
dec r8d
cmp r8d,7
jb short M00_L02
mov r8d,[rsi+8]
inc r8d
mov r9d,7
cmp [rcx],ecx
call qword ptr [7FFCF2F45660]; System.String.IndexOfAny(Char[], Int32, Int32)
cmp eax,0FFFFFFFF
je short M00_L00
sub eax,[rsi+8]
M00_L00:
add rsp,20
pop rsi
ret
M00_L01:
mov ecx,4
call qword ptr [7FFCF38B7018]
int 3
M00_L02:
mov ecx,5
call qword ptr [7FFCF38B7018]
int 3
; Total bytes of code 103 ; System.String.IndexOfAny(Char[], Int32, Int32)
push rdi
push rsi
push rbx
sub rsp,50
mov esi,r8d
M01_L00:
test rdx,rdx
je near ptr M01_L10
cmp [rcx+8],esi
jb near ptr M01_L11
mov r8d,[rcx+8]
sub r8d,esi
cmp r8d,r9d
jb near ptr M01_L12
movsxd r8,esi
lea rcx,[rcx+r8*2+0C]
lea r8,[rdx+10]
mov edx,[rdx+8]
mov eax,r9d
mov r9d,edx
cmp r9d,5
ja near ptr M01_L07
mov edx,r9d
lea r9,[7FFCF2F85E98]
mov r9d,[r9+rdx*4]
lea r10,[M01_L00]
add r9,r10
jmp r9
mov eax,0FFFFFFFF
jmp near ptr M01_L08
movsx rdx,word ptr [r8]
movsx rdx,dx
mov [rsp+4C],edx
movzx edi,word ptr [rsp+4C]
lea edx,[rdi-1]
cmp edx,0FE
jae short M01_L01
movsx rdx,di
mov r8d,eax
call qword ptr [7FFCF34E58E8]
jmp short M01_L02
M01_L01:
mov edx,[rsp+4C]
mov r8d,eax
call qword ptr [7FFCF387DB58]; System.SpanHelpers.NonPackedIndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
M01_L02:
jmp near ptr M01_L08
movsx rdx,word ptr [r8]
movsx r8,word ptr [r8+2]
mov r9d,eax
movsx rdx,dx
mov [rsp+48],edx
movsx r8,r8w
mov [rsp+44],r8d
movzx edi,word ptr [rsp+48]
lea r8d,[rdi-1]
cmp r8d,0FE
jae short M01_L03
movzx ebx,word ptr [rsp+44]
lea r8d,[rbx-1]
cmp r8d,0FE
jae short M01_L03
mov edx,edi
movsx r8,bx
movsx rdx,dx
call qword ptr [7FFCF36B5E28]; System.PackedSpanHelpers.IndexOfAny[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int16, Int32)
jmp short M01_L04
M01_L03:
mov edx,[rsp+48]
mov r8d,[rsp+44]
call qword ptr [7FFCF38F3ED0]
M01_L04:
jmp near ptr M01_L08
movsx r9,word ptr [r8]
movsx rdx,word ptr [r8+2]
movsx r8,word ptr [r8+4]
movsx r9,r9w
mov [rsp+40],r9d
movsx r9,dx
mov [rsp+3C],r9d
movsx r9,r8w
mov [rsp+38],r9d
movzx edi,word ptr [rsp+40]
lea r9d,[rdi-1]
cmp r9d,0FE
jae short M01_L05
movzx ebx,word ptr [rsp+3C]
lea r9d,[rbx-1]
cmp r9d,0FE
jae short M01_L05
movzx r9d,word ptr [rsp+38]
lea edx,[r9-1]
cmp edx,0FE
jae short M01_L05
mov edx,edi
mov r8d,ebx
mov [rsp+20],eax
movsx r9,r9w
movsx rdx,dx
movsx r8,r8w
call qword ptr [7FFCF3775B28]
jmp short M01_L06
M01_L05:
mov [rsp+20],eax
mov edx,[rsp+40]
mov r8d,[rsp+3C]
mov r9d,[rsp+38]
call qword ptr [7FFCF38F5E40]
M01_L06:
jmp short M01_L08
movsx rdx,word ptr [r8]
movsx r9,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r8,word ptr [r8+6]
mov [rsp+20],r8d
mov [rsp+28],eax
mov r8d,r9d
mov r9d,r10d
call qword ptr [7FFCF38F7618]
jmp short M01_L08
movsx rdx,word ptr [r8]
movsx r9,word ptr [r8+2]
movsx r10,word ptr [r8+4]
movsx r11,word ptr [r8+6]
movsx r8,word ptr [r8+8]
mov [rsp+20],r11d
mov [rsp+28],r8d
mov [rsp+30],eax
mov r8d,r9d
mov r9d,r10d
call qword ptr [7FFCF38F7DF8]
jmp short M01_L08
M01_L07:
mov edx,eax
call qword ptr [7FFCF38F9708]
M01_L08:
test eax,eax
jge short M01_L09
add rsp,50
pop rbx
pop rsi
pop rdi
ret
M01_L09:
add eax,esi
add rsp,50
pop rbx
pop rsi
pop rdi
ret
M01_L10:
mov ecx,60
call qword ptr [7FFCF3463378]
int 3
M01_L11:
mov ecx,8
xor edx,edx
call qword ptr [7FFCF34633C0]
int 3
M01_L12:
mov ecx,1B
mov edx,4
call qword ptr [7FFCF34633C0]
int 3
; Total bytes of code 593 Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOf
Description of detection logic
; System.SpanHelpers.IndexOfValueType[[System.Int16, System.Private.CoreLib],[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
vzeroupper
cmp r8d,8
jge near ptr M01_L06
xor r9d,r9d
cmp r8d,4
jl short M01_L00
add r8d,0FFFFFFFC
movsx rax,word ptr [rcx+r9*2]
movsx r10,dx
cmp eax,r10d
je short M01_L05
nop dword ptr [rax]
movsx rax,word ptr [rcx+r9*2+2]
cmp eax,r10d
je short M01_L04
movsx rax,word ptr [rcx+r9*2+4]
cmp eax,r10d
je short M01_L03
movsx rax,word ptr [rcx+r9*2+6]
cmp eax,r10d
je short M01_L02
add r9,4
M01_L00:
test r8d,r8d
jle near ptr M01_L13
movsx r10,dx
xchg ax,ax
M01_L01:
dec r8d
movsx rax,word ptr [rcx+r9*2]
cmp eax,r10d
je short M01_L05
inc r9
test r8d,r8d
jg short M01_L01
jmp near ptr M01_L13
M01_L02:
lea eax,[r9+3]
jmp near ptr M01_L12
M01_L03:
lea eax,[r9+2]
jmp near ptr M01_L12
M01_L04:
lea eax,[r9+1]
jmp near ptr M01_L12
M01_L05:
mov eax,r9d
jmp near ptr M01_L12
M01_L06:
cmp r8d,10
jl near ptr M01_L09
movsx r10,dx
vmovd xmm0,r10d
vpbroadcastw ymm0,xmm0
mov rax,rcx
lea edx,[r8-10]
movsxd r10,edx
lea r9,[rax+r10*2]
M01_L07:
vpcmpeqw ymm1,ymm0,[rax]
vptest ymm1,ymm1
jne short M01_L08
add rax,20
cmp rax,r9
jbe short M01_L07
mov eax,r8d
test al,0F
je near ptr M01_L13
vpcmpeqw ymm1,ymm0,[r9]
vptest ymm1,ymm1
je near ptr M01_L13
sub r9,rcx
mov rax,r9
shr rax,3F
add rax,r9
sar rax,1
vmovupd ymm0,[7FFC51DA2820]
vpshufb ymm1,ymm1,ymm0
vpermq ymm0,ymm1,0D8
vpmovmskb ecx,xmm0
xor r8d,r8d
tzcnt r8d,ecx
add eax,r8d
jmp near ptr M01_L12
nop word ptr [rax+rax]
M01_L08:
sub rax,rcx
mov rcx,rax
shr rcx,3F
add rax,rcx
sar rax,1
vmovupd ymm0,[7FFC51DA2820]
vpshufb ymm0,ymm1,ymm0
vpermq ymm0,ymm0,0D8
vpmovmskb edx,xmm0
tzcnt edx,edx
add eax,edx
jmp near ptr M01_L12
M01_L09:
movsx r10,dx
vmovd xmm0,r10d
vpbroadcastw xmm0,xmm0
mov rax,rcx
lea edx,[r8-8]
movsxd r10,edx
lea rdx,[rax+r10*2]
M01_L10:
vpcmpeqw xmm1,xmm0,[rax]
vptest xmm1,xmm1
jne short M01_L11
add rax,10
cmp rax,rdx
jbe short M01_L10
mov eax,r8d
test al,7
je short M01_L13
vpcmpeqw xmm1,xmm0,[rdx]
vptest xmm1,xmm1
je short M01_L13
sub rdx,rcx
mov rax,rdx
shr rax,3F
add rax,rdx
sar rax,1
vpshufb xmm1,xmm1,[7FFC51DA2820]
vpmovmskb ecx,xmm1
xor r8d,r8d
tzcnt r8d,ecx
add eax,r8d
jmp short M01_L12
M01_L11:
sub rax,rcx
mov rcx,rax
shr rcx,3F
add rax,rcx
sar rax,1
vpshufb xmm0,xmm1,[7FFC51DA2820]
vpmovmskb edx,xmm0
tzcnt edx,edx
add eax,edx
M01_L12:
vzeroupper
ret
M01_L13:
mov eax,0FFFFFFFF
vzeroupper
ret
; Total bytes of code 512 Compare Jit Disasm; Microsoft.Extensions.Primitives.StringSegmentBenchmark.IndexOf()
sub rsp,28
add rcx,38
mov eax,0FFFFFFFF
mov rdx,[rcx]
test rdx,rdx
je short M00_L00
mov r8d,[rcx+0C]
test r8d,r8d
je short M00_L01
lea eax,[r8-1]
cmp eax,7
jb short M00_L02
cmp r8d,8
jb short M00_L03
mov ecx,[rcx+8]
inc ecx
mov r8d,[rdx+8]
mov eax,ecx
add rax,7
cmp r8,rax
jb short M00_L04
mov ecx,ecx
lea rcx,[rdx+rcx*2+0C]
mov edx,20
mov r8d,7
call qword ptr [7FF9AB9458E8]; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
test eax,eax
jl short M00_L00
inc eax
M00_L00:
add rsp,28
ret
M00_L01:
mov ecx,4
call qword ptr [7FF9ABD17018]
int 3
M00_L02:
mov ecx,5
call qword ptr [7FF9ABD17018]
int 3
M00_L03:
mov edx,1
mov r8d,7
mov r9d,4
call qword ptr [7FF9ABB1BF60]
int 3
M00_L04:
mov ecx,21
call qword ptr [7FF9AB8C33A8]
int 3
; Total bytes of code 160 ; System.PackedSpanHelpers.IndexOf[[System.SpanHelpers+DontNegate`1[[System.Int16, System.Private.CoreLib]], System.Private.CoreLib]](Int16 ByRef, Int16, Int32)
vzeroupper
cmp r8d,8
jge near ptr M01_L07
xor r9d,r9d
cmp r8d,4
jl short M01_L04
add r8d,0FFFFFFFC
movsx rax,word ptr [rcx]
movsx r10,dx
cmp eax,r10d
jne short M01_L00
xor eax,eax
vzeroupper
ret
M01_L00:
movsx rax,word ptr [rcx+2]
cmp eax,r10d
jne short M01_L01
mov eax,1
vzeroupper
ret
M01_L01:
movsx rax,word ptr [rcx+4]
cmp eax,r10d
jne short M01_L02
mov eax,2
vzeroupper
ret
M01_L02:
movsx r9,word ptr [rcx+6]
cmp r9d,r10d
jne short M01_L03
mov eax,3
jmp near ptr M01_L19
nop word ptr [rax+rax]
M01_L03:
mov r9d,4
M01_L04:
test r8d,r8d
jle near ptr M01_L18
movsx r10,dx
M01_L05:
dec r8d
movsx rax,word ptr [rcx+r9*2]
cmp eax,r10d
je short M01_L06
inc r9
test r8d,r8d
jg short M01_L05
jmp near ptr M01_L18
nop dword ptr [rax]
M01_L06:
mov eax,r9d
jmp near ptr M01_L19
M01_L07:
mov rax,rcx
cmp r8d,10
jle near ptr M01_L14
movzx edx,dl
vmovd xmm0,edx
vpbroadcastb ymm0,xmm0
cmp r8d,20
jle short M01_L09
lea r10d,[r8-20]
movsxd r9,r10d
lea rdx,[rax+r9*2]
M01_L08:
vmovdqu ymm1,ymmword ptr [rax]
vpackuswb ymm1,ymm1,[rax+20]
vpcmpeqb ymm1,ymm0,ymm1
vptest ymm1,ymm1
jne short M01_L10
add rax,40
cmp rax,rdx
jb short M01_L08
M01_L09:
add r8d,0FFFFFFF0
movsxd rdx,r8d
lea rdx,[rcx+rdx*2]
cmp rax,rdx
ja short M01_L11
mov r8,rax
jmp short M01_L12
M01_L10:
vpmovmskb edx,ymm1
sub rax,rcx
mov r8,rax
shr r8,3F
add rax,r8
sar rax,1
mov ecx,edx
and ecx,0FF0000FF
and edx,0FFFF00
bswap edx
or edx,ecx
tzcnt edx,edx
add eax,edx
jmp near ptr M01_L19
M01_L11:
mov r8,rdx
M01_L12:
vmovdqu ymm1,ymmword ptr [r8]
vpackuswb ymm1,ymm1,[rdx]
vpcmpeqb ymm0,ymm0,ymm1
vptest ymm0,ymm0
je near ptr M01_L18
vpmovmskb eax,ymm0
mov r9d,eax
and r9d,0FF0000FF
and eax,0FFFF00
bswap eax
or eax,r9d
tzcnt eax,eax
cmp eax,10
jl short M01_L13
mov r8,rdx
add eax,0FFFFFFF0
M01_L13:
sub r8,rcx
mov rcx,r8
shr rcx,3F
add rcx,r8
sar rcx,1
add eax,ecx
jmp short M01_L19
M01_L14:
movzx edx,dl
vmovd xmm0,edx
vpbroadcastb xmm0,xmm0
add r8d,0FFFFFFF8
movsxd rdx,r8d
lea rax,[rax+rdx*2]
cmp rcx,rax
ja short M01_L15
mov rdx,rcx
jmp short M01_L16
M01_L15:
mov rdx,rax
M01_L16:
vmovdqu xmm1,xmmword ptr [rdx]
vpackuswb xmm1,xmm1,[rax]
vpcmpeqb xmm0,xmm0,xmm1
vptest xmm0,xmm0
je short M01_L18
vpmovmskb r8d,xmm0
tzcnt r8d,r8d
cmp r8d,8
jl short M01_L17
mov rdx,rax
add r8d,0FFFFFFF8
M01_L17:
sub rdx,rcx
mov rax,rdx
shr rax,3F
add rax,rdx
sar rax,1
add eax,r8d
jmp short M01_L19
M01_L18:
mov eax,0FFFFFFFF
M01_L19:
vzeroupper
ret
; Total bytes of code 500 DocsProfiling workflow for dotnet/runtime repository |
@MihaZupan It looks like about half of the IndexOf regressions you mention are still regressed in some way. Can you take a look and tell me if any are worth fixing? Notably these are all on the scale of nanoseconds. |
Appreciate the callout. I checked all of these and they are either noisy, resolved, or not relevant enough to worry about. |
Closing as noise |
Run Information
Regressions in System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Text.RegularExpressions.Tests.Perf_Regex_Industry_Leipzig.Count(Pattern: "(?i)Twain", Options: None)
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Regressions in System.Tests.Perf_String
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'z', newChar: 'y')
Description of detection logic
Compare Jit Disasm
System.Tests.Perf_String.TrimEnd_CharArr(s: "Test ", c: [' ', ' '])
Description of detection logic
Compare Jit Disasm
System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')
Description of detection logic
Compare Jit Disasm
System.Tests.Perf_String.Replace_String(text: "This is a very nice sentence. This is another very nice sentence.", oldValue: "a", newValue: "")
Description of detection logic
Compare Jit Disasm
System.Tests.Perf_String.Replace_Char(text: "This is a very nice sentence", oldChar: 'i', newChar: 'I')
Description of detection logic
Compare Jit Disasm
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
Run Information
Regressions in System.Memory.Span<Int32>
Test Report
Repro
Payloads
Baseline
Compare
Histogram
System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512)
Description of detection logic
Description of detection logic
Docs
Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository
The text was updated successfully, but these errors were encountered: