Uh oh!
There was an error while loading. Please reload this page.
Fix regressions due to pipeline stalls introduced in #59415 - #59497
Conversation
ghost
commented
Sep 22, 2021
Tagging subscribers to this area: @JulieLeeMSFT Issue DetailsAddresses regressions in #59415. Regressions are due to pipeline stalls when only using SIMD for block inits/copies. This PR reverts the behavior of handling the remainder of a block init/copy back to using a GPR instead of a SIMD register. BDN Results Baseline: 10b2f7c858934c27c56aa13845cb47064bfe87e9 Please let me know if I can clarify anything.
|
kunalspathak
left a comment
There was a problem hiding this comment.
Could you confirm why were so many files changed using jit-format? All the files are formatted as needed already.
Uh oh!
There was an error while loading. Please reload this page.
| if (size > 0) | ||
| { | ||
| if (size <= XMM_REGSIZE_BYTES) | ||
| if (regSize == YMM_REGSIZE_BYTES) |
There was a problem hiding this comment.
Probably worth adding a line of comment that further moves are not possible using YMM and so we will try XMM.
There was a problem hiding this comment.
Yes, good point. I'll add a note.
@kunalspathak The large number of JIT changes happened after I ran jit-format, but I think something may have been wrong with my version of jit-format as it kept failing CI/CD. Reverted those commits and re-ran with a known good version of jit-format, hopefully that resolves the issue. |
kunalspathak
commented
Sep 23, 2021
@tannergooding - in case you want to take another look. |
kunalspathak
commented
Sep 23, 2021
Also, could you please share the superpmi asmdiff numbers just to make sure that there are no surprise regressions introduced because this will get ported to .NET 6 |
alexcovington
commented
Sep 23, 2021
@kunalspathak Here are the asm diffs: ASM Diffsaspnet.run.windows.x64.checked.mch:Detail diffsbenchmarks.run.windows.x64.checked.mch:Detail diffscoreclr_tests.pmi.windows.x64.checked.mch:Detail diffslibraries.crossgen2.windows.x64.checked.mch:Detail diffslibraries.pmi.windows.x64.checked.mch:Detail diffslibraries_tests.pmi.windows.x64.checked.mch:Detail diffsLooks like the bigger regressions are caused by having to initialize both SIMD and GPR registers. Here's an example: libraries.crossgen2.windows.x64.checked.mch53165.asmBaseline xorpsxmm0,xmm0movups xmmword ptr [rsp+2B10H],xmm0movups xmmword ptr [rsp+2B18H],xmm0Diff xorecx,ecxxorpsxmm0,xmm0movups xmmword ptr [rsp+2B10H],xmm0mov qword ptr [rsp+2B20H],rcx |
kunalspathak
commented
Sep 23, 2021
I did asmdiff with this change on my local machine and seems most of the regression is because having to do copies for size < 16 or we add additional GPR moves and stop doing unaligned copies.
- vmovdqu ymm0, ymmword ptr[rdx+28]- vmovdqu ymmword ptr[rax+44], ymm0+ vmovdqu xmm0, xmmword ptr [rdx+32]+ vmovdqu xmmword ptr [rax+48], xmm0+ mov rcx, qword ptr [rdx+48]+ mov qword ptr [rax+64], rcx+ mov rcx, qword ptr [rdx+52]+ mov qword ptr [rax+68], rcx
lea rcx, bword ptr [rsi+216]
; byrRegs +[rcx]
mov rdx, rax
@@ -255,14 +259,18 @@ G_M5695_IG03: ; , extend
mov rdx, 0xD1FFAB1E
vmovdqu ymm0, ymmword ptr[rdx]
vmovdqu ymmword ptr[rax+16], ymm0
- vmovdqu ymm0, ymmword ptr[rdx+28]- vmovdqu ymmword ptr[rax+44], ymm0+ ;; bbWeight=1 PerfScore 53.50+G_M5695_IG04: ; , extend+ vmovdqu xmm0, xmmword ptr [rdx+32]+ vmovdqu xmmword ptr [rax+48], xmm0+ mov rcx, qword ptr [rdx+48]+ mov qword ptr [rax+64], rcx+ mov rcx, qword ptr [rdx+52]+ mov qword ptr [rax+68], rcx
lea rcx, bword ptr [rsi+224]
; byrRegs +[rcx]
mov rdx, rax
; gcrRegs +[rdx] |
kunalspathak
commented
Sep 23, 2021
It seems that it just erases the previous improvements introduced in #55604 while still taking care of the regression. Below are the diffs if I revert your change in #55604 vs. the PR for benchmarks windows/x64. Detail diffs |
alexcovington
commented
Sep 23, 2021
I see, that's a better example of what is regressing. Let me know if there is anything else needed for this PR, thanks for all the support! |
kunalspathak
commented
Sep 23, 2021
Failures seems to be related to #59541 |
kunalspathak
commented
Sep 28, 2021
Some regressions that are possibly related to this change: dotnet/perf-autofiling-issues#1603 |
alexcovington
commented
Sep 28, 2021
@kunalspathak I will double check and update with any findings. |
kunalspathak
commented
Sep 28, 2021
alexcovington
commented
Sep 28, 2021
Doesn't look like this change is related since none of the regressions appear to be generating block inits/copies. Baseline: 44b4450 rm -Recurse -Force C:\Users\acovingt\Documents\baseline-artifacts\,C:\Users\acovingt\Documents\diff-artifacts\
'System.Text.Tests.Perf_Encoding.GetByteCount','System.Globalization.Tests.StringEquality.Compare_Same_Upper','System.Linq.Tests.Perf_Enumerable.Range'|%{ py .\scripts\benchmarks_ci.py -c Release -f net6.0--filter $_--bdn-artifacts C:\Users\acovingt\Documents\baseline-artifacts --corerun C:\Users\acovingt\source\repos\runtime-master\artifacts\bin\testhost\net7.0-windows-Release-x64\shared\Microsoft.NETCore.App\7.0.0\corerun.exe--bdn-arguments '-d true --disasmDepth 100'; py .\scripts\benchmarks_ci.py -c Release -f net6.0--filter $_--bdn-artifacts C:\Users\acovingt\Documents\diff-artifacts --corerun C:\Users\acovingt\source\repos\runtime\artifacts\bin\testhost\net7.0-windows-Release-x64\shared\Microsoft.NETCore.App\7.0.0\corerun.exe--bdn-arguments '-d true --disasmDepth 100' }System.Globalization.Tests.StringEqualityBaseline codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91338F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91338DA94],0je short M03_L01call qword ptr [7FF91338F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91339F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91339DA94],0je short M03_L01call qword ptr [7FF91339F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91337F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91337DA94],0je short M03_L01call qword ptr [7FF91337F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91336F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91336DA94],0je short M03_L01call qword ptr [7FF91336F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91339F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91339DA94],0je short M03_L01call qword ptr [7FF91339F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91337F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91337DA94],0je short M03_L01call qword ptr [7FF91337F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,0B8learbp,[rsp+0F0]xoreax,eaxmov[rbp+0FFC0],raxmov[rbp+0FFB8],raxmovrax,[rdx]mov[rbp+0FFC0],raxmovr10,[r8]mov[rbp+0FFB8],r10movrcx,[rcx+20]movr11d,[rdx+8]movedx,[r8+8]mov[rsp+20],edxmov[rsp+28],r9dmov[rbp+0FFAC],rcxmovrdx,raxmov[rbp+0FFA4],rdxmovr8d,r11dmov[rbp+0FFB4],r8dmovr9,r10mov[rbp+0FF9C],r9learcx,[rbp+0FF40]call qword ptr [7FF96893D598]movrax,[7FF968947C88]movrcx,[rbp+0FFAC]movrdx,[rbp+0FFA4]movr8d,[rbp+0FFB4]movr9,[rbp+0FF9C]call qword ptr [rax]movesi,eaxlearcx,[rbp+0FF40]call qword ptr [7FF96893D5A0]moveax,esiaddrsp,0B8poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 172; System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)vzerouppermoveax,edxsubeax,r9dcmprcx,r8je near ptr M04_L08cmpedx,r9djb short M04_L00jmp short M04_L01M04_L00:movr9d,edxM04_L01:movedx,r9dxorr9d,r9dcmprdx,4jb short M04_L05cmprdx,10jb short M04_L03lear10,[rdx+0FFF0]M04_L02:lear11,[r9+r9]vmovupdymm0,[rcx+r11]vmovupdymm1,[r8+r11] vpcmpeqw ymm0,ymm0,ymm1 vpmovmskb r11d,ymm0cmpr11d,0FFFFFFFFjne short M04_L03addr9,10cmpr10,r9jae short M04_L02M04_L03:lear10,[r9+4]cmprdx,r10jb short M04_L05M04_L04:movr10,[rcx+r9*2]cmp[r8+r9*2],r10jne short M04_L05addr9,4lear10,[r9+4]cmprdx,r10jae short M04_L04M04_L05:lear10,[r9+2]cmprdx,r10jb short M04_L06movr11d,[rcx+r9*2]cmp[r8+r9*2],r11djne short M04_L06movr9,r10M04_L06:cmpr9,rdxjae short M04_L08nop word ptr [rax+rax]M04_L07:lear10,[rcx+r9*2]movzxr11d,word ptr [r8+r9*2]movzxr10d,word ptr [r10]subr10d,r11djne short M04_L09incr9cmpr9,rdxjb short M04_L07M04_L08:vzeroupperretM04_L09:moveax,r10dvzeroupperret; Total bytes of code 197; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)testrdx,rdx sete almovzxeax,alret; Total bytes of code 10Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,0B8learbp,[rsp+0F0]xoreax,eaxmov[rbp+0FFC0],raxmov[rbp+0FFB8],raxmovrax,[rdx]mov[rbp+0FFC0],raxmovr10,[r8]mov[rbp+0FFB8],r10movrcx,[rcx+20]movr11d,[rdx+8]movedx,[r8+8]mov[rsp+20],edxmov[rsp+28],r9dmov[rbp+0FFAC],rcxmovrdx,raxmov[rbp+0FFA4],rdxmovr8d,r11dmov[rbp+0FFB4],r8dmovr9,r10mov[rbp+0FF9C],r9learcx,[rbp+0FF40]call qword ptr [7FF96893D598]movrax,[7FF968947C88]movrcx,[rbp+0FFAC]movrdx,[rbp+0FFA4]movr8d,[rbp+0FFB4]movr9,[rbp+0FF9C]call qword ptr [rax]movesi,eaxlearcx,[rbp+0FF40]call qword ptr [7FF96893D5A0]moveax,esiaddrsp,0B8poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 172; System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)pushrdipushrsipushrbxcmpedx,r9djg short M04_L01movr10d,edxM04_L00:movr11d,r10djmp short M04_L02M04_L01:movr10d,r9djmp short M04_L00M04_L02:testr10d,r10dje short M04_L09movzxesi,word ptr [rcx]cmpesi,7Fjg short M04_L09movzxedi,word ptr [r8]cmpedi,7Fjg short M04_L09cmpesi,edijne short M04_L04M04_L03:decr10daddrcx,2addr8,2jmp short M04_L02M04_L04:moveax,esioreax,20movebx,ediorebx,20cmpeax,ebxje short M04_L10M04_L05:moveax,esimovr10d,ediaddesi,0FFFFFF9Fcmpesi,19ja short M04_L06addeax,0FFFFFFE0M04_L06:addedi,0FFFFFF9Fcmpedi,19jbe short M04_L08M04_L07:subeax,r10dpoprbxpoprsipoprdiretM04_L08:addr10d,0FFFFFFE0jmp short M04_L07M04_L09:testr10d,r10djne short M04_L11moveax,edxsubeax,r9dpoprbxpoprsipoprdiretM04_L10:moveax,esioreax,20addeax,0FFFFFF9Fcmpeax,19ja short M04_L05jmp short M04_L03M04_L11:subr11d,r10dsubr9d,r11dsubedx,r11dpoprbxpoprsipoprdijmp near ptr System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii(Char ByRef, Int32, Char ByRef, Int32); Total bytes of code 157; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)testrdx,rdx sete almovzxeax,alret; Total bytes of code 10Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91338F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91338DA94],0je short M03_L01call qword ptr [7FF91338F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D38F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D38DA8C],0je short M03_L01call qword ptr [7FF91D38F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D37F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D37DA8C],0je short M03_L01call qword ptr [7FF91D37F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D36F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D36DA8C],0je short M03_L01call qword ptr [7FF91D36F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D35F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D35DA8C],0je short M03_L01call qword ptr [7FF91D35F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D36F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D36DA8C],0je short M03_L01call qword ptr [7FF91D36F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D36F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D36DA8C],0je short M03_L01call qword ptr [7FF91D36F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,0B8learbp,[rsp+0F0]xoreax,eaxmov[rbp+0FFC0],raxmov[rbp+0FFB8],raxmovrax,[rdx]mov[rbp+0FFC0],raxmovr10,[r8]mov[rbp+0FFB8],r10movrcx,[rcx+20]movr11d,[rdx+8]movedx,[r8+8]mov[rsp+20],edxmov[rsp+28],r9dmov[rbp+0FFAC],rcxmovrdx,raxmov[rbp+0FFA4],rdxmovr8d,r11dmov[rbp+0FFB4],r8dmovr9,r10mov[rbp+0FF9C],r9learcx,[rbp+0FF40]call qword ptr [7FF96893D598]movrax,[7FF968947C88]movrcx,[rbp+0FFAC]movrdx,[rbp+0FFA4]movr8d,[rbp+0FFB4]movr9,[rbp+0FF9C]call qword ptr [rax]movesi,eaxlearcx,[rbp+0FF40]call qword ptr [7FF96893D5A0]moveax,esiaddrsp,0B8poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 172; System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)vzerouppermoveax,edxsubeax,r9dcmprcx,r8je near ptr M04_L08cmpedx,r9djb short M04_L00jmp short M04_L01M04_L00:movr9d,edxM04_L01:movedx,r9dxorr9d,r9dcmprdx,4jb short M04_L05cmprdx,10jb short M04_L03lear10,[rdx+0FFF0]M04_L02:lear11,[r9+r9]vmovupdymm0,[rcx+r11]vmovupdymm1,[r8+r11] vpcmpeqw ymm0,ymm0,ymm1 vpmovmskb r11d,ymm0cmpr11d,0FFFFFFFFjne short M04_L03addr9,10cmpr10,r9jae short M04_L02M04_L03:lear10,[r9+4]cmprdx,r10jb short M04_L05M04_L04:movr10,[rcx+r9*2]cmp[r8+r9*2],r10jne short M04_L05addr9,4lear10,[r9+4]cmprdx,r10jae short M04_L04M04_L05:lear10,[r9+2]cmprdx,r10jb short M04_L06movr11d,[rcx+r9*2]cmp[r8+r9*2],r11djne short M04_L06movr9,r10M04_L06:cmpr9,rdxjae short M04_L08nop word ptr [rax+rax]M04_L07:lear10,[rcx+r9*2]movzxr11d,word ptr [r8+r9*2]movzxr10d,word ptr [r10]subr10d,r11djne short M04_L09incr9cmpr9,rdxjb short M04_L07M04_L08:vzeroupperretM04_L09:moveax,r10dvzeroupperret; Total bytes of code 197; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)testrdx,rdx sete almovzxeax,alret; Total bytes of code 10Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,0B8learbp,[rsp+0F0]xoreax,eaxmov[rbp+0FFC0],raxmov[rbp+0FFB8],raxmovrax,[rdx]mov[rbp+0FFC0],raxmovr10,[r8]mov[rbp+0FFB8],r10movrcx,[rcx+20]movr11d,[rdx+8]movedx,[r8+8]mov[rsp+20],edxmov[rsp+28],r9dmov[rbp+0FFAC],rcxmovrdx,raxmov[rbp+0FFA4],rdxmovr8d,r11dmov[rbp+0FFB4],r8dmovr9,r10mov[rbp+0FF9C],r9learcx,[rbp+0FF40]call qword ptr [7FF96893D598]movrax,[7FF968947C88]movrcx,[rbp+0FFAC]movrdx,[rbp+0FFA4]movr8d,[rbp+0FFB4]movr9,[rbp+0FF9C]call qword ptr [rax]movesi,eaxlearcx,[rbp+0FF40]call qword ptr [7FF96893D5A0]moveax,esiaddrsp,0B8poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 172; System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)pushrdipushrsipushrbxcmpedx,r9djg short M04_L01movr10d,edxM04_L00:movr11d,r10djmp short M04_L02M04_L01:movr10d,r9djmp short M04_L00M04_L02:testr10d,r10dje short M04_L09movzxesi,word ptr [rcx]cmpesi,7Fjg short M04_L09movzxedi,word ptr [r8]cmpedi,7Fjg short M04_L09cmpesi,edijne short M04_L04M04_L03:decr10daddrcx,2addr8,2jmp short M04_L02M04_L04:moveax,esioreax,20movebx,ediorebx,20cmpeax,ebxje short M04_L10M04_L05:moveax,esimovr10d,ediaddesi,0FFFFFF9Fcmpesi,19ja short M04_L06addeax,0FFFFFFE0M04_L06:addedi,0FFFFFF9Fcmpedi,19jbe short M04_L08M04_L07:subeax,r10dpoprbxpoprsipoprdiretM04_L08:addr10d,0FFFFFFE0jmp short M04_L07M04_L09:testr10d,r10djne short M04_L11moveax,edxsubeax,r9dpoprbxpoprsipoprdiretM04_L10:moveax,esioreax,20addeax,0FFFFFF9Fcmpeax,19ja short M04_L05jmp short M04_L03M04_L11:subr11d,r10dsubr9d,r11dsubedx,r11dpoprbxpoprsipoprdijmp near ptr System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii(Char ByRef, Int32, Char ByRef, Int32); Total bytes of code 157; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)testrdx,rdx sete almovzxeax,alret; Total bytes of code 10Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()pushrsisubrsp,20movrsi,rcxmovrcx,[rsi+30]movrax,[rcx]movrax,[rax+48]call qword ptr [rax+30]movrcx,raxmovrdx,[rsi+8]movr8,[rsi+18]movr9d,[rsi+38]cmp[rcx],ecxaddrsp,20poprsijmp near ptr System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions); Total bytes of code 49; System.Globalization.CompareInfo.Compare(System.String, System.String, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxtestrdx,rdxje short M01_L02testr8,r8je short M01_L05learax,[rdx+0C]movedx,[rdx+8]lear10,[r8+0C]movr8d,[r8+8]mov[rsp+38],raxmov[rsp+40],edxmov[rsp+28],r10mov[rsp+30],r8dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)nopaddrsp,48retM01_L00:testr9d,0DFFFFFE0je short M01_L01cmpr9d,40000000je short M01_L01cmpr9d,10000000je short M01_L01movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3M01_L01:addrsp,48retM01_L02:testr8,r8je short M01_L03moveax,0FFFFFFFFjmp short M01_L04M01_L03:xoreax,eaxM01_L04:jmp short M01_L00M01_L05:moveax,1jmp short M01_L00; Total bytes of code 155; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)subrsp,48xoreax,eaxmov[rsp+28],rax vxorps xmm4,xmm4,xmm4 vmovdqa xmmword ptr [rsp+30],xmm4mov[rsp+40],raxmovrax,[r8]movr10d,[r8+8]movr11,[rdx]movedx,[rdx+8]cmpedx,r10dje short M02_L01M02_L00:testr9d,0DFFFFFE0jne short M02_L05mov[rsp+38],r11mov[rsp+40],edxmov[rsp+28],raxmov[rsp+30],r10dleardx,[rsp+38]lear8,[rsp+28]call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)jmp short M02_L02M02_L01:cmpr11,rax sete r8bmovzxr8d,r8btestr8d,r8dje short M02_L00jmp short M02_L03M02_L02:addrsp,48retM02_L03:testr9d,0DFFFFFE0je short M02_L04cmpr9d,40000000je short M02_L04cmpr9d,10000000jne short M02_L07M02_L04:xoreax,eaxaddrsp,48retM02_L05:cmpr9d,40000000jne short M02_L06movrcx,r11movr8,raxmovr9d,r10dcall System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L06:cmpr9d,10000000jne short M02_L07movrcx,r11movr8,raxmovr9d,r10dcall System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)jmp short M02_L02M02_L07:movecx,r9dcall System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)int3; Total bytes of code 205; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)pushrbppushr15pushr14pushr13pushr12pushrdipushrsipushrbxsubrsp,88learbp,[rsp+0C0]xorebx,ebxmov[rbp+0FFC0],rbxmov[rbp+0FFB8],rbxmovrbx,rcxmovrsi,rdxmovrdi,r8movr14d,r9dlearcx,[rbp+0FF78]movrdx,r10call CORINFO_HELP_INIT_PINVOKE_FRAMEmovr15,raxmovrcx,rspmov[rbp+0FF98],rcxmovrcx,rbpmov[rbp+0FFA8],rcxmovrdx,[rsi]mov[rbp+0FFC0],rdxmovr9,[rdi]mov[rbp+0FFB8],r9movrcx,[rbx+20]movr8d,[rsi+8]moveax,[rdi+8]mov[rsp+20],eaxmov[rsp+28],r14dmovrax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)mov[rbp+0FF88],raxlearax,[M03_L00]mov[rbp+0FFA0],raxlearax,[rbp+0FF78]mov[r15+10],raxmov byte ptr [r15+0C],0call qword ptr [7FF91D37F030]M03_L00:mov byte ptr [r15+0C],1cmp dword ptr [7FF91D37DA8C],0je short M03_L01call qword ptr [7FF91D37F3B8]M03_L01:movrdx,[rbp+0FF80]mov[r15+10],rdxaddrsp,88poprbxpoprsipoprdipopr12popr13popr14popr15poprbpret; Total bytes of code 210Method was not JITted yet. DiffSystem.Linq.Tests.Perf_EnumerableBaseline codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Linq.Tests.Perf_Enumerable.Range()pushrdipushrsisubrsp,28movrsi,rcxmovrcx,offset MT_System.Linq.Enumerable+RangeIteratorcall CORINFO_HELP_NEWSFASTmovrdi,raxcall CORINFO_HELP_GETCURRENTMANAGEDTHREADIDmov[rdi+8],eaxxoredx,edxmov[rdi+14],edxmov dword ptr [rdi+18],64movrdx,[rsi+8]movrcx,rdiaddrsp,28poprsipoprdijmp near ptr BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Int32>, BenchmarkDotNet.Engines.Consumer); Total bytes of code 65; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Int32>, BenchmarkDotNet.Engines.Consumer)pushrbppushrsisubrsp,38learbp,[rsp+40]mov[rbp+0FFE0],rspmovrsi,rdxmovr11,7FF912FD0470call qword ptr [7FF913390470]movrcx,raxmov[rbp+0FFF0],rcxmovr11,7FF912FD0478call qword ptr [7FF913390478]testeax,eaxje short M01_L01M01_L00:movrcx,[rbp+0FFF0]movr11,7FF912FD0480call qword ptr [7FF913390480]mov[rsi+40],eaxmovrcx,[rbp+0FFF0]movr11,7FF912FD0478call qword ptr [7FF913390478]testeax,eaxjne short M01_L00M01_L01:movrcx,[rbp+0FFF0]movr11,7FF912FD0488call qword ptr [7FF913390488]nopaddrsp,38poprsipoprbpretpushrbppushrsisubrsp,28movrbp,[rcx+20]mov[rsp+20],rbplearbp,[rbp+40]cmp qword ptr [rbp+0FFF0],0je short M01_L02movrcx,[rbp+0FFF0]movr11,7FF912FD0488call qword ptr [7FF913390488]M01_L02:nopaddrsp,28poprsipoprbpret; Total bytes of code 190Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Linq.Tests.Perf_Enumerable.Range()pushrdipushrsisubrsp,28movrsi,rcxmovrcx,offset MT_System.Linq.Enumerable+RangeIteratorcall CORINFO_HELP_NEWSFASTmovrdi,raxcall CORINFO_HELP_GETCURRENTMANAGEDTHREADIDmov[rdi+8],eaxxoredx,edxmov[rdi+14],edxmov dword ptr [rdi+18],64movrdx,[rsi+8]movrcx,rdiaddrsp,28poprsipoprdijmp near ptr BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Int32>, BenchmarkDotNet.Engines.Consumer); Total bytes of code 65; BenchmarkDotNet.Engines.ConsumerExtensions.Consume[[System.Int32, System.Private.CoreLib]](System.Collections.Generic.IEnumerable`1<Int32>, BenchmarkDotNet.Engines.Consumer)pushrbppushrsisubrsp,38learbp,[rsp+40]mov[rbp+0FFE0],rspmovrsi,rdxmovr11,7FF912FD0470call qword ptr [7FF913390470]movrcx,raxmov[rbp+0FFF0],rcxmovr11,7FF912FD0478call qword ptr [7FF913390478]testeax,eaxje short M01_L01M01_L00:movrcx,[rbp+0FFF0]movr11,7FF912FD0480call qword ptr [7FF913390480]mov[rsi+40],eaxmovrcx,[rbp+0FFF0]movr11,7FF912FD0478call qword ptr [7FF913390478]testeax,eaxjne short M01_L00M01_L01:movrcx,[rbp+0FFF0]movr11,7FF912FD0488call qword ptr [7FF913390488]nopaddrsp,38poprsipoprbpretpushrbppushrsisubrsp,28movrbp,[rcx+20]mov[rsp+20],rbplearbp,[rbp+40]cmp qword ptr [rbp+0FFF0],0je short M01_L02movrcx,[rbp+0FFF0]movr11,7FF912FD0488call qword ptr [7FF913390488]M01_L02:nopaddrsp,28poprsipoprbpret; Total bytes of code 190DiffSystem.Text.Tests.Perf_Encoding.GetByteCountBaseline codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()mov[rsp+8],rcxmovrax,[rcx+10]movrcx,raxmovrdx,[rsp+8]movrdx,[rdx+28]movrax,[rax]movrax,[rax+50]jmp qword ptr [rax+10]; Total bytes of code 32DiffLet me know if you think I missed anything. |
kunalspathak
commented
Sep 28, 2021
Thanks for confirming. By the way dotnet/perf-autofiling-issues#1591 is on alpine. |
EgorBo
commented
Oct 12, 2021
Improvements on win-x64: dotnet/perf-autofiling-issues#1581 |
EgorBo
commented
Oct 12, 2021
Fixes regression dotnet/perf-autofiling-issues#1610 (win-x64) |
Addresses regressions in #59415. Regressions are due to pipeline stalls when only using SIMD for block inits/copies. This PR reverts the behavior of handling the remainder of a block init/copy back to using a GPR instead of a SIMD register.
BDN Results
Baseline: 10b2f7c858934c27c56aa13845cb47064bfe87e9
Please let me know if I can clarify anything.