.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.PlainStruct_Equals()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       mov       rsi,rcx
       mov       rcx,offset MT_PlainStruct
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rbp,[rsi+8]
       add       rsi,78
       lea       rdi,[rbx+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       rcx,offset MT_PlainStruct
       call      CORINFO_HELP_NEWSFAST
       mov       r14,rax
       lea       rdi,[r14+8]
       mov       rsi,rbp
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       rcx,r14
       mov       rdx,rbx
       mov       rax,[7FFF1E3A0E38]
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       jmp       rax
; Total bytes of code 108
; System.ValueType.Equals(System.Object)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,48
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       xor       eax,eax
       mov       [rsp+40],rax
       mov       rdi,rcx
       mov       rsi,rdx
       test      rsi,rsi
       je        near ptr M01_L05
       mov       rcx,rdi
       call      00007FFF7DC60330
       mov       rbx,rax
       mov       rcx,rsi
       call      00007FFF7DC60330
       cmp       rax,rbx
       jne       near ptr M01_L05
       mov       rcx,rdi
       call      00007FFF7DC80780
       test      eax,eax
       je        short M01_L00
       mov       rcx,rdi
       mov       rdx,rsi
       call      System.ValueType.FastEqualsCheck(System.Object, System.Object)
       jmp       near ptr M01_L06
M01_L00:
       cmp       [rbx],ebx
       xor       edx,edx
       mov       [rsp+20],edx
       lea       rdx,[rsp+30]
       mov       rcx,rbx
       xor       r8d,r8d
       mov       r9d,34
       call      System.RuntimeType.GetFieldCandidates(System.String, System.Reflection.BindingFlags, Boolean)
       lea       rcx,[rsp+30]
       mov       rdx,offset MT_System.RuntimeType+ListBuilder`1[[System.Reflection.FieldInfo, System.Private.CoreLib]]
       call      System.RuntimeType+ListBuilder`1[[System.__Canon, System.Private.CoreLib]].ToArray()
       mov       rbx,rax
       xor       ebp,ebp
       mov       r14d,[rbx+8]
       test      r14d,r14d
       jle       short M01_L04
M01_L01:
       movsxd    rcx,ebp
       mov       rcx,[rbx+rcx*8+10]
       mov       rdx,rdi
       mov       rax,[rcx]
       mov       rax,[rax+58]
       call      qword ptr [rax]
       mov       r15,rax
       movsxd    rcx,ebp
       mov       rcx,[rbx+rcx*8+10]
       mov       rdx,rsi
       mov       rax,[rcx]
       mov       rax,[rax+58]
       call      qword ptr [rax]
       test      r15,r15
       jne       short M01_L02
       test      rax,rax
       je        short M01_L03
       jmp       short M01_L05
M01_L02:
       mov       rcx,r15
       mov       rdx,rax
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+10]
       test      eax,eax
       je        short M01_L05
M01_L03:
       inc       ebp
       cmp       r14d,ebp
       jg        short M01_L01
M01_L04:
       mov       eax,1
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L05:
       xor       eax,eax
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L06:
       movzx     eax,al
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
; Total bytes of code 295

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.EquatableStruct_Equals()
       push      rdi
       push      rsi
       sub       rsp,28
       cmp       [rcx],ecx
       lea       rsi,[rcx+18]
       add       rcx,88
       mov       rdx,[rcx]
       mov       edi,[rcx+8]
       mov       rcx,[rsi]
       call      System.Type.op_Equality(System.Type, System.Type)
       test      eax,eax
       je        short M00_L00
       mov       eax,[rsi+8]
       cmp       eax,edi
       sete      al
       movzx     eax,al
       jmp       short M00_L01
M00_L00:
       xor       eax,eax
M00_L01:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 59

Extern method System.Type.op_Equality(System.Type, System.Type)

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.HashStruct_Equals()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       mov       rsi,rcx
       mov       rcx,offset MT_HashStruct
       call      CORINFO_HELP_NEWSFAST
       mov       rbx,rax
       lea       rbp,[rsi+28]
       add       rsi,98
       lea       rdi,[rbx+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       rcx,offset MT_HashStruct
       call      CORINFO_HELP_NEWSFAST
       mov       r14,rax
       lea       rdi,[r14+8]
       mov       rsi,rbp
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       rcx,r14
       mov       rdx,rbx
       mov       rax,[7FFF1E3A0E38]
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       jmp       rax
; Total bytes of code 111
; System.ValueType.Equals(System.Object)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,48
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+30],xmm4
       xor       eax,eax
       mov       [rsp+40],rax
       mov       rdi,rcx
       mov       rsi,rdx
       test      rsi,rsi
       je        near ptr M01_L05
       mov       rcx,rdi
       call      00007FFF7DC60330
       mov       rbx,rax
       mov       rcx,rsi
       call      00007FFF7DC60330
       cmp       rax,rbx
       jne       near ptr M01_L05
       mov       rcx,rdi
       call      00007FFF7DC80780
       test      eax,eax
       je        short M01_L00
       mov       rcx,rdi
       mov       rdx,rsi
       call      System.ValueType.FastEqualsCheck(System.Object, System.Object)
       jmp       near ptr M01_L06
M01_L00:
       cmp       [rbx],ebx
       xor       edx,edx
       mov       [rsp+20],edx
       lea       rdx,[rsp+30]
       mov       rcx,rbx
       xor       r8d,r8d
       mov       r9d,34
       call      System.RuntimeType.GetFieldCandidates(System.String, System.Reflection.BindingFlags, Boolean)
       lea       rcx,[rsp+30]
       mov       rdx,offset MT_System.RuntimeType+ListBuilder`1[[System.Reflection.FieldInfo, System.Private.CoreLib]]
       call      System.RuntimeType+ListBuilder`1[[System.__Canon, System.Private.CoreLib]].ToArray()
       mov       rbx,rax
       xor       ebp,ebp
       mov       r14d,[rbx+8]
       test      r14d,r14d
       jle       short M01_L04
M01_L01:
       movsxd    rcx,ebp
       mov       rcx,[rbx+rcx*8+10]
       mov       rdx,rdi
       mov       rax,[rcx]
       mov       rax,[rax+58]
       call      qword ptr [rax]
       mov       r15,rax
       movsxd    rcx,ebp
       mov       rcx,[rbx+rcx*8+10]
       mov       rdx,rsi
       mov       rax,[rcx]
       mov       rax,[rax+58]
       call      qword ptr [rax]
       test      r15,r15
       jne       short M01_L02
       test      rax,rax
       je        short M01_L03
       jmp       short M01_L05
M01_L02:
       mov       rcx,r15
       mov       rdx,rax
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+10]
       test      eax,eax
       je        short M01_L05
M01_L03:
       inc       ebp
       cmp       r14d,ebp
       jg        short M01_L01
M01_L04:
       mov       eax,1
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L05:
       xor       eax,eax
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M01_L06:
       movzx     eax,al
       add       rsp,48
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
; Total bytes of code 295

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.HashEquatableStruct_Equals()
       push      rdi
       push      rsi
       sub       rsp,28
       cmp       [rcx],ecx
       lea       rsi,[rcx+38]
       add       rcx,0A8
       mov       rdx,[rcx]
       mov       edi,[rcx+8]
       mov       rcx,[rsi]
       call      System.Type.op_Equality(System.Type, System.Type)
       test      eax,eax
       je        short M00_L00
       mov       eax,[rsi+8]
       cmp       eax,edi
       sete      al
       movzx     eax,al
       jmp       short M00_L01
M00_L00:
       xor       eax,eax
M00_L01:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 59

Extern method System.Type.op_Equality(System.Type, System.Type)

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.ValueTuple_Equals()
       push      rdi
       push      rsi
       sub       rsp,28
       lea       rdx,[rcx+48]
       mov       r8,[rdx]
       mov       esi,[rdx+8]
       add       rcx,0B8
       mov       rax,[rcx]
       mov       edi,[rcx+8]
       mov       rcx,208D25B79B8
       mov       rcx,[rcx]
       mov       rdx,r8
       mov       r8,rax
       call      qword ptr [7FFF1E392B00]
       test      eax,eax
       je        short M00_L00
       cmp       esi,edi
       sete      al
       movzx     eax,al
       jmp       short M00_L01
M00_L00:
       xor       eax,eax
M00_L01:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 77
; System.Collections.Generic.ObjectEqualityComparer`1[[System.__Canon, System.Private.CoreLib]].Equals(System.__Canon, System.__Canon)
       sub       rsp,28
       test      rdx,rdx
       je        short M01_L01
       test      r8,r8
       je        short M01_L00
       mov       [rsp+38],rdx
       mov       rcx,rdx
       mov       rdx,r8
       mov       rax,[rsp+38]
       mov       rax,[rax]
       mov       rax,[rax+40]
       call      qword ptr [rax+10]
       nop
       add       rsp,28
       ret
M01_L00:
       xor       eax,eax
       add       rsp,28
       ret
M01_L01:
       test      r8,r8
       je        short M01_L02
       xor       eax,eax
       add       rsp,28
       ret
M01_L02:
       mov       eax,1
       add       rsp,28
       ret
; Total bytes of code 75

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.RecordStruct_Equals()
       push      rdi
       push      rsi
       sub       rsp,28
       cmp       [rcx],ecx
       lea       rsi,[rcx+58]
       add       rcx,0C8
       mov       r8,[rcx]
       mov       edi,[rcx+8]
       mov       rdx,[rsi]
       mov       rcx,224A14179B8
       mov       rcx,[rcx]
       call      qword ptr [7FFF1E362B00]
       test      eax,eax
       je        short M00_L00
       mov       eax,[rsi+8]
       cmp       eax,edi
       sete      al
       movzx     eax,al
       jmp       short M00_L01
M00_L00:
       xor       eax,eax
M00_L01:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 73
; System.Collections.Generic.ObjectEqualityComparer`1[[System.__Canon, System.Private.CoreLib]].Equals(System.__Canon, System.__Canon)
       sub       rsp,28
       test      rdx,rdx
       je        short M01_L01
       test      r8,r8
       je        short M01_L00
       mov       [rsp+38],rdx
       mov       rcx,rdx
       mov       rdx,r8
       mov       rax,[rsp+38]
       mov       rax,[rax]
       mov       rax,[rax+40]
       call      qword ptr [rax+10]
       nop
       add       rsp,28
       ret
M01_L00:
       xor       eax,eax
       add       rsp,28
       ret
M01_L01:
       test      r8,r8
       je        short M01_L02
       xor       eax,eax
       add       rsp,28
       ret
M01_L02:
       mov       eax,1
       add       rsp,28
       ret
; Total bytes of code 75

.NET 5.0.6 (5.0.621.22011), X64 RyuJIT

; EqualsBench.HashEquatableRecordStruct_Equals()
       push      rdi
       push      rsi
       sub       rsp,28
       cmp       [rcx],ecx
       lea       rsi,[rcx+68]
       add       rcx,0D8
       mov       rdx,[rcx]
       mov       edi,[rcx+8]
       mov       rcx,[rsi]
       call      System.Type.op_Equality(System.Type, System.Type)
       test      eax,eax
       je        short M00_L00
       mov       eax,[rsi+8]
       cmp       eax,edi
       sete      al
       movzx     eax,al
       jmp       short M00_L01
M00_L00:
       xor       eax,eax
M00_L01:
       add       rsp,28
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 59

Extern method System.Type.op_Equality(System.Type, System.Type)