dotnet / perf-autofiling-issues

A landing place for auto-filed performance issues before they receive triage
MIT License
9 stars 4 forks source link

[Perf] Windows/x86: 5 Improvements on 2/1/2023 11:20:33 PM #12494

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Improvements in System.IO.Tests.Perf_RandomAccess

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WriteAsync - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.Perf_RandomAccess.WriteAsync(fileSize%3a%20104857600%2c%20bufferSize%3a%2016384%2c%20options%3a%20Asynchronous).html>) 138.95 ms 108.45 ms 0.78 0.23 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.Perf_RandomAccess*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.Perf_RandomAccess.WriteAsync(fileSize: 104857600, bufferSize: 16384, options: Asynchronous) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 108.44912333333333 < 128.26759728846153. IsChangePoint: Marked as a change because one of 1/21/2023 8:50:04 PM, 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsImprovementStdDev: Marked as improvement because 7.433465148458264 (T) = (0 -109647888.47267546) / Math.Sqrt((122231088145950.31 / (299)) + (9267572073798.84 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.05469401320398407 = (115991953.93262221 - 109647888.47267546) / 115991953.93262221 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.WriteAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-44],xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 vmovdqu xmmword ptr [ebp-14],xmm4 xor eax,eax mov [ebp-4],eax mov [ebp-34],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-44],ecx mov [ebp-40],eax mov [ebp-28],edx mov ecx,[ebp+8] mov [ebp-24],ecx mov dword ptr [ebp-2C],0FFFFFFFF lea ecx,[ebp-44] call dword ptr ds:[7DC34B0]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__17, MicroBenchmarks]](d__17 ByRef) mov eax,[ebp-1C] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret 0C M00_L01: lea ecx,[ebp-1C] call dword ptr ds:[7DC1840] jmp short M00_L00 ; Total bytes of code 99 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[7DC1738]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__17, MicroBenchmarks]](d__17 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,4AB4E68 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[7DC33A8]; System.IO.Tests.Perf_RandomAccess+d__17.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[0B0E19D8] jmp short M03_L09 M03_L04: call dword ptr ds:[4B571F8] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[0B0E19D8] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0A679AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A679270]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[7DC1750] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.Perf_RandomAccess.WriteAsync(Int64, Int32, System.IO.FileOptions) push ebp mov ebp,esp sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-44],xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 vmovdqu xmmword ptr [ebp-14],xmm4 xor eax,eax mov [ebp-4],eax mov [ebp-34],ecx mov ecx,[ebp+0C] mov eax,[ebp+10] mov [ebp-44],ecx mov [ebp-40],eax mov [ebp-28],edx mov ecx,[ebp+8] mov [ebp-24],ecx mov dword ptr [ebp-2C],0FFFFFFFF lea ecx,[ebp-44] call dword ptr ds:[7FD34B0]; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__17, MicroBenchmarks]](d__17 ByRef) mov eax,[ebp-1C] test eax,eax je short M00_L01 M00_L00: mov esp,ebp pop ebp ret 0C M00_L01: lea ecx,[ebp-1C] call dword ptr ds:[7FD1840] jmp short M00_L00 ; Total bytes of code 99 ``` ```assembly ; System.Threading.Tasks.Task.GetAwaiter() mov eax,ecx ret ; Total bytes of code 3 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.GetResult() mov ecx,[ecx] mov eax,[ecx+1C] and eax,11000000 cmp eax,1000000 jne short M02_L01 M02_L00: ret M02_L01: call dword ptr ds:[7FD1738]; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) jmp short M02_L00 ; Total bytes of code 26 ``` ```assembly ; System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[System.IO.Tests.Perf_RandomAccess+d__17, MicroBenchmarks]](d__17 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ebx,esi cmp [ebx],bl mov ecx,4CB4E68 mov edx,2FE call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+0C] test eax,eax je short M03_L04 M03_L00: mov edi,eax mov [ebp-24],edi mov ecx,[eax+4] mov [ebp-28],ecx mov eax,[eax+8] mov [ebp-2C],eax mov ecx,esi call dword ptr ds:[7FD33A8]; System.IO.Tests.Perf_RandomAccess+d__17.MoveNext() mov eax,[ebp-2C] cmp eax,[edi+8] je short M03_L01 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L01: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L09 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L02 cmp dword ptr [ecx+8],0 jne short M03_L03 M03_L02: test eax,eax je short M03_L09 cmp dword ptr [eax+8],0 je short M03_L09 M03_L03: mov edx,eax call dword ptr ds:[0B3A19D8] jmp short M03_L09 M03_L04: call dword ptr ds:[82071F8] jmp short M03_L00 mov eax,[ebp-2C] mov edi,[ebp-24] cmp eax,[edi+8] je short M03_L05 lea edx,[edi+8] call CORINFO_HELP_ASSIGN_REF_EAX M03_L05: mov ecx,[edi+4] mov edx,[ebp-28] cmp edx,ecx je short M03_L08 lea edx,[edi+4] mov eax,[ebp-28] call CORINFO_HELP_ASSIGN_REF_EAX test ecx,ecx je short M03_L06 cmp dword ptr [ecx+8],0 jne short M03_L07 M03_L06: test eax,eax je short M03_L08 cmp dword ptr [eax+8],0 je short M03_L08 M03_L07: mov edx,eax call dword ptr ds:[0B3A19D8] M03_L08: pop eax jmp eax M03_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 221 ``` ```assembly ; System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) push ebp mov ebp,esp push esi mov esi,ecx test dword ptr [esi+1C],1600000 jne short M04_L00 push 0 mov ecx,esi mov edx,0FFFFFFFF call dword ptr ds:[0A949AE0]; System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) M04_L00: mov ecx,esi call dword ptr ds:[0A949270]; System.Threading.Tasks.Task.NotifyDebuggerOfWaitCompletionIfNecessary() mov ecx,[esi+1C] and ecx,1600000 cmp ecx,1000000 je short M04_L01 mov ecx,esi call dword ptr ds:[7FD1750] M04_L01: pop esi pop ebp ret ; Total bytes of code 66 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Improvements in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int64>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DotBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Of(Int64).DotBenchmark.html>) 9.66 ns 1.34 ns 0.14 0.14 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of&lt;Int64&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int64>.DotBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.3360510512676274 < 9.17932818589016. IsChangePoint: Marked as a change because one of 12/1/2022 8:17:56 AM, 1/12/2023 6:14:36 AM, 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsImprovementStdDev: Marked as improvement because 11.42797943433062 (T) = (0 -2.6399270444485303) / Math.Sqrt((3.0255171461992463 / (299)) + (17.160729670035423 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.7705562774054052 = (11.505771500722336 - 2.6399270444485303) / 11.505771500722336 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Improvements in System.Buffers.Tests.ReadOnlySequenceTests<Char>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SliceArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Buffers.Tests.ReadOnlySequenceTests(Char).SliceArray.html>) 9.28 ns 0.61 ns 0.07 0.09 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Buffers.Tests.ReadOnlySequenceTests&lt;Char&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Buffers.Tests.ReadOnlySequenceTests<Char>.SliceArray ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 0.606491850192858 < 8.870803525531898. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsImprovementStdDev: Marked as improvement because 136.02260069231662 (T) = (0 -0.2188807056739662) / Math.Sqrt((0.005498331311060803 / (299)) + (0.13113735966213133 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.9766760833695489 = (9.384388957564726 - 0.2188807056739662) / 9.384388957564726 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Improvements in System.Tests.Perf_Int64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ParseSpan - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Int64.ParseSpan(value%3a%20%22-9223372036854775808%22).html>) 84.70 ns 0.59 ns 0.01 0.15 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Int64*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Int64.ParseSpan(value: "-9223372036854775808") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 0.5900938791617338 < 80.70506776040081. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsImprovementStdDev: Marked as improvement because 19.117078061824927 (T) = (0 -7.271429628865656) / Math.Sqrt((4.385711810335365 / (299)) + (477.8895431952584 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.914363445521817 = (84.91034784355028 - 7.271429628865656) / 84.91034784355028 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Int64.ParseSpan(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L01 lea esi,[edx+8] mov edi,[edx+4] M00_L00: call dword ptr ds:[0AFA38B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax push edi push esi lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[8EAD018]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L02 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 M00_L02: push edi push esi mov edx,0B call dword ptr ds:[8EAD360] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,5494E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[7651240] test ecx,ecx jne short M01_L00 mov ecx,ds:[7651230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,88A48C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8EA7030] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[886B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,50 mov esi,ecx mov edi,[ebp+10] test edi,edi je near ptr M02_L07 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L17 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L17 M02_L00: mov dword ptr [ebp-1C],1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edx+71],0 je near ptr M02_L20 cmp eax,2D je near ptr M02_L18 cmp eax,2B je near ptr M02_L19 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi xor edx,edx lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L07 cmp eax,30 je short M02_L04 M02_L02: add eax,0FFFFFFD0 mov edx,eax sar edx,1F mov edi,eax inc ebx xor eax,eax mov [ebp-24],eax M02_L03: cmp ebx,[ebp+10] jae short M02_L05 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov [ebp-18],ecx lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov esi,[ebp-18] mov ecx,esi sar esi,1F add eax,ecx adc edx,esi mov edi,eax sub edi,30 sbb edx,0 mov esi,edx mov eax,[ebp-24] inc eax cmp eax,11 jge near ptr M02_L26 mov [ebp-24],eax mov edx,esi jmp short M02_L03 M02_L04: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L27 M02_L05: push edx push edi mov edi,[ebp-1C] mov eax,edi sar eax,1F push eax push edi call CORINFO_HELP_LMUL mov ebx,[ebp+8] mov [ebx],eax mov [ebx+4],edx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L06 M02_L08: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,2 jmp short M02_L06 M02_L09: mov ecx,[ebp-18] cmp ecx,20 je short M02_L10 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L11 M02_L10: test byte ptr [ebp-10],2 mov [ebp-30],edx je short M02_L07 mov esi,[ebp-1C] jmp short M02_L13 M02_L11: mov [ebp-30],edx jmp short M02_L15 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] cmp ecx,20 je short M02_L13 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] mov [ebp-1C],esi jae short M02_L16 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[8EAD2D0] test eax,eax mov eax,[ebp-30] jne near ptr M02_L30 jmp near ptr M02_L07 M02_L16: mov eax,[ebp-30] jmp near ptr M02_L30 M02_L17: inc ebx cmp ebx,edi jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,20 je short M02_L17 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L17 jmp near ptr M02_L00 M02_L18: mov ecx,0FFFFFFFF inc ebx cmp ebx,edi jae near ptr M02_L07 mov esi,[ebp-10] jmp near ptr M02_L24 M02_L19: inc ebx cmp ebx,edi jae near ptr M02_L07 mov ecx,[ebp-1C] mov esi,[ebp-10] jmp near ptr M02_L24 M02_L20: cmp byte ptr [edx+72],0 je short M02_L21 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L21 mov ecx,0FFFFFFFF inc ebx cmp ebx,edi mov [ebp-1C],ecx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] jmp near ptr M02_L24 M02_L21: cmp ebx,edi jbe short M02_L22 call dword ptr ds:[8F651E0] int 3 M02_L22: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] sub edi,ebx mov [ebp+0C],ecx mov [ebp+10],edi xor ebx,ebx mov edi,[edx+10] mov [ebp-4C],edi mov edx,[edx+14] mov [ebp-50],edx test edi,edi je short M02_L23 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx jne short M02_L23 mov ecx,[ebp+0C] mov edx,[ebp+10] mov [ebp-2C],edx lea edx,[edi+8] mov edi,[edi+4] cmp edi,[ebp-2C] jg short M02_L23 mov [ebp-18],eax add edi,edi push edi call dword ptr ds:[887F120] test eax,eax mov eax,[ebp-18] je short M02_L23 mov edi,[ebp-4C] mov ebx,[edi+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L24 M02_L23: mov edx,[ebp-50] test edx,edx je near ptr M02_L01 mov [ebp-50],edx cmp dword ptr [edx+4],0 sete dl movzx edx,dl test edx,edx jne near ptr M02_L01 mov [ebp-14],ebx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-50] add ebx,8 mov ecx,[ebp-50] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-28],ecx mov [ebp-54],ebx jg short M02_L25 mov [ebp-18],eax mov edi,[ebp-50] mov ebx,[ebp-28] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-54] call dword ptr ds:[887F120] test eax,eax mov eax,[ebp-18] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov eax,[edi+4] mov edi,eax cmp edi,[ebp+10] mov ebx,edi mov ecx,[ebp-1C] mov esi,[ebp-10] jae near ptr M02_L07 M02_L24: cmp ebx,[ebp+10] jae near ptr M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov [ebp-10],esi mov [ebp-1C],ecx mov eax,edi jmp near ptr M02_L01 M02_L25: mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L26: cmp ebx,[ebp+10] mov edx,esi jae near ptr M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L09 inc ebx cmp edi,0CCCCCCCD mov ecx,edx sbb ecx,0CCCCCCC setge cl movzx ecx,cl mov [ebp-20],ecx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov edi,[ebp-18] mov ecx,edi sar edi,1F add eax,ecx adc edx,edi mov edi,eax sub edi,30 sbb edx,0 mov eax,edx mov edx,[ebp-1C] mov ecx,edx shr ecx,1F mov [ebp-58],ecx xor ecx,ecx mov [ebp-5C],ecx mov ecx,[ebp-58] add ecx,0FFFFFFFF mov [ebp-58],ecx mov ecx,[ebp-5C] adc ecx,7FFFFFFF mov [ebp-5C],ecx mov ecx,[ebp-58] cmp ecx,edi mov ecx,[ebp-5C] sbb ecx,eax setb cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl mov [ebp-20],ecx cmp ebx,[ebp+10] jae short M02_L30 jmp short M02_L29 M02_L27: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je near ptr M02_L04 lea ecx,[eax-30] cmp ecx,9 mov [ebp-18],eax ja near ptr M02_L09 mov eax,[ebp-18] jmp near ptr M02_L02 M02_L28: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-20],edx jae near ptr M02_L08 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea edx,[ecx-30] cmp edx,9 jbe short M02_L28 mov [ebp-18],ecx mov edx,eax jmp near ptr M02_L09 M02_L30: cmp dword ptr [ebp-20],0 jne near ptr M02_L08 mov edx,eax jmp near ptr M02_L05 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1138 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Int64.ParseSpan(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L01 lea esi,[edx+8] mov edi,[edx+4] M00_L00: push edi push esi call dword ptr ds:[0AD238B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[8C8D018]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L02 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L01: xor esi,esi xor edi,edi jmp short M00_L00 M00_L02: push edi push esi mov edx,0B call dword ptr ds:[8C8D360] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,39F4E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[74A1240] test ecx,ecx jne short M01_L00 mov ecx,ds:[74A1230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,86848C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8C87330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[864B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,50 mov esi,ecx mov edi,[ebp+10] test edi,edi je near ptr M02_L07 xor ebx,ebx mov eax,[ebp+0C] movzx eax,word ptr [eax] test esi,1 je short M02_L00 cmp eax,20 je near ptr M02_L17 lea ecx,[eax-9] cmp ecx,4 jbe near ptr M02_L17 M02_L00: mov dword ptr [ebp-1C],1 mov [ebp-10],esi test esi,4 je short M02_L01 cmp byte ptr [edx+71],0 je near ptr M02_L20 cmp eax,2D je near ptr M02_L18 cmp eax,2B je near ptr M02_L19 M02_L01: xor edx,edx mov [ebp-20],edx xor edi,edi xor edx,edx lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L07 cmp eax,30 je short M02_L04 M02_L02: add eax,0FFFFFFD0 mov edx,eax sar edx,1F mov edi,eax inc ebx xor eax,eax mov [ebp-24],eax M02_L03: cmp ebx,[ebp+10] jae short M02_L05 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] mov [ebp-18],ecx lea esi,[ecx-30] cmp esi,9 ja near ptr M02_L09 inc ebx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov esi,[ebp-18] mov ecx,esi sar esi,1F add eax,ecx adc edx,esi mov edi,eax sub edi,30 sbb edx,0 mov esi,edx mov eax,[ebp-24] inc eax cmp eax,11 jge near ptr M02_L26 mov [ebp-24],eax mov edx,esi jmp short M02_L03 M02_L04: inc ebx cmp ebx,[ebp+10] jb near ptr M02_L27 M02_L05: push edx push edi mov edi,[ebp-1C] mov eax,edi sar eax,1F push eax push edi call CORINFO_HELP_LMUL mov ebx,[ebp+8] mov [ebx],eax mov [ebx+4],edx xor eax,eax M02_L06: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L07: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L06 M02_L08: mov ebx,[ebp+8] mov eax,ebx xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,2 jmp short M02_L06 M02_L09: mov ecx,[ebp-18] cmp ecx,20 je short M02_L10 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L11 M02_L10: test byte ptr [ebp-10],2 mov [ebp-30],edx je short M02_L07 mov esi,[ebp-1C] jmp short M02_L13 M02_L11: mov [ebp-30],edx jmp short M02_L15 M02_L12: cmp ebx,[ebp+10] jae near ptr M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] cmp ecx,20 je short M02_L13 add ecx,0FFFFFFF7 cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx je short M02_L14 M02_L13: inc ebx cmp ebx,[ebp+10] jl short M02_L12 M02_L14: cmp ebx,[ebp+10] mov [ebp-1C],esi jae short M02_L16 M02_L15: push dword ptr [ebp+10] push dword ptr [ebp+0C] mov ecx,ebx call dword ptr ds:[8C8D2D0] test eax,eax mov eax,[ebp-30] jne near ptr M02_L30 jmp near ptr M02_L07 M02_L16: mov eax,[ebp-30] jmp near ptr M02_L30 M02_L17: inc ebx cmp ebx,edi jae near ptr M02_L07 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,20 je short M02_L17 lea ecx,[eax-9] cmp ecx,4 setbe cl movzx ecx,cl test ecx,ecx jne short M02_L17 jmp near ptr M02_L00 M02_L18: mov ecx,0FFFFFFFF inc ebx cmp ebx,edi jae near ptr M02_L07 mov esi,[ebp-10] jmp near ptr M02_L24 M02_L19: inc ebx cmp ebx,edi jae near ptr M02_L07 mov ecx,[ebp-1C] mov esi,[ebp-10] jmp near ptr M02_L24 M02_L20: cmp byte ptr [edx+72],0 je short M02_L21 mov [ebp-18],eax cmp eax,2D mov eax,[ebp-18] jne short M02_L21 mov ecx,0FFFFFFFF inc ebx cmp ebx,edi mov [ebp-1C],ecx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] jmp near ptr M02_L24 M02_L21: cmp ebx,edi jbe short M02_L22 call dword ptr ds:[8D45270] int 3 M02_L22: mov ecx,[ebp+0C] lea ecx,[ecx+ebx*2] sub edi,ebx mov [ebp+0C],ecx mov [ebp+10],edi xor ebx,ebx mov edi,[edx+10] mov [ebp-4C],edi mov edx,[edx+14] mov [ebp-50],edx test edi,edi je short M02_L23 xor ecx,ecx cmp dword ptr [edi+4],0 sete cl test ecx,ecx jne short M02_L23 mov ecx,[ebp+0C] mov edx,[ebp+10] mov [ebp-2C],edx lea edx,[edi+8] mov edi,[edi+4] cmp edi,[ebp-2C] jg short M02_L23 mov [ebp-18],eax add edi,edi push edi call dword ptr ds:[865F120] test eax,eax mov eax,[ebp-18] je short M02_L23 mov edi,[ebp-4C] mov ebx,[edi+4] cmp ebx,[ebp+10] mov [ebp-14],ebx jae near ptr M02_L07 mov esi,[ebp-10] mov ecx,[ebp-1C] mov ebx,[ebp-14] jmp near ptr M02_L24 M02_L23: mov edx,[ebp-50] test edx,edx je near ptr M02_L01 mov [ebp-50],edx cmp dword ptr [edx+4],0 sete dl movzx edx,dl test edx,edx jne near ptr M02_L01 mov [ebp-14],ebx mov edx,[ebp+0C] mov edi,[ebp+10] mov ebx,[ebp-50] add ebx,8 mov ecx,[ebp-50] mov ecx,[ecx+4] cmp ecx,edi mov [ebp-28],ecx mov [ebp-54],ebx jg short M02_L25 mov [ebp-18],eax mov edi,[ebp-50] mov ebx,[ebp-28] add ebx,ebx push ebx mov ecx,edx mov edx,[ebp-54] call dword ptr ds:[865F120] test eax,eax mov eax,[ebp-18] mov ebx,[ebp-14] je near ptr M02_L01 mov dword ptr [ebp-1C],0FFFFFFFF mov eax,[edi+4] mov edi,eax cmp edi,[ebp+10] mov ebx,edi mov ecx,[ebp-1C] mov esi,[ebp-10] jae near ptr M02_L07 M02_L24: cmp ebx,[ebp+10] jae near ptr M02_L31 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov edi,eax mov [ebp-10],esi mov [ebp-1C],ecx mov eax,edi jmp near ptr M02_L01 M02_L25: mov ebx,[ebp-14] jmp near ptr M02_L01 M02_L26: cmp ebx,[ebp+10] mov edx,esi jae near ptr M02_L05 mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] mov [ebp-18],eax lea ecx,[eax-30] cmp ecx,9 ja near ptr M02_L09 inc ebx cmp edi,0CCCCCCCD mov ecx,edx sbb ecx,0CCCCCCC setge cl movzx ecx,cl mov [ebp-20],ecx push edx push edi push 0 push 0A call CORINFO_HELP_LMUL mov edi,[ebp-18] mov ecx,edi sar edi,1F add eax,ecx adc edx,edi mov edi,eax sub edi,30 sbb edx,0 mov eax,edx mov edx,[ebp-1C] mov ecx,edx shr ecx,1F mov [ebp-58],ecx xor ecx,ecx mov [ebp-5C],ecx mov ecx,[ebp-58] add ecx,0FFFFFFFF mov [ebp-58],ecx mov ecx,[ebp-5C] adc ecx,7FFFFFFF mov [ebp-5C],ecx mov ecx,[ebp-58] cmp ecx,edi mov ecx,[ebp-5C] sbb ecx,eax setb cl movzx ecx,cl or ecx,[ebp-20] movzx ecx,cl mov [ebp-20],ecx cmp ebx,[ebp+10] jae short M02_L30 jmp short M02_L29 M02_L27: mov eax,[ebp+0C] movzx eax,word ptr [eax+ebx*2] cmp eax,30 je near ptr M02_L04 lea ecx,[eax-30] cmp ecx,9 mov [ebp-18],eax ja near ptr M02_L09 mov eax,[ebp-18] jmp near ptr M02_L02 M02_L28: mov edx,1 inc ebx cmp ebx,[ebp+10] mov [ebp-20],edx jae near ptr M02_L08 M02_L29: cmp ebx,[ebp+10] jae short M02_L31 mov ecx,[ebp+0C] movzx ecx,word ptr [ecx+ebx*2] lea edx,[ecx-30] cmp edx,9 jbe short M02_L28 mov [ebp-18],ecx mov edx,eax jmp near ptr M02_L09 M02_L30: cmp dword ptr [ebp-20],0 jne near ptr M02_L08 mov edx,eax jmp near ptr M02_L05 M02_L31: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1138 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 120b7215c9d029fccee94f46864494d79074a0eb
Compare 2ba2396495c22429035d165e478672c442f81e22
Diff Diff

Improvements in System.Tests.Perf_UInt64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[Parse - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_UInt64.Parse(value%3a%20%2218446744073709551615%22).html>) 100.80 ns 0.42 ns 0.00 0.15 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_UInt64*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_UInt64.Parse(value: "18446744073709551615") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 0.41554966749792194 < 93.83807229564495. IsChangePoint: Marked as a change because one of 2/1/2023 6:25:50 PM, 2/7/2023 8:22:47 AM falls between 1/29/2023 5:12:48 PM and 2/7/2023 8:22:47 AM. IsImprovementStdDev: Marked as improvement because 19.14563224930208 (T) = (0 -8.044389046831002) / Math.Sqrt((6.152758043534185 / (299)) + (648.2752030230442 / (29))) is greater than 1.9672675222597202 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (29) - 2, .975) and 0.9184199170774386 = (98.60726734571979 - 8.044389046831002) / 98.60726734571979 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_UInt64.Parse(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] push edi push esi call dword ptr ds:[0A7238B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[872D138]; System.Number.TryParseUInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[87E54F8] int 3 M00_L01: push edi push esi mov edx,0C call dword ptr ds:[872D360] int 3 ; Total bytes of code 88 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,2CF4E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[6E01240] test ecx,ecx jne short M01_L00 mov ecx,ds:[6E01230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,81248C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8727030] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[80EB8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,90 mov [ebp-64],edx mov esi,ecx mov ebx,[ebp+10] test ebx,ebx je near ptr M02_L25 xor ecx,ecx mov eax,[ebp+0C] movzx edi,word ptr [eax] mov [ebp-10],esi test esi,1 je short M02_L01 cmp edi,20 je short M02_L00 lea esi,[edi-9] cmp esi,4 ja short M02_L01 M02_L00: inc ecx cmp ecx,ebx jae near ptr M02_L25 movzx edi,word ptr [eax+ecx*2] cmp edi,20 je short M02_L00 lea esi,[edi-9] cmp esi,4 jbe short M02_L00 M02_L01: xor esi,esi xor edx,edx test byte ptr [ebp-10],4 je near ptr M02_L07 mov esi,[ebp-64] cmp byte ptr [esi+71],0 je short M02_L03 cmp edi,2B jne short M02_L02 inc ecx cmp ecx,ebx jae near ptr M02_L25 jmp near ptr M02_L06 M02_L02: cmp edi,2D jne near ptr M02_L07 mov edx,1 inc ecx cmp ecx,ebx jae near ptr M02_L25 jmp near ptr M02_L06 M02_L03: cmp byte ptr [esi+72],0 je short M02_L04 cmp edi,2D jne short M02_L04 mov dword ptr [ebp-1C],1 inc ecx cmp ecx,ebx jae near ptr M02_L25 mov edx,[ebp-1C] jmp near ptr M02_L06 M02_L04: cmp ecx,ebx ja near ptr M02_L35 lea eax,[eax+ecx*2] mov [ebp-94],eax sub ebx,ecx mov ecx,ebx mov [ebp+0C],eax mov [ebp+10],ecx xor ecx,ecx mov [ebp-14],ecx mov ecx,[esi+10] mov [ebp-68],ecx mov esi,[esi+14] mov [ebp-6C],esi test ecx,ecx je near ptr M02_L05 cmp dword ptr [ecx+4],0 je near ptr M02_L05 mov esi,[ebp-94] mov [ebp-78],esi mov [ebp-3C],ebx lea esi,[ecx+8] mov [ebp-70],esi mov esi,[ecx+4] mov [ebp-30],esi mov esi,[ebp-70] mov [ebp-80],esi mov esi,[ebp-30] mov [ebp-44],esi mov esi,[ebp-80] mov [ebp-7C],esi mov esi,[ebp-44] mov [ebp-40],esi mov esi,[ebp-78] mov [ebp-88],esi mov esi,[ebp-7C] mov [ebp-84],esi mov esi,[ebp-40] mov ecx,[ebp-3C] cmp esi,ecx mov [ebp-34],esi jg short M02_L05 mov [ebp-1C],edx mov ecx,[ebp-34] add ecx,ecx push ecx mov ecx,[ebp-88] mov edx,[ebp-84] call dword ptr ds:[80FF120] test eax,eax mov edx,[ebp-1C] je short M02_L05 mov ecx,[ebp-68] mov eax,[ecx+4] mov edi,eax mov [ebp-14],edi cmp edi,ebx jae near ptr M02_L25 mov ecx,[ebp-14] jmp near ptr M02_L06 M02_L05: mov esi,[ebp-6C] test esi,esi je near ptr M02_L15 cmp dword ptr [esi+4],0 je near ptr M02_L14 mov ecx,[ebp-94] mov [ebp-74],ecx mov [ebp-38],ebx lea ecx,[esi+8] mov [ebp-6C],esi mov esi,[esi+4] mov [ebp-48],esi mov esi,[ebp-74] mov [ebp-90],esi mov [ebp-8C],ecx mov ecx,[ebp-48] mov esi,[ebp-38] cmp ecx,esi jg near ptr M02_L13 mov [ebp-1C],edx add ecx,ecx push ecx mov ecx,[ebp-90] mov edx,[ebp-8C] call dword ptr ds:[80FF120] test eax,eax mov ecx,[ebp-14] mov edx,[ebp-1C] je short M02_L07 mov dword ptr [ebp-1C],1 mov esi,[ebp-6C] mov edx,[esi+4] mov edi,edx cmp edi,ebx mov ecx,edi mov edx,[ebp-1C] jae near ptr M02_L25 M02_L06: cmp ecx,[ebp+10] jae near ptr M02_L36 mov eax,[ebp+0C] movzx edi,word ptr [eax+ecx*2] M02_L07: xor ebx,ebx xor eax,eax lea esi,[edi-30] cmp esi,9 ja near ptr M02_L25 cmp edi,30 jne short M02_L09 M02_L08: inc ecx mov esi,[ebp+10] cmp ecx,esi mov [ebp-1C],edx jae near ptr M02_L23 mov edi,[ebp+0C] movzx edx,word ptr [edi+ecx*2] cmp edx,30 mov [ebp-98],edi je near ptr M02_L12 mov edi,edx lea edx,[edi-30] cmp edx,9 mov edx,[ebp-1C] ja near ptr M02_L27 M02_L09: add edi,0FFFFFFD0 mov eax,edi sar eax,1F mov [ebp-4C],edi mov [ebp-50],eax inc ecx xor edi,edi M02_L10: mov esi,[ebp+10] cmp ecx,esi jae near ptr M02_L22 mov [ebp-1C],edx mov edx,[ebp+0C] mov [ebp-98],edx movzx eax,word ptr [edx+ecx*2] mov [ebp-18],eax lea ebx,[eax-30] cmp ebx,9 ja near ptr M02_L28 inc ecx mov [ebp-14],ecx push dword ptr [ebp-50] push dword ptr [ebp-4C] push 0 push 0A call CORINFO_HELP_LMUL mov ebx,[ebp-18] mov ecx,ebx sar ebx,1F add eax,ecx adc edx,ebx mov ebx,eax sub ebx,30 mov eax,edx sbb eax,0 mov [ebp-50],eax inc edi cmp edi,12 mov [ebp-4C],ebx mov ecx,[ebp-14] mov edx,[ebp-1C] jl short M02_L10 mov edi,[ebp-98] cmp ecx,esi jae near ptr M02_L22 mov [ebp-1C],edx movzx edx,word ptr [edi+ecx*2] lea eax,[edx-30] cmp eax,9 ja short M02_L11 inc ecx mov [ebp-14],ecx mov eax,[ebp-1C] mov [ebp-20],eax mov ebx,[ebp-4C] cmp ebx,9999999A mov eax,[ebp-50] sbb eax,19999999 jae short M02_L17 nop nop nop nop mov eax,[ebp-20] mov [ebp-2C],eax mov eax,ebx xor eax,99999999 mov [ebp-9C],eax mov eax,[ebp-50] xor eax,19999999 or eax,[ebp-9C] jne short M02_L16 mov eax,[ebp-2C] mov [ebp-24],eax mov [ebp-18],edx xor eax,eax cmp edx,35 setg al mov [ebp-28],eax jmp short M02_L18 M02_L11: mov [ebp-18],edx mov [ebp-98],edi jmp near ptr M02_L28 M02_L12: mov edx,[ebp-1C] jmp near ptr M02_L08 M02_L13: mov ecx,[ebp-14] jmp near ptr M02_L07 M02_L14: mov ecx,[ebp-14] jmp near ptr M02_L07 nop M02_L15: mov ecx,[ebp-14] jmp near ptr M02_L07 M02_L16: mov eax,[ebp-2C] mov [ebp-24],eax xor eax,eax mov [ebp-18],edx mov [ebp-28],eax jmp short M02_L18 M02_L17: mov eax,[ebp-20] mov [ebp-24],eax mov dword ptr [ebp-28],1 mov [ebp-18],edx M02_L18: mov eax,[ebp-24] or eax,[ebp-28] movzx eax,al mov [ebp-1C],eax push dword ptr [ebp-50] push ebx push 0 push 0A call CORINFO_HELP_LMUL mov ebx,[ebp-18] mov ecx,ebx sar ebx,1F add eax,ecx adc edx,ebx mov ebx,eax sub ebx,30 mov eax,edx sbb eax,0 mov [ebp-50],eax mov ecx,[ebp-14] cmp ecx,esi jae short M02_L21 movzx eax,word ptr [edi+ecx*2] lea edx,[eax-30] cmp edx,9 mov [ebp-18],eax ja short M02_L20 M02_L19: mov dword ptr [ebp-1C],1 inc ecx cmp ecx,esi jae short M02_L26 movzx eax,word ptr [edi+ecx*2] lea edx,[eax-30] cmp edx,9 jbe short M02_L19 mov [ebp-18],eax mov [ebp-98],edi mov [ebp-4C],ebx jmp short M02_L28 M02_L20: mov [ebp-98],edi mov [ebp-4C],ebx jmp short M02_L28 nop nop nop M02_L21: mov [ebp-4C],ebx mov edx,[ebp-1C] M02_L22: test edx,edx mov eax,[ebp-50] mov ebx,[ebp-4C] jne short M02_L26 M02_L23: mov edi,[ebp+8] mov [edi],ebx mov [edi+4],eax xor eax,eax M02_L24: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L25: mov edi,[ebp+8] mov eax,edi xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L24 M02_L26: mov edi,[ebp+8] mov eax,edi xor ecx,ecx mov [eax],ecx mov [eax+4],ecx mov eax,2 jmp short M02_L24 M02_L27: xor edx,edx mov [ebp-18],edi mov [ebp-4C],ebx mov [ebp-50],eax mov [ebp-1C],edx M02_L28: mov eax,[ebp-18] cmp eax,20 je short M02_L29 add eax,0FFFFFFF7 cmp eax,4 ja short M02_L33 M02_L29: test byte ptr [ebp-10],2 je short M02_L25 mov edx,[ebp-98] mov edi,[ebp-50] inc ecx cmp ecx,esi jge short M02_L32 M02_L30: cmp ecx,esi jae short M02_L36 movzx ebx,word ptr [edx+ecx*2] cmp ebx,20 je short M02_L31 add ebx,0FFFFFFF7 cmp ebx,4 ja short M02_L32 M02_L31: inc ecx cmp ecx,esi jl short M02_L30 M02_L32: cmp ecx,esi mov [ebp-50],edi jae short M02_L34 M02_L33: push dword ptr [ebp+10] push dword ptr [ebp+0C] call dword ptr ds:[872D2D0] test eax,eax mov edx,[ebp-1C] jne near ptr M02_L22 jmp near ptr M02_L25 M02_L34: mov edx,[ebp-1C] jmp near ptr M02_L22 M02_L35: call dword ptr ds:[87E51E0] int 3 M02_L36: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1266 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_UInt64.Parse(System.String) push ebp mov ebp,esp push edi push esi sub esp,8 test edx,edx je short M00_L00 lea esi,[edx+8] mov edi,[edx+4] push edi push esi call dword ptr ds:[0AF538B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo() mov edx,eax lea ecx,[ebp-10] push ecx mov ecx,7 call dword ptr ds:[8EBD138]; System.Number.TryParseUInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt64 ByRef) mov ecx,eax test ecx,ecx jne short M00_L01 mov eax,[ebp-10] mov edx,[ebp-0C] lea esp,[ebp-8] pop esi pop edi pop ebp ret M00_L00: mov ecx,11 call dword ptr ds:[8F75588] int 3 M00_L01: push edi push esi mov edx,0C call dword ptr ds:[8EBD360] int 3 ; Total bytes of code 88 ``` ```assembly ; System.Globalization.NumberFormatInfo.get_CurrentInfo() push ebp mov ebp,esp mov ecx,5404E68 mov edx,250 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov ecx,[eax+4] test ecx,ecx jne short M01_L00 mov ecx,ds:[75A1240] test ecx,ecx jne short M01_L00 mov ecx,ds:[75A1230] test ecx,ecx je short M01_L03 M01_L00: cmp byte ptr [ecx+31],0 jne short M01_L01 mov eax,[ecx+0C] test eax,eax je short M01_L01 pop ebp ret M01_L01: mov edx,88B48C0 mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax] mov edx,eax mov eax,edx test eax,eax je short M01_L02 mov ecx,offset MT_System.Globalization.NumberFormatInfo cmp [eax],ecx jne short M01_L04 M01_L02: pop ebp ret M01_L03: call dword ptr ds:[8EB7330] mov ecx,eax jmp short M01_L00 M01_L04: call dword ptr ds:[887B8B8] int 3 ; Total bytes of code 108 ``` ```assembly ; System.Number.TryParseUInt64IntegerStyle(System.ReadOnlySpan`1, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, UInt64 ByRef) push ebp mov ebp,esp push edi push esi push ebx sub esp,90 mov [ebp-64],edx mov esi,ecx mov ebx,[ebp+10] test ebx,ebx je near ptr M02_L25 xor ecx,ecx mov eax,[ebp+0C] movzx edi,word ptr [eax] mov [ebp-10],esi test esi,1 je short M02_L01 cmp edi,20 je short M02_L00 lea esi,[edi-9] cmp esi,4 ja short M02_L01 M02_L00: inc ecx cmp ecx,ebx jae near ptr M02_L25 movzx edi,word ptr [eax+ecx*2] cmp edi,20 je short M02_L00 lea esi,[edi-9] cmp esi,4 jbe short M02_L00 M02_L01: xor esi,esi xor edx,edx test byte ptr [ebp-10],4 je near ptr M02_L07 mov esi,[ebp-64] cmp byte ptr [esi+71],0 je short M02_L03 cmp edi,2B jne short M02_L02 inc ecx cmp ecx,ebx jae near ptr M02_L25 jmp near ptr M02_L06 M02_L02: cmp edi,2D jne near ptr M02_L07 mov edx,1 inc ecx cmp ecx,ebx jae near ptr M02_L25 jmp near ptr M02_L06 M02_L03: cmp byte ptr [esi+72],0 je short M02_L04 cmp edi,2D jne short M02_L04 mov dword ptr [ebp-1C],1 inc ecx cmp ecx,ebx jae near ptr M02_L25 mov edx,[ebp-1C] jmp near ptr M02_L06 M02_L04: cmp ecx,ebx ja near ptr M02_L35 lea eax,[eax+ecx*2] mov [ebp-94],eax sub ebx,ecx mov ecx,ebx mov [ebp+0C],eax mov [ebp+10],ecx xor ecx,ecx mov [ebp-14],ecx mov ecx,[esi+10] mov [ebp-68],ecx mov esi,[esi+14] mov [ebp-6C],esi test ecx,ecx je near ptr M02_L05 cmp dword ptr [ecx+4],0 je near ptr M02_L05 mov esi,[ebp-94] mov [ebp-78],esi mov [ebp-3C],ebx lea esi,[ecx+8] mov [ebp-70],esi mov esi,[ecx+4] mov [ebp-30],esi mov esi,[ebp-70] mov [ebp-80],esi mov esi,[ebp-30] mov [ebp-44],esi mov esi,[ebp-80] mov [ebp-7C],esi mov esi,[ebp-44] mov [ebp-40],esi mov esi,[ebp-78] mov [ebp-88],esi mov esi,[ebp-7C] mov [ebp-84],esi mov esi,[ebp-40] mov ecx,[ebp-3C] cmp esi,ecx mov [ebp-34],esi jg short M02_L05 mov [ebp-1C],edx mov ecx,[ebp-34] add ecx,ecx push ecx mov ecx,[ebp-88] mov edx,[ebp-84] call dword ptr ds:[888F120] test eax,eax mov edx,[ebp-1C] je short M02_L05 mov ecx,[ebp-68] mov eax,[ecx+4] mov edi,eax mov [ebp-14],edi cmp edi,ebx jae near ptr M02_L25 mov ecx,[ebp-14] jmp near ptr M02_L06 M02_L05: mov esi,[ebp-6C] test esi,esi je near ptr M02_L15 cmp dword ptr [esi+4],0 je near ptr M02_L14 mov ecx,[ebp-94] mov [ebp-74],ecx mov [ebp-38],ebx lea ecx,[esi+8] mov [ebp-6C],esi mov esi,[esi+4] mov [ebp-48],esi mov esi,[ebp-74] mov [ebp-90],esi mov [ebp-8C],ecx mov ecx,[ebp-48] mov esi,[ebp-38] cmp ecx,esi jg near ptr M02_L13 mov [ebp-1C],edx add ecx,ecx push ecx mov ecx,[ebp-90] mov edx,[ebp-8C] call dword ptr ds:[888F120] test eax,eax mov ecx,[ebp-14] mov edx,[ebp-1C] je short M02_L07 mov dword ptr [ebp-1C],1 mov esi,[ebp-6C] mov edx,[esi+4] mov edi,edx cmp edi,ebx mov ecx,edi mov edx,[ebp-1C] jae near ptr M02_L25 M02_L06: cmp ecx,[ebp+10] jae near ptr M02_L36 mov eax,[ebp+0C] movzx edi,word ptr [eax+ecx*2] M02_L07: xor ebx,ebx xor eax,eax lea esi,[edi-30] cmp esi,9 ja near ptr M02_L25 cmp edi,30 jne short M02_L09 M02_L08: inc ecx mov esi,[ebp+10] cmp ecx,esi mov [ebp-1C],edx jae near ptr M02_L23 mov edi,[ebp+0C] movzx edx,word ptr [edi+ecx*2] cmp edx,30 mov [ebp-98],edi je near ptr M02_L12 mov edi,edx lea edx,[edi-30] cmp edx,9 mov edx,[ebp-1C] ja near ptr M02_L27 M02_L09: add edi,0FFFFFFD0 mov eax,edi sar eax,1F mov [ebp-4C],edi mov [ebp-50],eax inc ecx xor edi,edi M02_L10: mov esi,[ebp+10] cmp ecx,esi jae near ptr M02_L22 mov [ebp-1C],edx mov edx,[ebp+0C] mov [ebp-98],edx movzx eax,word ptr [edx+ecx*2] mov [ebp-18],eax lea ebx,[eax-30] cmp ebx,9 ja near ptr M02_L28 inc ecx mov [ebp-14],ecx push dword ptr [ebp-50] push dword ptr [ebp-4C] push 0 push 0A call CORINFO_HELP_LMUL mov ebx,[ebp-18] mov ecx,ebx sar ebx,1F add eax,ecx adc edx,ebx mov ebx,eax sub ebx,30 mov eax,edx sbb eax,0 mov [ebp-50],eax inc edi cmp edi,12 mov [ebp-4C],ebx mov ecx,[ebp-14] mov edx,[ebp-1C] jl short M02_L10 mov edi,[ebp-98] cmp ecx,esi jae near ptr M02_L22 mov [ebp-1C],edx movzx edx,word ptr [edi+ecx*2] lea eax,[edx-30] cmp eax,9 ja short M02_L11 inc ecx mov [ebp-14],ecx mov eax,[ebp-1C] mov [ebp-20],eax mov ebx,[ebp-4C] cmp ebx,9999999A mov eax,[ebp-50] sbb eax,19999999 jae short M02_L17 nop nop nop nop mov eax,[ebp-20] mov [ebp-2C],eax mov eax,ebx xor eax,99999999 mov [ebp-9C],eax mov eax,[ebp-50] xor eax,19999999 or eax,[ebp-9C] jne short M02_L16 mov eax,[ebp-2C] mov [ebp-24],eax mov [ebp-18],edx xor eax,eax cmp edx,35 setg al mov [ebp-28],eax jmp short M02_L18 M02_L11: mov [ebp-18],edx mov [ebp-98],edi jmp near ptr M02_L28 M02_L12: mov edx,[ebp-1C] jmp near ptr M02_L08 M02_L13: mov ecx,[ebp-14] jmp near ptr M02_L07 M02_L14: mov ecx,[ebp-14] jmp near ptr M02_L07 nop M02_L15: mov ecx,[ebp-14] jmp near ptr M02_L07 M02_L16: mov eax,[ebp-2C] mov [ebp-24],eax xor eax,eax mov [ebp-18],edx mov [ebp-28],eax jmp short M02_L18 M02_L17: mov eax,[ebp-20] mov [ebp-24],eax mov dword ptr [ebp-28],1 mov [ebp-18],edx M02_L18: mov eax,[ebp-24] or eax,[ebp-28] movzx eax,al mov [ebp-1C],eax push dword ptr [ebp-50] push ebx push 0 push 0A call CORINFO_HELP_LMUL mov ebx,[ebp-18] mov ecx,ebx sar ebx,1F add eax,ecx adc edx,ebx mov ebx,eax sub ebx,30 mov eax,edx sbb eax,0 mov [ebp-50],eax mov ecx,[ebp-14] cmp ecx,esi jae short M02_L21 movzx eax,word ptr [edi+ecx*2] lea edx,[eax-30] cmp edx,9 mov [ebp-18],eax ja short M02_L20 M02_L19: mov dword ptr [ebp-1C],1 inc ecx cmp ecx,esi jae short M02_L26 movzx eax,word ptr [edi+ecx*2] lea edx,[eax-30] cmp edx,9 jbe short M02_L19 mov [ebp-18],eax mov [ebp-98],edi mov [ebp-4C],ebx jmp short M02_L28 M02_L20: mov [ebp-98],edi mov [ebp-4C],ebx jmp short M02_L28 nop nop nop M02_L21: mov [ebp-4C],ebx mov edx,[ebp-1C] M02_L22: test edx,edx mov eax,[ebp-50] mov ebx,[ebp-4C] jne short M02_L26 M02_L23: mov edi,[ebp+8] mov [edi],ebx mov [edi+4],eax xor eax,eax M02_L24: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 0C M02_L25: mov edi,[ebp+8] mov eax,edi xor edx,edx mov [eax],edx mov [eax+4],edx mov eax,1 jmp short M02_L24 M02_L26: mov edi,[ebp+8] mov eax,edi xor ecx,ecx mov [eax],ecx mov [eax+4],ecx mov eax,2 jmp short M02_L24 M02_L27: xor edx,edx mov [ebp-18],edi mov [ebp-4C],ebx mov [ebp-50],eax mov [ebp-1C],edx M02_L28: mov eax,[ebp-18] cmp eax,20 je short M02_L29 add eax,0FFFFFFF7 cmp eax,4 ja short M02_L33 M02_L29: test byte ptr [ebp-10],2 je short M02_L25 mov edx,[ebp-98] mov edi,[ebp-50] inc ecx cmp ecx,esi jge short M02_L32 M02_L30: cmp ecx,esi jae short M02_L36 movzx ebx,word ptr [edx+ecx*2] cmp ebx,20 je short M02_L31 add ebx,0FFFFFFF7 cmp ebx,4 ja short M02_L32 M02_L31: inc ecx cmp ecx,esi jl short M02_L30 M02_L32: cmp ecx,esi mov [ebp-50],edi jae short M02_L34 M02_L33: push dword ptr [ebp+10] push dword ptr [ebp+0C] call dword ptr ds:[8EBD2D0] test eax,eax mov edx,[ebp-1C] jne near ptr M02_L22 jmp near ptr M02_L25 M02_L34: mov edx,[ebp-1C] jmp near ptr M02_L22 M02_L35: call dword ptr ds:[8F75270] int 3 M02_L36: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 1266 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)