Skip to content

Regression in System.Tests.Perf_Int64.TryParseSpan #79293

@performanceautofiler

Description

@performanceautofiler

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 77de7840c7ad806cd5ad5dc9555ad3d3bed2a6e5
Compare 1771d63827387b49dcd8c33b95f1512f4f11e368
Diff Diff

Regressions in System.Tests.Perf_Int64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
TryParseSpan - Duration of single invocation 23.84 ns 27.38 ns 1.15 0.31 False Trace Trace

graph
Test Report

Repro

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

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_Int64.TryParseSpan(value: "12345")


Description of detection logic

IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small.
IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline.
IsRegressionWindowed: Marked as regression because 27.379723803084094 > 25.140698308278402.
IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/27/2022 4:37:47 PM, 12/6/2022 5:44:36 AM falls between 11/27/2022 4:37:47 PM and 12/6/2022 5:44:36 AM.
IsRegressionStdDev: Marked as regression because -7.496247945314253 (T) = (0 -29.569384362371032) / Math.Sqrt((2.560685666491774 / (11)) + (5.845016865811748 / (40))) is less than -2.0095752371279447 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (11) + (40) - 2, .025) and -0.18490875952436833 = (24.954988411293723 - 29.569384362371032) / 24.954988411293723 is less than -0.05.
IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Tests.Perf_Int64.TryParseSpan(System.String)
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],eax
       test      edx,edx
       je        short M00_L01
       lea       eax,[edx+8]
       mov       ecx,[edx+4]
M00_L00:
       push      ecx
       push      eax
       call      dword ptr ds:[0A6D18B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       edx,eax
       lea       ecx,[ebp-8]
       push      ecx
       mov       ecx,7
       call      dword ptr ds:[866BBD0]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef)
       test      eax,eax
       sete      al
       movzx     eax,al
       mov       esp,ebp
       pop       ebp
       ret
M00_L01:
       xor       eax,eax
       xor       ecx,ecx
       jmp       short M00_L00
; Total bytes of code 67
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       push      ebp
       mov       ebp,esp
       mov       ecx,2C04D58
       mov       edx,24D
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       ecx,[eax+4]
       test      ecx,ecx
       jne       short M01_L00
       mov       ecx,ds:[6E212A4]
       test      ecx,ecx
       jne       short M01_L00
       mov       ecx,ds:[6E21294]
       test      ecx,ecx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [ecx+31],0
       jne       short M01_L01
       mov       eax,[ecx+0C]
       test      eax,eax
       je        short M01_L01
       pop       ebp
       ret
M01_L01:
       mov       edx,80348E0
       mov       eax,[ecx]
       mov       eax,[eax+30]
       call      dword ptr [eax]
       mov       edx,eax
       mov       eax,edx
       test      eax,eax
       je        short M01_L02
       mov       ecx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [eax],ecx
       jne       short M01_L04
M01_L02:
       pop       ebp
       ret
M01_L03:
       call      dword ptr ds:[8667030]
       mov       ecx,eax
       jmp       short M01_L00
M01_L04:
       call      dword ptr ds:[4C7B8B8]
       int       3
; Total bytes of code 108
; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef)
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       sub       esp,4C
       mov       esi,ecx
       mov       edi,[ebp+10]
       test      edi,edi
       je        short M02_L02
       xor       ebx,ebx
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax]
       test      esi,1
       je        short M02_L00
       cmp       eax,20
       je        near ptr M02_L18
       lea       ecx,[eax-9]
       cmp       ecx,4
       jbe       near ptr M02_L18
M02_L00:
       mov       dword ptr [ebp-18],1
       test      esi,4
       je        short M02_L01
       cmp       byte ptr [edx+71],0
       je        near ptr M02_L21
       cmp       eax,2D
       je        near ptr M02_L19
       cmp       eax,2B
       je        near ptr M02_L20
M02_L01:
       xor       edx,edx
       mov       [ebp-1C],edx
       xor       edi,edi
       xor       edx,edx
       lea       ecx,[eax-30]
       cmp       ecx,9
       jbe       short M02_L06
M02_L02:
       mov       ebx,[ebp+8]
       mov       eax,ebx
       xor       edx,edx
       mov       [eax],edx
       mov       [eax+4],edx
       mov       eax,1
M02_L03:
       lea       esp,[ebp-0C]
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret       0C
M02_L04:
       add       eax,0FFFFFFD0
       mov       edx,eax
       sar       edx,1F
       mov       edi,eax
       inc       ebx
       xor       eax,eax
       mov       [ebp-20],eax
M02_L05:
       cmp       ebx,[ebp+10]
       jae       short M02_L08
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       mov       [ebp-14],ecx
       lea       eax,[ecx-30]
       cmp       eax,9
       ja        short M02_L10
       inc       ebx
       push      edx
       push      edi
       push      0
       push      0A
       call      CORINFO_HELP_LMUL
       mov       edi,[ebp-14]
       mov       ecx,edi
       sar       edi,1F
       add       eax,ecx
       adc       edx,edi
       mov       edi,eax
       sub       edi,30
       sbb       edx,0
       mov       eax,edx
       mov       edx,[ebp-20]
       inc       edx
       cmp       edx,11
       jge       near ptr M02_L27
       mov       [ebp-20],edx
       mov       edx,eax
       jmp       short M02_L05
M02_L06:
       cmp       eax,30
       jne       short M02_L04
M02_L07:
       inc       ebx
       cmp       ebx,[ebp+10]
       jb        near ptr M02_L28
M02_L08:
       push      edx
       push      edi
       mov       edi,[ebp-18]
       mov       eax,edi
       sar       eax,1F
       push      eax
       push      edi
       call      CORINFO_HELP_LMUL
       mov       ebx,[ebp+8]
       mov       [ebx],eax
       mov       [ebx+4],edx
       xor       eax,eax
       jmp       near ptr M02_L03
M02_L09:
       mov       ebx,[ebp+8]
       mov       eax,ebx
       xor       edx,edx
       mov       [eax],edx
       mov       [eax+4],edx
       mov       eax,2
       jmp       near ptr M02_L03
M02_L10:
       mov       ecx,[ebp-14]
       cmp       ecx,20
       je        short M02_L11
       add       ecx,0FFFFFFF7
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       je        short M02_L12
M02_L11:
       test      esi,2
       mov       [ebp-2C],edx
       je        near ptr M02_L02
       mov       esi,[ebp-18]
       jmp       short M02_L14
M02_L12:
       mov       [ebp-2C],edx
       jmp       short M02_L16
M02_L13:
       cmp       ebx,[ebp+10]
       jae       near ptr M02_L32
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       cmp       ecx,20
       je        short M02_L14
       add       ecx,0FFFFFFF7
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       je        short M02_L15
M02_L14:
       inc       ebx
       cmp       ebx,[ebp+10]
       jl        short M02_L13
M02_L15:
       cmp       ebx,[ebp+10]
       mov       [ebp-18],esi
       jae       short M02_L17
M02_L16:
       push      dword ptr [ebp+10]
       push      dword ptr [ebp+0C]
       mov       ecx,ebx
       call      dword ptr ds:[866D288]
       test      eax,eax
       mov       eax,[ebp-2C]
       jne       near ptr M02_L31
       jmp       near ptr M02_L02
M02_L17:
       mov       eax,[ebp-2C]
       jmp       near ptr M02_L31
M02_L18:
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       cmp       eax,20
       je        short M02_L18
       lea       ecx,[eax-9]
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       jne       short M02_L18
       jmp       near ptr M02_L00
M02_L19:
       mov       ecx,0FFFFFFFF
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       jmp       near ptr M02_L25
M02_L20:
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       jmp       near ptr M02_L25
M02_L21:
       cmp       byte ptr [edx+72],0
       je        short M02_L22
       mov       [ebp-14],eax
       cmp       eax,2D
       mov       eax,[ebp-14]
       jne       short M02_L22
       mov       ecx,0FFFFFFFF
       inc       ebx
       cmp       ebx,edi
       mov       [ebp-18],ecx
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       jmp       near ptr M02_L25
M02_L22:
       cmp       ebx,edi
       jbe       short M02_L23
       call      dword ptr ds:[86C9A08]
       int       3
M02_L23:
       mov       ecx,[ebp+0C]
       lea       ecx,[ecx+ebx*2]
       sub       edi,ebx
       mov       [ebp+0C],ecx
       mov       [ebp+10],edi
       xor       ebx,ebx
       mov       edi,[edx+10]
       mov       [ebp-48],edi
       mov       edx,[edx+14]
       mov       [ebp-4C],edx
       test      edi,edi
       je        short M02_L24
       xor       ecx,ecx
       cmp       dword ptr [edi+4],0
       sete      cl
       test      ecx,ecx
       jne       short M02_L24
       mov       ecx,[ebp+0C]
       mov       edx,[ebp+10]
       mov       [ebp-28],edx
       lea       edx,[edi+8]
       mov       edi,[edi+4]
       cmp       edi,[ebp-28]
       jg        short M02_L24
       mov       [ebp-14],eax
       add       edi,edi
       push      edi
       call      dword ptr ds:[801F120]
       test      eax,eax
       mov       eax,[ebp-14]
       je        short M02_L24
       mov       edi,[ebp-48]
       mov       ebx,[edi+4]
       cmp       ebx,[ebp+10]
       mov       [ebp-10],ebx
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       mov       ebx,[ebp-10]
       jmp       near ptr M02_L25
M02_L24:
       mov       edx,[ebp-4C]
       test      edx,edx
       je        near ptr M02_L01
       mov       [ebp-4C],edx
       cmp       dword ptr [edx+4],0
       sete      dl
       movzx     edx,dl
       test      edx,edx
       jne       near ptr M02_L01
       mov       [ebp-10],ebx
       mov       edx,[ebp+0C]
       mov       edi,[ebp+10]
       mov       ebx,[ebp-4C]
       add       ebx,8
       mov       ecx,[ebp-4C]
       mov       ecx,[ecx+4]
       cmp       ecx,edi
       mov       [ebp-24],ecx
       mov       [ebp-50],ebx
       jg        short M02_L26
       mov       [ebp-14],eax
       mov       edi,[ebp-4C]
       mov       ebx,[ebp-24]
       add       ebx,ebx
       push      ebx
       mov       ecx,edx
       mov       edx,[ebp-50]
       call      dword ptr ds:[801F120]
       test      eax,eax
       mov       eax,[ebp-14]
       mov       ebx,[ebp-10]
       je        near ptr M02_L01
       mov       dword ptr [ebp-18],0FFFFFFFF
       mov       eax,[edi+4]
       mov       edi,eax
       cmp       edi,[ebp+10]
       mov       ebx,edi
       mov       ecx,[ebp-18]
       jae       near ptr M02_L02
M02_L25:
       cmp       ebx,[ebp+10]
       jae       near ptr M02_L32
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       mov       edi,eax
       mov       [ebp-18],ecx
       mov       eax,edi
       jmp       near ptr M02_L01
M02_L26:
       mov       ebx,[ebp-10]
       jmp       near ptr M02_L01
M02_L27:
       cmp       ebx,[ebp+10]
       mov       edx,eax
       jae       near ptr M02_L08
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       mov       [ebp-14],eax
       lea       ecx,[eax-30]
       cmp       ecx,9
       ja        near ptr M02_L10
       inc       ebx
       cmp       edi,0CCCCCCCD
       mov       ecx,edx
       sbb       ecx,0CCCCCCC
       setge     cl
       movzx     ecx,cl
       mov       [ebp-1C],ecx
       push      edx
       push      edi
       push      0
       push      0A
       call      CORINFO_HELP_LMUL
       mov       edi,[ebp-14]
       mov       ecx,edi
       sar       edi,1F
       add       eax,ecx
       adc       edx,edi
       mov       edi,eax
       sub       edi,30
       sbb       edx,0
       mov       eax,edx
       mov       edx,[ebp-18]
       mov       ecx,edx
       shr       ecx,1F
       mov       [ebp-54],ecx
       xor       ecx,ecx
       mov       [ebp-58],ecx
       mov       ecx,[ebp-54]
       add       ecx,0FFFFFFFF
       mov       [ebp-54],ecx
       mov       ecx,[ebp-58]
       adc       ecx,7FFFFFFF
       mov       [ebp-58],ecx
       mov       ecx,[ebp-54]
       cmp       ecx,edi
       mov       ecx,[ebp-58]
       sbb       ecx,eax
       setb      cl
       movzx     ecx,cl
       or        ecx,[ebp-1C]
       movzx     ecx,cl
       mov       [ebp-1C],ecx
       cmp       ebx,[ebp+10]
       jae       short M02_L31
       jmp       short M02_L30
M02_L28:
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       cmp       eax,30
       je        near ptr M02_L07
       lea       ecx,[eax-30]
       cmp       ecx,9
       mov       [ebp-14],eax
       ja        near ptr M02_L10
       mov       eax,[ebp-14]
       jmp       near ptr M02_L04
M02_L29:
       mov       edx,1
       inc       ebx
       cmp       ebx,[ebp+10]
       mov       [ebp-1C],edx
       jae       near ptr M02_L09
M02_L30:
       cmp       ebx,[ebp+10]
       jae       short M02_L32
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       lea       edx,[ecx-30]
       cmp       edx,9
       jbe       short M02_L29
       mov       [ebp-14],ecx
       mov       edx,eax
       jmp       near ptr M02_L10
M02_L31:
       cmp       dword ptr [ebp-1C],0
       jne       near ptr M02_L09
       mov       edx,eax
       jmp       near ptr M02_L08
M02_L32:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1117

Compare Jit Disasm

; System.Tests.Perf_Int64.TryParseSpan(System.String)
       push      ebp
       mov       ebp,esp
       sub       esp,8
       xor       eax,eax
       mov       [ebp-8],eax
       mov       [ebp-4],eax
       test      edx,edx
       je        short M00_L01
       lea       eax,[edx+8]
       mov       ecx,[edx+4]
M00_L00:
       push      ecx
       push      eax
       call      dword ptr ds:[0A5418B8]; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       mov       edx,eax
       lea       ecx,[ebp-8]
       push      ecx
       mov       ecx,7
       call      dword ptr ds:[847D000]; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef)
       test      eax,eax
       sete      al
       movzx     eax,al
       mov       esp,ebp
       pop       ebp
       ret
M00_L01:
       xor       eax,eax
       xor       ecx,ecx
       jmp       short M00_L00
; Total bytes of code 67
; System.Globalization.NumberFormatInfo.get_CurrentInfo()
       push      ebp
       mov       ebp,esp
       mov       ecx,3004D68
       mov       edx,24E
       call      CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE
       mov       ecx,[eax+4]
       test      ecx,ecx
       jne       short M01_L00
       mov       ecx,ds:[6B812A4]
       test      ecx,ecx
       jne       short M01_L00
       mov       ecx,ds:[6B81294]
       test      ecx,ecx
       je        short M01_L03
M01_L00:
       cmp       byte ptr [ecx+31],0
       jne       short M01_L01
       mov       eax,[ecx+0C]
       test      eax,eax
       je        short M01_L01
       pop       ebp
       ret
M01_L01:
       mov       edx,7E34860
       mov       eax,[ecx]
       mov       eax,[eax+30]
       call      dword ptr [eax]
       mov       edx,eax
       mov       eax,edx
       test      eax,eax
       je        short M01_L02
       mov       ecx,offset MT_System.Globalization.NumberFormatInfo
       cmp       [eax],ecx
       jne       short M01_L04
M01_L02:
       pop       ebp
       ret
M01_L03:
       call      dword ptr ds:[8477030]
       mov       ecx,eax
       jmp       short M01_L00
M01_L04:
       call      dword ptr ds:[7DFB8B8]
       int       3
; Total bytes of code 108
; System.Number.TryParseInt64IntegerStyle(System.ReadOnlySpan`1<Char>, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo, Int64 ByRef)
       push      ebp
       mov       ebp,esp
       push      edi
       push      esi
       push      ebx
       sub       esp,4C
       mov       esi,ecx
       mov       edi,[ebp+10]
       test      edi,edi
       je        short M02_L02
       xor       ebx,ebx
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax]
       test      esi,1
       je        short M02_L00
       cmp       eax,20
       je        near ptr M02_L18
       lea       ecx,[eax-9]
       cmp       ecx,4
       jbe       near ptr M02_L18
M02_L00:
       mov       dword ptr [ebp-18],1
       test      esi,4
       je        short M02_L01
       cmp       byte ptr [edx+71],0
       je        near ptr M02_L21
       cmp       eax,2D
       je        near ptr M02_L19
       cmp       eax,2B
       je        near ptr M02_L20
M02_L01:
       xor       edx,edx
       mov       [ebp-1C],edx
       xor       edi,edi
       xor       edx,edx
       lea       ecx,[eax-30]
       cmp       ecx,9
       jbe       short M02_L06
M02_L02:
       mov       ebx,[ebp+8]
       mov       eax,ebx
       xor       edx,edx
       mov       [eax],edx
       mov       [eax+4],edx
       mov       eax,1
M02_L03:
       lea       esp,[ebp-0C]
       pop       ebx
       pop       esi
       pop       edi
       pop       ebp
       ret       0C
M02_L04:
       add       eax,0FFFFFFD0
       mov       edx,eax
       sar       edx,1F
       mov       edi,eax
       inc       ebx
       xor       eax,eax
       mov       [ebp-20],eax
M02_L05:
       cmp       ebx,[ebp+10]
       jae       short M02_L08
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       mov       [ebp-14],ecx
       lea       eax,[ecx-30]
       cmp       eax,9
       ja        short M02_L10
       inc       ebx
       push      edx
       push      edi
       push      0
       push      0A
       call      CORINFO_HELP_LMUL
       mov       edi,[ebp-14]
       mov       ecx,edi
       sar       edi,1F
       add       eax,ecx
       adc       edx,edi
       mov       edi,eax
       sub       edi,30
       sbb       edx,0
       mov       eax,edx
       mov       edx,[ebp-20]
       inc       edx
       cmp       edx,11
       jge       near ptr M02_L27
       mov       [ebp-20],edx
       mov       edx,eax
       jmp       short M02_L05
M02_L06:
       cmp       eax,30
       jne       short M02_L04
M02_L07:
       inc       ebx
       cmp       ebx,[ebp+10]
       jb        near ptr M02_L28
M02_L08:
       push      edx
       push      edi
       mov       edi,[ebp-18]
       mov       eax,edi
       sar       eax,1F
       push      eax
       push      edi
       call      CORINFO_HELP_LMUL
       mov       ebx,[ebp+8]
       mov       [ebx],eax
       mov       [ebx+4],edx
       xor       eax,eax
       jmp       near ptr M02_L03
M02_L09:
       mov       ebx,[ebp+8]
       mov       eax,ebx
       xor       edx,edx
       mov       [eax],edx
       mov       [eax+4],edx
       mov       eax,2
       jmp       near ptr M02_L03
M02_L10:
       mov       ecx,[ebp-14]
       cmp       ecx,20
       je        short M02_L11
       add       ecx,0FFFFFFF7
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       je        short M02_L12
M02_L11:
       test      esi,2
       mov       [ebp-2C],edx
       je        near ptr M02_L02
       mov       esi,[ebp-18]
       jmp       short M02_L14
M02_L12:
       mov       [ebp-2C],edx
       jmp       short M02_L16
M02_L13:
       cmp       ebx,[ebp+10]
       jae       near ptr M02_L32
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       cmp       ecx,20
       je        short M02_L14
       add       ecx,0FFFFFFF7
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       je        short M02_L15
M02_L14:
       inc       ebx
       cmp       ebx,[ebp+10]
       jl        short M02_L13
M02_L15:
       cmp       ebx,[ebp+10]
       mov       [ebp-18],esi
       jae       short M02_L17
M02_L16:
       push      dword ptr [ebp+10]
       push      dword ptr [ebp+0C]
       mov       ecx,ebx
       call      dword ptr ds:[847D2B8]
       test      eax,eax
       mov       eax,[ebp-2C]
       jne       near ptr M02_L31
       jmp       near ptr M02_L02
M02_L17:
       mov       eax,[ebp-2C]
       jmp       near ptr M02_L31
M02_L18:
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       cmp       eax,20
       je        short M02_L18
       lea       ecx,[eax-9]
       cmp       ecx,4
       setbe     cl
       movzx     ecx,cl
       test      ecx,ecx
       jne       short M02_L18
       jmp       near ptr M02_L00
M02_L19:
       mov       ecx,0FFFFFFFF
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       jmp       near ptr M02_L25
M02_L20:
       inc       ebx
       cmp       ebx,edi
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       jmp       near ptr M02_L25
M02_L21:
       cmp       byte ptr [edx+72],0
       je        short M02_L22
       mov       [ebp-14],eax
       cmp       eax,2D
       mov       eax,[ebp-14]
       jne       short M02_L22
       mov       ecx,0FFFFFFFF
       inc       ebx
       cmp       ebx,edi
       mov       [ebp-18],ecx
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       jmp       near ptr M02_L25
M02_L22:
       cmp       ebx,edi
       jbe       short M02_L23
       call      dword ptr ds:[84D9A08]
       int       3
M02_L23:
       mov       ecx,[ebp+0C]
       lea       ecx,[ecx+ebx*2]
       sub       edi,ebx
       mov       [ebp+0C],ecx
       mov       [ebp+10],edi
       xor       ebx,ebx
       mov       edi,[edx+10]
       mov       [ebp-48],edi
       mov       edx,[edx+14]
       mov       [ebp-4C],edx
       test      edi,edi
       je        short M02_L24
       xor       ecx,ecx
       cmp       dword ptr [edi+4],0
       sete      cl
       test      ecx,ecx
       jne       short M02_L24
       mov       ecx,[ebp+0C]
       mov       edx,[ebp+10]
       mov       [ebp-28],edx
       lea       edx,[edi+8]
       mov       edi,[edi+4]
       cmp       edi,[ebp-28]
       jg        short M02_L24
       mov       [ebp-14],eax
       add       edi,edi
       push      edi
       call      dword ptr ds:[7DEF120]
       test      eax,eax
       mov       eax,[ebp-14]
       je        short M02_L24
       mov       edi,[ebp-48]
       mov       ebx,[edi+4]
       cmp       ebx,[ebp+10]
       mov       [ebp-10],ebx
       jae       near ptr M02_L02
       mov       ecx,[ebp-18]
       mov       ebx,[ebp-10]
       jmp       near ptr M02_L25
M02_L24:
       mov       edx,[ebp-4C]
       test      edx,edx
       je        near ptr M02_L01
       mov       [ebp-4C],edx
       cmp       dword ptr [edx+4],0
       sete      dl
       movzx     edx,dl
       test      edx,edx
       jne       near ptr M02_L01
       mov       [ebp-10],ebx
       mov       edx,[ebp+0C]
       mov       edi,[ebp+10]
       mov       ebx,[ebp-4C]
       add       ebx,8
       mov       ecx,[ebp-4C]
       mov       ecx,[ecx+4]
       cmp       ecx,edi
       mov       [ebp-24],ecx
       mov       [ebp-50],ebx
       jg        short M02_L26
       mov       [ebp-14],eax
       mov       edi,[ebp-4C]
       mov       ebx,[ebp-24]
       add       ebx,ebx
       push      ebx
       mov       ecx,edx
       mov       edx,[ebp-50]
       call      dword ptr ds:[7DEF120]
       test      eax,eax
       mov       eax,[ebp-14]
       mov       ebx,[ebp-10]
       je        near ptr M02_L01
       mov       dword ptr [ebp-18],0FFFFFFFF
       mov       eax,[edi+4]
       mov       edi,eax
       cmp       edi,[ebp+10]
       mov       ebx,edi
       mov       ecx,[ebp-18]
       jae       near ptr M02_L02
M02_L25:
       cmp       ebx,[ebp+10]
       jae       near ptr M02_L32
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       mov       edi,eax
       mov       [ebp-18],ecx
       mov       eax,edi
       jmp       near ptr M02_L01
M02_L26:
       mov       ebx,[ebp-10]
       jmp       near ptr M02_L01
M02_L27:
       cmp       ebx,[ebp+10]
       mov       edx,eax
       jae       near ptr M02_L08
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       mov       [ebp-14],eax
       lea       ecx,[eax-30]
       cmp       ecx,9
       ja        near ptr M02_L10
       inc       ebx
       cmp       edi,0CCCCCCCD
       mov       ecx,edx
       sbb       ecx,0CCCCCCC
       setge     cl
       movzx     ecx,cl
       mov       [ebp-1C],ecx
       push      edx
       push      edi
       push      0
       push      0A
       call      CORINFO_HELP_LMUL
       mov       edi,[ebp-14]
       mov       ecx,edi
       sar       edi,1F
       add       eax,ecx
       adc       edx,edi
       mov       edi,eax
       sub       edi,30
       sbb       edx,0
       mov       eax,edx
       mov       edx,[ebp-18]
       mov       ecx,edx
       shr       ecx,1F
       mov       [ebp-54],ecx
       xor       ecx,ecx
       mov       [ebp-58],ecx
       mov       ecx,[ebp-54]
       add       ecx,0FFFFFFFF
       mov       [ebp-54],ecx
       mov       ecx,[ebp-58]
       adc       ecx,7FFFFFFF
       mov       [ebp-58],ecx
       mov       ecx,[ebp-54]
       cmp       ecx,edi
       mov       ecx,[ebp-58]
       sbb       ecx,eax
       setb      cl
       movzx     ecx,cl
       or        ecx,[ebp-1C]
       movzx     ecx,cl
       mov       [ebp-1C],ecx
       cmp       ebx,[ebp+10]
       jae       short M02_L31
       jmp       short M02_L30
M02_L28:
       mov       eax,[ebp+0C]
       movzx     eax,word ptr [eax+ebx*2]
       cmp       eax,30
       je        near ptr M02_L07
       lea       ecx,[eax-30]
       cmp       ecx,9
       mov       [ebp-14],eax
       ja        near ptr M02_L10
       mov       eax,[ebp-14]
       jmp       near ptr M02_L04
M02_L29:
       mov       edx,1
       inc       ebx
       cmp       ebx,[ebp+10]
       mov       [ebp-1C],edx
       jae       near ptr M02_L09
M02_L30:
       cmp       ebx,[ebp+10]
       jae       short M02_L32
       mov       ecx,[ebp+0C]
       movzx     ecx,word ptr [ecx+ebx*2]
       lea       edx,[ecx-30]
       cmp       edx,9
       jbe       short M02_L29
       mov       [ebp-14],ecx
       mov       edx,eax
       jmp       near ptr M02_L10
M02_L31:
       cmp       dword ptr [ebp-1C],0
       jne       near ptr M02_L09
       mov       edx,eax
       jmp       near ptr M02_L08
M02_L32:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 1117

Docs

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

Metadata

Metadata

Assignees

Labels

area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMItenet-build-performanceImpacts build time: official, developer or CItenet-performancePerformance related issue

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions