-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix regressions due to pipeline stalls introduced in #59415 #59497
Conversation
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.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you confirm why were so many files changed using jit-format
? All the files are formatted as needed already.
if (size > 0) | ||
{ | ||
if (size <= XMM_REGSIZE_BYTES) | ||
if (regSize == YMM_REGSIZE_BYTES) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks much better.
@tannergooding - in case you want to take another look. |
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 |
@kunalspathak Here are the asm diffs: ASM Diffsaspnet.run.windows.x64.checked.mch:
Detail diffs
benchmarks.run.windows.x64.checked.mch:
Detail diffs
coreclr_tests.pmi.windows.x64.checked.mch:
Detail diffs
libraries.crossgen2.windows.x64.checked.mch:
Detail diffs
libraries.pmi.windows.x64.checked.mch:
Detail diffs
libraries_tests.pmi.windows.x64.checked.mch:
Detail diffs
Looks 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 xorps xmm0, xmm0
movups xmmword ptr [rsp+2B10H], xmm0
movups xmmword ptr [rsp+2B18H], xmm0 Diff xor ecx, ecx
xorps xmm0, xmm0
movups xmmword ptr [rsp+2B10H], xmm0
mov qword ptr [rsp+2B20H], rcx |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
I'm a bit surprised this had shown up as a pipeline stall, however. Backtracking and doing a "misaligned" write is fairly common practice. Even Windows x64 memcpy
does this for 16-32
byte blocks.
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] |
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
|
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! |
Failures seems to be related to #59541 |
Some regressions that are possibly related to this change: dotnet/perf-autofiling-issues#1603 |
@kunalspathak I will double check and update with any findings. |
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()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91338F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91338DA94],0
je short M03_L01
call qword ptr [7FF91338F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91339F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91339DA94],0
je short M03_L01
call qword ptr [7FF91339F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91337F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91337DA94],0
je short M03_L01
call qword ptr [7FF91337F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91336F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91336DA94],0
je short M03_L01
call qword ptr [7FF91336F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91339F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91339DA94],0
je short M03_L01
call qword ptr [7FF91339F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91337F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91337DA94],0
je short M03_L01
call qword ptr [7FF91337F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,0B8
lea rbp,[rsp+0F0]
xor eax,eax
mov [rbp+0FFC0],rax
mov [rbp+0FFB8],rax
mov rax,[rdx]
mov [rbp+0FFC0],rax
mov r10,[r8]
mov [rbp+0FFB8],r10
mov rcx,[rcx+20]
mov r11d,[rdx+8]
mov edx,[r8+8]
mov [rsp+20],edx
mov [rsp+28],r9d
mov [rbp+0FFAC],rcx
mov rdx,rax
mov [rbp+0FFA4],rdx
mov r8d,r11d
mov [rbp+0FFB4],r8d
mov r9,r10
mov [rbp+0FF9C],r9
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D598]
mov rax,[7FF968947C88]
mov rcx,[rbp+0FFAC]
mov rdx,[rbp+0FFA4]
mov r8d,[rbp+0FFB4]
mov r9,[rbp+0FF9C]
call qword ptr [rax]
mov esi,eax
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D5A0]
mov eax,esi
add rsp,0B8
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 172 ; System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
vzeroupper
mov eax,edx
sub eax,r9d
cmp rcx,r8
je near ptr M04_L08
cmp edx,r9d
jb short M04_L00
jmp short M04_L01
M04_L00:
mov r9d,edx
M04_L01:
mov edx,r9d
xor r9d,r9d
cmp rdx,4
jb short M04_L05
cmp rdx,10
jb short M04_L03
lea r10,[rdx+0FFF0]
M04_L02:
lea r11,[r9+r9]
vmovupd ymm0,[rcx+r11]
vmovupd ymm1,[r8+r11]
vpcmpeqw ymm0,ymm0,ymm1
vpmovmskb r11d,ymm0
cmp r11d,0FFFFFFFF
jne short M04_L03
add r9,10
cmp r10,r9
jae short M04_L02
M04_L03:
lea r10,[r9+4]
cmp rdx,r10
jb short M04_L05
M04_L04:
mov r10,[rcx+r9*2]
cmp [r8+r9*2],r10
jne short M04_L05
add r9,4
lea r10,[r9+4]
cmp rdx,r10
jae short M04_L04
M04_L05:
lea r10,[r9+2]
cmp rdx,r10
jb short M04_L06
mov r11d,[rcx+r9*2]
cmp [r8+r9*2],r11d
jne short M04_L06
mov r9,r10
M04_L06:
cmp r9,rdx
jae short M04_L08
nop word ptr [rax+rax]
M04_L07:
lea r10,[rcx+r9*2]
movzx r11d,word ptr [r8+r9*2]
movzx r10d,word ptr [r10]
sub r10d,r11d
jne short M04_L09
inc r9
cmp r9,rdx
jb short M04_L07
M04_L08:
vzeroupper
ret
M04_L09:
mov eax,r10d
vzeroupper
ret
; Total bytes of code 197 ; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)
test rdx,rdx
sete al
movzx eax,al
ret
; Total bytes of code 10 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,0B8
lea rbp,[rsp+0F0]
xor eax,eax
mov [rbp+0FFC0],rax
mov [rbp+0FFB8],rax
mov rax,[rdx]
mov [rbp+0FFC0],rax
mov r10,[r8]
mov [rbp+0FFB8],r10
mov rcx,[rcx+20]
mov r11d,[rdx+8]
mov edx,[r8+8]
mov [rsp+20],edx
mov [rsp+28],r9d
mov [rbp+0FFAC],rcx
mov rdx,rax
mov [rbp+0FFA4],rdx
mov r8d,r11d
mov [rbp+0FFB4],r8d
mov r9,r10
mov [rbp+0FF9C],r9
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D598]
mov rax,[7FF968947C88]
mov rcx,[rbp+0FFAC]
mov rdx,[rbp+0FFA4]
mov r8d,[rbp+0FFB4]
mov r9,[rbp+0FF9C]
call qword ptr [rax]
mov esi,eax
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D5A0]
mov eax,esi
add rsp,0B8
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 172 ; System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
push rdi
push rsi
push rbx
cmp edx,r9d
jg short M04_L01
mov r10d,edx
M04_L00:
mov r11d,r10d
jmp short M04_L02
M04_L01:
mov r10d,r9d
jmp short M04_L00
M04_L02:
test r10d,r10d
je short M04_L09
movzx esi,word ptr [rcx]
cmp esi,7F
jg short M04_L09
movzx edi,word ptr [r8]
cmp edi,7F
jg short M04_L09
cmp esi,edi
jne short M04_L04
M04_L03:
dec r10d
add rcx,2
add r8,2
jmp short M04_L02
M04_L04:
mov eax,esi
or eax,20
mov ebx,edi
or ebx,20
cmp eax,ebx
je short M04_L10
M04_L05:
mov eax,esi
mov r10d,edi
add esi,0FFFFFF9F
cmp esi,19
ja short M04_L06
add eax,0FFFFFFE0
M04_L06:
add edi,0FFFFFF9F
cmp edi,19
jbe short M04_L08
M04_L07:
sub eax,r10d
pop rbx
pop rsi
pop rdi
ret
M04_L08:
add r10d,0FFFFFFE0
jmp short M04_L07
M04_L09:
test r10d,r10d
jne short M04_L11
mov eax,edx
sub eax,r9d
pop rbx
pop rsi
pop rdi
ret
M04_L10:
mov eax,esi
or eax,20
add eax,0FFFFFF9F
cmp eax,19
ja short M04_L05
jmp short M04_L03
M04_L11:
sub r11d,r10d
sub r9d,r11d
sub edx,r11d
pop rbx
pop rsi
pop rdi
jmp 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)
test rdx,rdx
sete al
movzx eax,al
ret
; Total bytes of code 10 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91338F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91338DA94],0
je short M03_L01
call qword ptr [7FF91338F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D38F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D38DA8C],0
je short M03_L01
call qword ptr [7FF91D38F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D37F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D37DA8C],0
je short M03_L01
call qword ptr [7FF91D37F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D36F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D36DA8C],0
je short M03_L01
call qword ptr [7FF91D36F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D35F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D35DA8C],0
je short M03_L01
call qword ptr [7FF91D35F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D36F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D36DA8C],0
je short M03_L01
call qword ptr [7FF91D36F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D36F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D36DA8C],0
je short M03_L01
call qword ptr [7FF91D36F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,0B8
lea rbp,[rsp+0F0]
xor eax,eax
mov [rbp+0FFC0],rax
mov [rbp+0FFB8],rax
mov rax,[rdx]
mov [rbp+0FFC0],rax
mov r10,[r8]
mov [rbp+0FFB8],r10
mov rcx,[rcx+20]
mov r11d,[rdx+8]
mov edx,[r8+8]
mov [rsp+20],edx
mov [rsp+28],r9d
mov [rbp+0FFAC],rcx
mov rdx,rax
mov [rbp+0FFA4],rdx
mov r8d,r11d
mov [rbp+0FFB4],r8d
mov r9,r10
mov [rbp+0FF9C],r9
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D598]
mov rax,[7FF968947C88]
mov rcx,[rbp+0FFAC]
mov rdx,[rbp+0FFA4]
mov r8d,[rbp+0FFB4]
mov r9,[rbp+0FF9C]
call qword ptr [rax]
mov esi,eax
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D5A0]
mov eax,esi
add rsp,0B8
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 172 ; System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
vzeroupper
mov eax,edx
sub eax,r9d
cmp rcx,r8
je near ptr M04_L08
cmp edx,r9d
jb short M04_L00
jmp short M04_L01
M04_L00:
mov r9d,edx
M04_L01:
mov edx,r9d
xor r9d,r9d
cmp rdx,4
jb short M04_L05
cmp rdx,10
jb short M04_L03
lea r10,[rdx+0FFF0]
M04_L02:
lea r11,[r9+r9]
vmovupd ymm0,[rcx+r11]
vmovupd ymm1,[r8+r11]
vpcmpeqw ymm0,ymm0,ymm1
vpmovmskb r11d,ymm0
cmp r11d,0FFFFFFFF
jne short M04_L03
add r9,10
cmp r10,r9
jae short M04_L02
M04_L03:
lea r10,[r9+4]
cmp rdx,r10
jb short M04_L05
M04_L04:
mov r10,[rcx+r9*2]
cmp [r8+r9*2],r10
jne short M04_L05
add r9,4
lea r10,[r9+4]
cmp rdx,r10
jae short M04_L04
M04_L05:
lea r10,[r9+2]
cmp rdx,r10
jb short M04_L06
mov r11d,[rcx+r9*2]
cmp [r8+r9*2],r11d
jne short M04_L06
mov r9,r10
M04_L06:
cmp r9,rdx
jae short M04_L08
nop word ptr [rax+rax]
M04_L07:
lea r10,[rcx+r9*2]
movzx r11d,word ptr [r8+r9*2]
movzx r10d,word ptr [r10]
sub r10d,r11d
jne short M04_L09
inc r9
cmp r9,rdx
jb short M04_L07
M04_L08:
vzeroupper
ret
M04_L09:
mov eax,r10d
vzeroupper
ret
; Total bytes of code 197 ; Internal.Runtime.CompilerServices.Unsafe.IsNullRef[[System.__Canon, System.Private.CoreLib]](System.__Canon ByRef)
test rdx,rdx
sete al
movzx eax,al
ret
; Total bytes of code 10 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,0B8
lea rbp,[rsp+0F0]
xor eax,eax
mov [rbp+0FFC0],rax
mov [rbp+0FFB8],rax
mov rax,[rdx]
mov [rbp+0FFC0],rax
mov r10,[r8]
mov [rbp+0FFB8],r10
mov rcx,[rcx+20]
mov r11d,[rdx+8]
mov edx,[r8+8]
mov [rsp+20],edx
mov [rsp+28],r9d
mov [rbp+0FFAC],rcx
mov rdx,rax
mov [rbp+0FFA4],rdx
mov r8d,r11d
mov [rbp+0FFB4],r8d
mov r9,r10
mov [rbp+0FF9C],r9
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D598]
mov rax,[7FF968947C88]
mov rcx,[rbp+0FFAC]
mov rdx,[rbp+0FFA4]
mov r8d,[rbp+0FFB4]
mov r9,[rbp+0FF9C]
call qword ptr [rax]
mov esi,eax
lea rcx,[rbp+0FF40]
call qword ptr [7FF96893D5A0]
mov eax,esi
add rsp,0B8
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 172 ; System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
push rdi
push rsi
push rbx
cmp edx,r9d
jg short M04_L01
mov r10d,edx
M04_L00:
mov r11d,r10d
jmp short M04_L02
M04_L01:
mov r10d,r9d
jmp short M04_L00
M04_L02:
test r10d,r10d
je short M04_L09
movzx esi,word ptr [rcx]
cmp esi,7F
jg short M04_L09
movzx edi,word ptr [r8]
cmp edi,7F
jg short M04_L09
cmp esi,edi
jne short M04_L04
M04_L03:
dec r10d
add rcx,2
add r8,2
jmp short M04_L02
M04_L04:
mov eax,esi
or eax,20
mov ebx,edi
or ebx,20
cmp eax,ebx
je short M04_L10
M04_L05:
mov eax,esi
mov r10d,edi
add esi,0FFFFFF9F
cmp esi,19
ja short M04_L06
add eax,0FFFFFFE0
M04_L06:
add edi,0FFFFFF9F
cmp edi,19
jbe short M04_L08
M04_L07:
sub eax,r10d
pop rbx
pop rsi
pop rdi
ret
M04_L08:
add r10d,0FFFFFFE0
jmp short M04_L07
M04_L09:
test r10d,r10d
jne short M04_L11
mov eax,edx
sub eax,r9d
pop rbx
pop rsi
pop rdi
ret
M04_L10:
mov eax,esi
or eax,20
add eax,0FFFFFF9F
cmp eax,19
ja short M04_L05
jmp short M04_L03
M04_L11:
sub r11d,r10d
sub r9d,r11d
sub edx,r11d
pop rbx
pop rsi
pop rdi
jmp 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)
test rdx,rdx
sete al
movzx eax,al
ret
; Total bytes of code 10 Method was not JITted yet. .NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Globalization.Tests.StringEquality.Compare_Same_Upper()
push rsi
sub rsp,20
mov rsi,rcx
mov rcx,[rsi+30]
mov rax,[rcx]
mov rax,[rax+48]
call qword ptr [rax+30]
mov rcx,rax
mov rdx,[rsi+8]
mov r8,[rsi+18]
mov r9d,[rsi+38]
cmp [rcx],ecx
add rsp,20
pop rsi
jmp 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)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
test rdx,rdx
je short M01_L02
test r8,r8
je short M01_L05
lea rax,[rdx+0C]
mov edx,[rdx+8]
lea r10,[r8+0C]
mov r8d,[r8+8]
mov [rsp+38],rax
mov [rsp+40],edx
mov [rsp+28],r10
mov [rsp+30],r8d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
nop
add rsp,48
ret
M01_L00:
test r9d,0DFFFFFE0
je short M01_L01
cmp r9d,40000000
je short M01_L01
cmp r9d,10000000
je short M01_L01
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
M01_L01:
add rsp,48
ret
M01_L02:
test r8,r8
je short M01_L03
mov eax,0FFFFFFFF
jmp short M01_L04
M01_L03:
xor eax,eax
M01_L04:
jmp short M01_L00
M01_L05:
mov eax,1
jmp short M01_L00
; Total bytes of code 155 ; System.Globalization.CompareInfo.Compare(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
sub rsp,48
xor eax,eax
mov [rsp+28],rax
vxorps xmm4,xmm4,xmm4
vmovdqa xmmword ptr [rsp+30],xmm4
mov [rsp+40],rax
mov rax,[r8]
mov r10d,[r8+8]
mov r11,[rdx]
mov edx,[rdx+8]
cmp edx,r10d
je short M02_L01
M02_L00:
test r9d,0DFFFFFE0
jne short M02_L05
mov [rsp+38],r11
mov [rsp+40],edx
mov [rsp+28],rax
mov [rsp+30],r10d
lea rdx,[rsp+38]
lea r8,[rsp+28]
call System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
jmp short M02_L02
M02_L01:
cmp r11,rax
sete r8b
movzx r8d,r8b
test r8d,r8d
je short M02_L00
jmp short M02_L03
M02_L02:
add rsp,48
ret
M02_L03:
test r9d,0DFFFFFE0
je short M02_L04
cmp r9d,40000000
je short M02_L04
cmp r9d,10000000
jne short M02_L07
M02_L04:
xor eax,eax
add rsp,48
ret
M02_L05:
cmp r9d,40000000
jne short M02_L06
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.SpanHelpers.SequenceCompareTo(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L06:
cmp r9d,10000000
jne short M02_L07
mov rcx,r11
mov r8,rax
mov r9d,r10d
call System.Globalization.Ordinal.CompareStringIgnoreCase(Char ByRef, Int32, Char ByRef, Int32)
jmp short M02_L02
M02_L07:
mov ecx,r9d
call System.Globalization.CompareInfo.ThrowCompareOptionsCheckFailed(System.Globalization.CompareOptions)
int 3
; Total bytes of code 205 ; System.Globalization.CompareInfo.IcuCompareString(System.ReadOnlySpan`1<Char>, System.ReadOnlySpan`1<Char>, System.Globalization.CompareOptions)
push rbp
push r15
push r14
push r13
push r12
push rdi
push rsi
push rbx
sub rsp,88
lea rbp,[rsp+0C0]
xor ebx,ebx
mov [rbp+0FFC0],rbx
mov [rbp+0FFB8],rbx
mov rbx,rcx
mov rsi,rdx
mov rdi,r8
mov r14d,r9d
lea rcx,[rbp+0FF78]
mov rdx,r10
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov r15,rax
mov rcx,rsp
mov [rbp+0FF98],rcx
mov rcx,rbp
mov [rbp+0FFA8],rcx
mov rdx,[rsi]
mov [rbp+0FFC0],rdx
mov r9,[rdi]
mov [rbp+0FFB8],r9
mov rcx,[rbx+20]
mov r8d,[rsi+8]
mov eax,[rdi+8]
mov [rsp+20],eax
mov [rsp+28],r14d
mov rax,offset MD_Interop+Globalization.CompareString(IntPtr, Char*, Int32, Char*, Int32, System.Globalization.CompareOptions)
mov [rbp+0FF88],rax
lea rax,[M03_L00]
mov [rbp+0FFA0],rax
lea rax,[rbp+0FF78]
mov [r15+10],rax
mov byte ptr [r15+0C],0
call qword ptr [7FF91D37F030]
M03_L00:
mov byte ptr [r15+0C],1
cmp dword ptr [7FF91D37DA8C],0
je short M03_L01
call qword ptr [7FF91D37F3B8]
M03_L01:
mov rdx,[rbp+0FF80]
mov [r15+10],rdx
add rsp,88
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
; Total bytes of code 210 Method was not JITted yet. Diff
System.Linq.Tests.Perf_EnumerableBaseline codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Linq.Tests.Perf_Enumerable.Range()
push rdi
push rsi
sub rsp,28
mov rsi,rcx
mov rcx,offset MT_System.Linq.Enumerable+RangeIterator
call CORINFO_HELP_NEWSFAST
mov rdi,rax
call CORINFO_HELP_GETCURRENTMANAGEDTHREADID
mov [rdi+8],eax
xor edx,edx
mov [rdi+14],edx
mov dword ptr [rdi+18],64
mov rdx,[rsi+8]
mov rcx,rdi
add rsp,28
pop rsi
pop rdi
jmp 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)
push rbp
push rsi
sub rsp,38
lea rbp,[rsp+40]
mov [rbp+0FFE0],rsp
mov rsi,rdx
mov r11,7FF912FD0470
call qword ptr [7FF913390470]
mov rcx,rax
mov [rbp+0FFF0],rcx
mov r11,7FF912FD0478
call qword ptr [7FF913390478]
test eax,eax
je short M01_L01
M01_L00:
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0480
call qword ptr [7FF913390480]
mov [rsi+40],eax
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0478
call qword ptr [7FF913390478]
test eax,eax
jne short M01_L00
M01_L01:
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0488
call qword ptr [7FF913390488]
nop
add rsp,38
pop rsi
pop rbp
ret
push rbp
push rsi
sub rsp,28
mov rbp,[rcx+20]
mov [rsp+20],rbp
lea rbp,[rbp+40]
cmp qword ptr [rbp+0FFF0],0
je short M01_L02
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0488
call qword ptr [7FF913390488]
M01_L02:
nop
add rsp,28
pop rsi
pop rbp
ret
; Total bytes of code 190 Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Linq.Tests.Perf_Enumerable.Range()
push rdi
push rsi
sub rsp,28
mov rsi,rcx
mov rcx,offset MT_System.Linq.Enumerable+RangeIterator
call CORINFO_HELP_NEWSFAST
mov rdi,rax
call CORINFO_HELP_GETCURRENTMANAGEDTHREADID
mov [rdi+8],eax
xor edx,edx
mov [rdi+14],edx
mov dword ptr [rdi+18],64
mov rdx,[rsi+8]
mov rcx,rdi
add rsp,28
pop rsi
pop rdi
jmp 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)
push rbp
push rsi
sub rsp,38
lea rbp,[rsp+40]
mov [rbp+0FFE0],rsp
mov rsi,rdx
mov r11,7FF912FD0470
call qword ptr [7FF913390470]
mov rcx,rax
mov [rbp+0FFF0],rcx
mov r11,7FF912FD0478
call qword ptr [7FF913390478]
test eax,eax
je short M01_L01
M01_L00:
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0480
call qword ptr [7FF913390480]
mov [rsi+40],eax
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0478
call qword ptr [7FF913390478]
test eax,eax
jne short M01_L00
M01_L01:
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0488
call qword ptr [7FF913390488]
nop
add rsp,38
pop rsi
pop rbp
ret
push rbp
push rsi
sub rsp,28
mov rbp,[rcx+20]
mov [rsp+20],rbp
lea rbp,[rbp+40]
cmp qword ptr [rbp+0FFF0],0
je short M01_L02
mov rcx,[rbp+0FFF0]
mov r11,7FF912FD0488
call qword ptr [7FF913390488]
M01_L02:
nop
add rsp,28
pop rsi
pop rbp
ret
; Total bytes of code 190 Diff
System.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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[rax+50]
jmp qword ptr [rax+10]
; Total bytes of code 32 Compare codegen.NET 7.0.0 (42.42.42.42424), X64 RyuJIT; System.Text.Tests.Perf_Encoding.GetByteCount()
mov [rsp+8],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[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],rcx
mov rax,[rcx+10]
mov rcx,rax
mov rdx,[rsp+8]
mov rdx,[rdx+28]
mov rax,[rax]
mov rax,[rax+50]
jmp qword ptr [rax+10]
; Total bytes of code 32 Diff
Let me know if you think I missed anything. |
Thanks for confirming. By the way dotnet/perf-autofiling-issues#1591 is on alpine. |
Improvements on win-x64: dotnet/perf-autofiling-issues#1581 |
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.