Skip to content

[Perf] Windows/x64: 5 Improvements on 3/13/2023 6:11:08 PM #13963

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

Closed
performanceautofiler bot opened this issue Mar 14, 2023 · 3 comments
Closed

[Perf] Windows/x64: 5 Improvements on 3/13/2023 6:11:08 PM #13963

performanceautofiler bot opened this issue Mar 14, 2023 · 3 comments

Comments

@performanceautofiler
Copy link

No description provided.

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Mar 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 7e3bf878c105ea6114e56d3e6e3014c5480cb060
Compare 1c8d37af80667daffb3cb80ce0fe915621e8f039
Diff Diff

Improvements in StoreBlock.LocalAddress

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
CopyBlock128 - Duration of single invocation 5.48 ns 1.90 ns 0.35 0.25 False 46.08491572434393 11.332029283350254 0.2458945428289937) Trace Trace

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'StoreBlock.LocalAddress*'

Payloads

Baseline
Compare

Histogram

StoreBlock.LocalAddress.CopyBlock128


Description of detection logic

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.8958136649814668 < 4.92498738420102.
IsChangePoint: Marked as a change because one of 3/13/2023 2:14:21 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM.
IsImprovementStdDev: Marked as improvement because 229.28664346585524 (T) = (0 -1.9066836781921797) / Math.Sqrt((0.04886774044537416 / (299)) + (0.0001247246205767902 / (3))) is greater than 1.9679030112610798 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (3) - 2, .975) and 0.6325999217612724 = (5.189665955795642 - 1.9066836781921797) / 5.189665955795642 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; StoreBlock.LocalAddress.CopyBlock128()
       push      rdi
       push      rsi
       sub       rsp,108
       lea       rsi,[rcx+80]
       lea       rcx,[rsp+88]
       mov       rdx,rsi
       mov       r8d,80
       call      CORINFO_HELP_MEMCPY
       xor       edi,edi
       nop       dword ptr [rax+rax]
M00_L00:
       lea       rcx,[rsp+8]
       lea       rdx,[rsp+88]
       mov       r8d,80
       call      CORINFO_HELP_MEMCPY
       inc       edi
       cmp       edi,64
       jl        short M00_L00
       mov       rcx,rsi
       lea       rdx,[rsp+8]
       mov       r8d,80
       call      CORINFO_HELP_MEMCPY
       nop
       add       rsp,108
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 109

Compare Jit Disasm

; StoreBlock.LocalAddress.CopyBlock128()
       sub       rsp,108
       vzeroupper
       add       rcx,80
       vmovdqu   ymm0,ymmword ptr [rcx]
       vmovdqu   ymmword ptr [rsp+88],ymm0
       vmovdqu   ymm0,ymmword ptr [rcx+20]
       vmovdqu   ymmword ptr [rsp+0A8],ymm0
       vmovdqu   ymm0,ymmword ptr [rcx+40]
       vmovdqu   ymmword ptr [rsp+0C8],ymm0
       vmovdqu   ymm0,ymmword ptr [rcx+60]
       vmovdqu   ymmword ptr [rsp+0E8],ymm0
       xor       eax,eax
M00_L00:
       vmovdqu   ymm0,ymmword ptr [rsp+88]
       vmovdqu   ymmword ptr [rsp+8],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+0A8]
       vmovdqu   ymmword ptr [rsp+28],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+0C8]
       vmovdqu   ymmword ptr [rsp+48],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+0E8]
       vmovdqu   ymmword ptr [rsp+68],ymm0
       inc       eax
       cmp       eax,64
       jl        short M00_L00
       vmovdqu   ymm0,ymmword ptr [rsp+8]
       vmovdqu   ymmword ptr [rcx],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+28]
       vmovdqu   ymmword ptr [rcx+20],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+48]
       vmovdqu   ymmword ptr [rcx+40],ymm0
       vmovdqu   ymm0,ymmword ptr [rsp+68]
       vmovdqu   ymmword ptr [rcx+60],ymm0
       add       rsp,108
       ret
; Total bytes of code 192

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 7e3bf878c105ea6114e56d3e6e3014c5480cb060
Compare 1c8d37af80667daffb3cb80ce0fe915621e8f039
Diff Diff

Improvements in StoreBlock.AnyLocation

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
CopyBlock128 - Duration of single invocation 5.18 ns 3.16 ns 0.61 0.26 False Trace Trace

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'StoreBlock.AnyLocation*'

Payloads

Baseline
Compare

Histogram

StoreBlock.AnyLocation.CopyBlock128


Description of detection logic

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 3.1647339474207405 < 5.0586232425190145.
IsChangePoint: Marked as a change because one of 1/31/2023 8:52:14 PM, 2/1/2023 8:39:12 AM, 3/13/2023 2:14:21 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM.
IsImprovementStdDev: Marked as improvement because 28.488804607766067 (T) = (0 -3.171808483130024) / Math.Sqrt((1.4124493310282522 / (299)) + (0.00021094953578719092 / (3))) is greater than 1.9679030112610798 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (3) - 2, .975) and 0.38344245583696474 = (5.1443835423921245 - 3.171808483130024) / 5.1443835423921245 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; StoreBlock.AnyLocation.CopyBlock128()
       push      rdi
       push      rsi
       sub       rsp,28
       mov       rsi,rcx
       xor       edi,edi
       nop       dword ptr [rax+rax]
M00_L00:
       mov       rdx,[rsi+10]
       cmp       edi,[rdx+8]
       jae       short M00_L01
       mov       ecx,edi
       lea       rax,[rdx+rcx+10]
       mov       rdx,[rsi+8]
       cmp       edi,[rdx+8]
       jae       short M00_L01
       lea       rdx,[rdx+rcx+10]
       mov       rcx,rax
       mov       r8d,80
       call      CORINFO_HELP_MEMCPY
       add       edi,80
       cmp       edi,1000
       jl        short M00_L00
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
M00_L01:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 87

Compare Jit Disasm

; StoreBlock.AnyLocation.CopyBlock128()
       sub       rsp,28
       vzeroupper
       xor       eax,eax
M00_L00:
       mov       rdx,[rcx+10]
       cmp       eax,[rdx+8]
       jae       short M00_L01
       mov       r8d,eax
       lea       rdx,[rdx+r8+10]
       mov       r9,[rcx+8]
       cmp       eax,[r9+8]
       jae       short M00_L01
       lea       r8,[r9+r8+10]
       vmovdqu   ymm0,ymmword ptr [r8]
       vmovdqu   ymmword ptr [rdx],ymm0
       vmovdqu   ymm0,ymmword ptr [r8+20]
       vmovdqu   ymmword ptr [rdx+20],ymm0
       vmovdqu   ymm0,ymmword ptr [r8+40]
       vmovdqu   ymmword ptr [rdx+40],ymm0
       vmovdqu   ymm0,ymmword ptr [r8+60]
       vmovdqu   ymmword ptr [rdx+60],ymm0
       add       eax,80
       cmp       eax,1000
       jl        short M00_L00
       add       rsp,28
       ret
M00_L01:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 106

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 7e3bf878c105ea6114e56d3e6e3014c5480cb060
Compare 1c8d37af80667daffb3cb80ce0fe915621e8f039
Diff Diff

Improvements in System.Tests.Perf_Single

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
TryParse - Duration of single invocation 100.72 ns 91.77 ns 0.91 0.04 False 1108.584517328376 1070.3114685840212 0.9654757502507877) Trace Trace
TryParse - Duration of single invocation 104.19 ns 96.39 ns 0.93 0.02 False 1131.8642942200238 1099.4155200159018 0.9713315683074156) Trace Trace
Parse - Duration of single invocation 104.53 ns 97.21 ns 0.93 0.02 False 1142.585105759653 1103.8929933088157 0.96613634095544) Trace Trace

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Single*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_Single.TryParse(value: "3.4028235E+38")


Description of detection logic

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 91.76733935559746 < 95.78953827555955.
IsChangePoint: Marked as a change because one of 1/12/2023 4:43:01 PM, 2/9/2023 1:20:08 AM, 3/13/2023 2:14:21 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM.
IsImprovementStdDev: Marked as improvement because 51.91171606456627 (T) = (0 -91.81445894572009) / Math.Sqrt((10.37094332687647 / (299)) + (0.004325886673459047 / (3))) is greater than 1.9679030112610798 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (3) - 2, .975) and 0.09703804956208541 = (101.68142622310089 - 91.81445894572009) / 101.68142622310089 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Tests.Perf_Single.TryParse(System.String)
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       test      rdx,rdx
       jne       short M00_L00
       xor       edx,edx
       mov       [rsp+34],edx
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       call      qword ptr [7FFBEEA8F8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FFBEE89DEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
M00_L01:
       nop
       add       rsp,38
       ret
; Total bytes of code 88
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFBEE6D4EC8
       mov       edx,254
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1FE23800470
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1FE23800450
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,23EB8237408
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFBEE899030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFBEE76D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,328BE52BE078
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FFBEE89DEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FFBEEBE1810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FFBEE94B750]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FFBEE94B780]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE773498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE773498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FFBEE94B750]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FFBEE94B750]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,328BE52BE078
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FFBEE94B750]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FFBEE94B780]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE773498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FFBEE94B750]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE773498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,328BE52BE078
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FFBEE94B750]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FFBEE89F060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,328BE52BE078
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FFBEE94B750]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FFBEE94B750]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FFBEE94B750]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FFBEEABF4E0]
       int       3
M02_L65:
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FFBEE94B780]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FFBEE94B780]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

Compare Jit Disasm

; System.Tests.Perf_Single.TryParse(System.String)
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       test      rdx,rdx
       jne       short M00_L00
       xor       edx,edx
       mov       [rsp+34],edx
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       call      qword ptr [7FFA8497F288]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FFA8478DEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
M00_L01:
       nop
       add       rsp,38
       ret
; Total bytes of code 88
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFA845C4F20
       mov       edx,253
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1A727000460
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1A727000440
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,1E7BB927390
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFA84789030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFA8465D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,77702B8F57BA
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FFA8478DEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FFA84AD3810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FFA8488BA38]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FFA8488BA68]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84663498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84663498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FFA8488BA38]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FFA8488BA38]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,77702B8F57BA
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FFA8488BA38]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FFA8488BA68]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84663498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FFA8488BA38]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84663498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,77702B8F57BA
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FFA8488BA38]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FFA8478F060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,77702B8F57BA
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FFA8488BA38]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FFA8488BA38]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FFA8488BA38]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FFA849C1060]
       int       3
M02_L65:
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FFA8488BA68]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FFA8488BA68]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

System.Tests.Perf_Single.TryParse(value: "-3.4028235E+38")


Description of detection logic

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 96.39158128089268 < 98.83422234414249.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/9/2023 4:27:10 AM, 3/13/2023 2:14:21 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM.
IsImprovementStdDev: Marked as improvement because 59.06594223741931 (T) = (0 -96.46464515790721) / Math.Sqrt((5.733759953867407 / (299)) + (0.004058009424841781 / (3))) is greater than 1.9679030112610798 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (3) - 2, .975) and 0.08065523944922799 = (104.92760637490991 - 96.46464515790721) / 104.92760637490991 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Tests.Perf_Single.TryParse(System.String)
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       test      rdx,rdx
       jne       short M00_L00
       xor       edx,edx
       mov       [rsp+34],edx
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       call      qword ptr [7FFBEEA9F8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FFBEE8ADEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
M00_L01:
       nop
       add       rsp,38
       ret
; Total bytes of code 88
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFBEE6E4EC8
       mov       edx,254
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1F370800470
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,1F370800450
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,234051A7408
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFBEE8A9030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFBEE77D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,6C6990FA9810
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FFBEE8ADEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FFBEEBF1810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FFBEE95B750]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FFBEE95B780]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE783498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE783498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FFBEE95B750]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FFBEE95B750]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,6C6990FA9810
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FFBEE95B750]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FFBEE95B780]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE783498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FFBEE95B750]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFBEE783498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,6C6990FA9810
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FFBEE95B750]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FFBEE8AF060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,6C6990FA9810
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FFBEE95B750]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FFBEE95B750]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FFBEE95B750]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FFBEEACF4E0]
       int       3
M02_L65:
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FFBEE95B780]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FFBEE95B780]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

Compare Jit Disasm

; System.Tests.Perf_Single.TryParse(System.String)
       sub       rsp,38
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       xor       eax,eax
       mov       [rsp+30],rax
       test      rdx,rdx
       jne       short M00_L00
       xor       edx,edx
       mov       [rsp+34],edx
       xor       eax,eax
       jmp       short M00_L01
M00_L00:
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
       mov       [rsp+20],rax
       mov       [rsp+28],edx
       call      qword ptr [7FFA8499F288]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FFA847ADEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
M00_L01:
       nop
       add       rsp,38
       ret
; Total bytes of code 88
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFA845E4F20
       mov       edx,253
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,29E3D800460
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,29E3D800440
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,2DED2317390
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFA847A9030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFA8467D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,0CB3E49414B56
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FFA847ADEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FFA84AF3810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FFA848ABA38]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FFA848ABA68]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84683498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84683498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FFA848ABA38]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FFA848ABA38]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,0CB3E49414B56
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FFA848ABA38]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FFA848ABA68]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84683498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FFA848ABA38]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84683498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,0CB3E49414B56
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FFA848ABA38]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FFA847AF060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,0CB3E49414B56
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FFA848ABA38]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FFA848ABA38]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FFA848ABA38]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FFA849E1060]
       int       3
M02_L65:
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FFA848ABA68]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FFA848ABA68]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

System.Tests.Perf_Single.Parse(value: "-3.4028235E+38")


Description of detection logic

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 97.21013373989233 < 99.1703054807976.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/9/2023 4:27:10 AM, 2/16/2023 9:36:08 AM, 3/13/2023 2:14:21 PM, 3/14/2023 5:57:45 AM falls between 3/5/2023 5:50:49 PM and 3/14/2023 5:57:45 AM.
IsImprovementStdDev: Marked as improvement because 45.54216606990395 (T) = (0 -97.35936283702135) / Math.Sqrt((4.053396877870897 / (299)) + (0.056286291572007284 / (3))) is greater than 1.9679030112610798 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (3) - 2, .975) and 0.0775703153274935 = (105.54664973903913 - 97.35936283702135) / 105.54664973903913 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Tests.Perf_Single.Parse(System.String)
       push      rdi
       push      rsi
       sub       rsp,38
       vzeroupper
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M00_L00
       lea       rsi,[rdx+0C]
       mov       edi,[rdx+8]
       mov       [rsp+20],rsi
       mov       [rsp+28],edi
       call      qword ptr [7FFA8498F8B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FFA8479DEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       test      eax,eax
       je        short M00_L01
       vmovss    xmm0,dword ptr [rsp+34]
       add       rsp,38
       pop       rsi
       pop       rdi
       ret
M00_L00:
       mov       ecx,11
       call      qword ptr [7FFA849BF7F8]
       int       3
M00_L01:
       mov       [rsp+20],rsi
       mov       [rsp+28],edi
       lea       rdx,[rsp+20]
       mov       ecx,1
       xor       r8d,r8d
       call      qword ptr [7FFA8479DF60]
       int       3
; Total bytes of code 125
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FFA845D4EC8
       mov       edx,254
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,225B6000470
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,225B6000450
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,2664A937408
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FFA84799030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FFA8466D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,0F95CA3816F4E
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FFA8479DEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FFA84AE1810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FFA8484B750]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FFA8484B780]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84673498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84673498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FFA8484B750]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FFA8484B750]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,0F95CA3816F4E
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FFA8484B750]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FFA8484B780]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84673498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FFA8484B750]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FFA84673498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,0F95CA3816F4E
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FFA8484B750]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FFA8479F060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,0F95CA3816F4E
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FFA8484B750]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FFA8484B750]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FFA8484B750]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FFA849BF4E0]
       int       3
M02_L65:
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FFA8484B780]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FFA8484B780]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

Compare Jit Disasm

; System.Tests.Perf_Single.Parse(System.String)
       push      rdi
       push      rsi
       sub       rsp,38
       vzeroupper
       xor       eax,eax
       mov       [rsp+20],rax
       test      rdx,rdx
       je        short M00_L00
       lea       rsi,[rdx+0C]
       mov       edi,[rdx+8]
       mov       [rsp+20],rsi
       mov       [rsp+28],edi
       call      qword ptr [7FF8D843F288]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       r8,rax
       lea       rcx,[rsp+20]
       lea       r9,[rsp+34]
       mov       edx,0E7
       call      qword ptr [7FF8D824DEA0]; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       test      eax,eax
       je        short M00_L01
       vmovss    xmm0,dword ptr [rsp+34]
       add       rsp,38
       pop       rsi
       pop       rdi
       ret
M00_L00:
       mov       ecx,11
       call      qword ptr [7FF8D8481378]
       int       3
M00_L01:
       mov       [rsp+20],rsi
       mov       [rsp+28],edi
       lea       rdx,[rsp+20]
       mov       ecx,1
       xor       r8d,r8d
       call      qword ptr [7FF8D824DF60]
       int       3
; Total bytes of code 125
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       sub       rsp,28
       mov       rcx,7FF8D8084F20
       mov       edx,253
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       rcx,[rax+8]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,216D0C00460
       mov       rcx,[rcx]
       test      rcx,rcx
       jne       short M01_L00
       mov       rcx,216D0C00440
       mov       rcx,[rcx]
       test      rcx,rcx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [rcx+61],0
       jne       short M01_L01
       mov       rax,[rcx+18]
       test      rax,rax
       je        short M01_L01
       add       rsp,28
       ret
M01_L01:
       mov       rdx,257655C7390
       mov       rax,[rcx]
       mov       rax,[rax+50]
       call      qword ptr [rax]
       mov       rdx,rax
       mov       rax,rdx
       test      rax,rax
       je        short M01_L02
       mov       rcx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [rax],rcx
       jne       short M01_L04
M01_L02:
       add       rsp,28
       ret
M01_L03:
       call      qword ptr [7FF8D8249030]
       mov       rcx,rax
       jmp       short M01_L00
M01_L04:
       call      qword ptr [7FF8D811D8B8]
       int       3
; Total bytes of code 157
; System.Number.TryParseSingle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Single ByRef)
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,78
       vzeroupper
       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
       vmovdqa   xmmword ptr [rbp+40],xmm4
       mov       [rbp+50],rax
       mov       rax,870CB9B05DA1
       mov       [rbp],rax
       mov       rdi,rcx
       mov       rsi,r8
       mov       rbx,r9
       test      [rsp],esp
       sub       rsp,80
       lea       rcx,[rsp+20]
       mov       byte ptr [rbp+42],3
       mov       [rbp+48],rcx
       mov       dword ptr [rbp+50],72
       lea       rcx,[rbp+48]
       cmp       dword ptr [rcx+8],0
       jbe       near ptr M02_L69
       mov       rcx,[rcx]
       mov       byte ptr [rcx],0
       vmovdqu   xmm0,xmmword ptr [rdi]
       vmovdqu   xmmword ptr [rbp+18],xmm0
       lea       rcx,[rbp+18]
       lea       r8,[rbp+38]
       mov       r9,rsi
       call      qword ptr [7FF8D824DEB8]; System.Number.TryStringToNumber(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, NumberBuffer ByRef, System.Globalization.NumberFormatInfo)
       test      eax,eax
       jne       near ptr M02_L44
       lea       rcx,[rbp+28]
       mov       rdx,rdi
       call      qword ptr [7FF8D8593810]
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        near ptr M02_L55
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L00:
       cmp       r8d,edx
       je        near ptr M02_L56
M02_L01:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+68]
       test      r9,r9
       je        near ptr M02_L51
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L02:
       cmp       r8d,eax
       je        near ptr M02_L52
M02_L03:
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       r9,[rsi+58]
       test      r9,r9
       je        near ptr M02_L47
       lea       rdx,[r9+0C]
       mov       eax,[r9+8]
M02_L04:
       cmp       r8d,eax
       je        near ptr M02_L48
M02_L05:
       mov       rcx,[rbp+28]
       mov       r9d,[rbp+30]
       mov       r10,[rsi+20]
       test      r10,r10
       je        short M02_L08
       lea       rdx,[r10+0C]
       mov       r8d,[r10+8]
M02_L06:
       cmp       r8d,r9d
       jg        short M02_L09
       cmp       r8d,8
       jl        short M02_L07
       call      qword ptr [7FF8D834BA38]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L07:
       call      qword ptr [7FF8D834BA68]
       mov       edi,eax
       jmp       near ptr M02_L59
M02_L08:
       xor       edx,edx
       xor       r8d,r8d
       jmp       short M02_L06
M02_L09:
       xor       edi,edi
M02_L10:
       test      edi,edi
       je        near ptr M02_L24
       mov       rdx,[rsi+20]
       mov       ecx,[rdx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       r8,[rbp+28]
       mov       eax,ecx
       lea       r8,[r8+rax*2]
       mov       eax,[rbp+30]
       sub       eax,ecx
       mov       [rbp+28],r8
       mov       [rbp+30],eax
       mov       rcx,[rsi+60]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FF8D8123498]
       test      eax,eax
       jne       short M02_L13
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rdx,[rsi+60]
       test      rdx,rdx
       je        short M02_L12
       lea       rax,[rdx+0C]
       mov       edx,[rdx+8]
M02_L11:
       cmp       r8d,edx
       jne       short M02_L13
       test      edx,edx
       je        short M02_L16
       jmp       short M02_L14
M02_L12:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       short M02_L11
M02_L13:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+20]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FF8D8123498]
       test      eax,eax
       jne       short M02_L22
       mov       rcx,[rbp+28]
       mov       r8d,[rbp+30]
       mov       rax,[rsi+58]
       test      rax,rax
       jne       short M02_L18
       jmp       short M02_L17
M02_L14:
       cmp       r8d,8
       jl        near ptr M02_L60
       mov       rdx,rax
       call      qword ptr [7FF8D834BA38]
M02_L15:
       test      eax,eax
       je        short M02_L13
M02_L16:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L17:
       xor       edx,edx
       xor       eax,eax
       jmp       short M02_L19
M02_L18:
       lea       rdx,[rax+0C]
       mov       eax,[rax+8]
M02_L19:
       cmp       r8d,eax
       jne       short M02_L22
       test      eax,eax
       je        short M02_L21
       cmp       r8d,8
       jl        near ptr M02_L61
       call      qword ptr [7FF8D834BA38]
M02_L20:
       test      eax,eax
       je        short M02_L22
M02_L21:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L22:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,870CB9B05DA1
       cmp       [rbp],rcx
       je        short M02_L23
       call      CORINFO_HELP_FAIL_FAST
M02_L23:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L24:
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       mov       r8,[rsi+28]
       test      r8,r8
       je        short M02_L27
       lea       rax,[r8+0C]
       mov       r8d,[r8+8]
M02_L25:
       cmp       r8d,edx
       jg        short M02_L28
       cmp       r8d,8
       jl        short M02_L26
       mov       rdx,rax
       call      qword ptr [7FF8D834BA38]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L26:
       mov       rdx,rax
       call      qword ptr [7FF8D834BA68]
       mov       edi,eax
       jmp       near ptr M02_L62
M02_L27:
       xor       eax,eax
       xor       r8d,r8d
       jmp       short M02_L25
M02_L28:
       xor       edi,edi
M02_L29:
       test      edi,edi
       je        short M02_L32
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FF8D8123498]
       test      eax,eax
       jne       short M02_L32
       mov       rcx,[rsi+28]
       mov       ecx,[rcx+8]
       cmp       ecx,[rbp+30]
       ja        near ptr M02_L64
       mov       rdx,[rbp+28]
       mov       r8d,ecx
       lea       rax,[rdx+r8*2]
       mov       r8d,[rbp+30]
       sub       r8d,ecx
       mov       rcx,[rsi+58]
       test      rcx,rcx
       je        short M02_L31
       lea       rdx,[rcx+0C]
       mov       r9d,[rcx+8]
M02_L30:
       mov       rcx,rax
       cmp       r8d,r9d
       jne       short M02_L32
       test      r9d,r9d
       je        short M02_L35
       jmp       short M02_L33
M02_L31:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L30
M02_L32:
       cmp       byte ptr [rsi+0BE],0
       je        near ptr M02_L39
       mov       rcx,[rbp+28]
       mov       edx,[rbp+30]
       test      edx,edx
       je        near ptr M02_L39
       test      edx,edx
       je        near ptr M02_L69
       cmp       word ptr [rcx],2D
       jne       near ptr M02_L39
       jmp       short M02_L36
M02_L33:
       cmp       r8d,8
       jl        near ptr M02_L63
       call      qword ptr [7FF8D834BA38]
M02_L34:
       test      eax,eax
       je        short M02_L32
M02_L35:
       mov       dword ptr [rbx],0FFC00000
       jmp       near ptr M02_L45
M02_L36:
       mov       rcx,[rsi+58]
       mov       rdx,[rsi+28]
       mov       r8d,5
       cmp       [rcx],ecx
       call      qword ptr [7FF8D8123498]
       test      eax,eax
       jne       short M02_L39
       mov       rax,[rsi+58]
       mov       rcx,rax
       cmp       word ptr [rcx+0C],2D
       je        short M02_L39
       cmp       dword ptr [rbp+30],1
       jb        near ptr M02_L64
       mov       rcx,[rbp+28]
       add       rcx,2
       mov       r8d,[rbp+30]
       dec       r8d
       test      rax,rax
       je        short M02_L38
       lea       rdx,[rax+0C]
       mov       r9d,[rax+8]
M02_L37:
       cmp       r8d,r9d
       jne       short M02_L39
       test      r9d,r9d
       je        short M02_L43
       jmp       short M02_L41
M02_L38:
       xor       edx,edx
       xor       r9d,r9d
       jmp       short M02_L37
M02_L39:
       xor       eax,eax
       mov       [rbx],eax
       mov       rcx,870CB9B05DA1
       cmp       [rbp],rcx
       je        short M02_L40
       call      CORINFO_HELP_FAIL_FAST
M02_L40:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L41:
       cmp       r8d,8
       jl        near ptr M02_L65
       call      qword ptr [7FF8D834BA38]
M02_L42:
       test      eax,eax
       je        short M02_L39
M02_L43:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L44:
       lea       rcx,[rbp+38]
       call      qword ptr [7FF8D824F060]; System.Number.NumberToSingle(NumberBuffer ByRef)
       vmovss    dword ptr [rbx],xmm0
M02_L45:
       mov       eax,1
       mov       rcx,870CB9B05DA1
       cmp       [rbp],rcx
       je        short M02_L46
       call      CORINFO_HELP_FAIL_FAST
M02_L46:
       nop
       lea       rsp,[rbp+58]
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M02_L47:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L04
M02_L48:
       test      eax,eax
       je        short M02_L50
       cmp       r8d,8
       jl        near ptr M02_L66
       call      qword ptr [7FF8D834BA38]
M02_L49:
       test      eax,eax
       je        near ptr M02_L05
M02_L50:
       mov       dword ptr [rbx],0FFC00000
       jmp       short M02_L45
M02_L51:
       xor       edx,edx
       xor       eax,eax
       jmp       near ptr M02_L02
M02_L52:
       test      eax,eax
       je        short M02_L54
       cmp       r8d,8
       jl        near ptr M02_L67
       call      qword ptr [7FF8D834BA38]
M02_L53:
       test      eax,eax
       je        near ptr M02_L03
M02_L54:
       mov       dword ptr [rbx],0FF800000
       jmp       short M02_L45
M02_L55:
       xor       edx,edx
       xor       eax,eax
       mov       r9d,eax
       mov       rax,rdx
       mov       edx,r9d
       jmp       near ptr M02_L00
M02_L56:
       test      edx,edx
       je        short M02_L58
       cmp       r8d,8
       jl        short M02_L68
       mov       rdx,rax
       call      qword ptr [7FF8D834BA38]
M02_L57:
       test      eax,eax
       je        near ptr M02_L01
M02_L58:
       mov       dword ptr [rbx],7F800000
       jmp       near ptr M02_L45
M02_L59:
       jmp       near ptr M02_L10
M02_L60:
       mov       rdx,rax
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L15
M02_L61:
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L20
M02_L62:
       jmp       near ptr M02_L29
M02_L63:
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L34
M02_L64:
       call      qword ptr [7FF8D8481060]
       int       3
M02_L65:
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L42
M02_L66:
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L49
M02_L67:
       call      qword ptr [7FF8D834BA68]
       jmp       near ptr M02_L53
M02_L68:
       mov       rdx,rax
       call      qword ptr [7FF8D834BA68]
       jmp       short M02_L57
M02_L69:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1356

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@AndyAyersMS
Copy link
Member

dotnet/runtime#83274

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant