Skip to content

[JitDiff X64] [EgorBo] Reduce Unsafe usage in primitive IBinaryInteger TryRe ... #1884

Open

Description

@MihuBot

Job completed in 2 minutes 57 seconds (remote runner delay: 0 seconds).
dotnet/runtime#127913

Main commit: dotnet/runtime@feeb7b9
PR commit: EgorBo/runtime-1@140ce16

Diffs

Found 82 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 46154992
Total bytes of diff: 46154917
Total bytes of delta: -75 (-0.00 % of base)
Total relative delta: -0.40
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
         -75 : System.Private.CoreLib.dasm (-0.00 % of base)

1 total files with Code Size differences (1 improved, 0 regressed), 259 unchanged.

Top method improvements (bytes):
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.IBinaryInteger<System.UInt32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.IBinaryInteger<System.UInt64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.IBinaryInteger<nuint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -9 (-1.86 % of base) : System.Private.CoreLib.dasm - System.Int128:System.Numerics.IBinaryInteger<System.Int128>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -6 (-2.56 % of base) : System.Private.CoreLib.dasm - System.UInt128:System.Numerics.IBinaryInteger<System.UInt128>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.73 % of base) : System.Private.CoreLib.dasm - System.Int32:System.Numerics.IBinaryInteger<System.Int32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.72 % of base) : System.Private.CoreLib.dasm - System.Int64:System.Numerics.IBinaryInteger<System.Int64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.72 % of base) : System.Private.CoreLib.dasm - System.IntPtr:System.Numerics.IBinaryInteger<nint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)

Top method improvements (percentages):
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.IBinaryInteger<System.UInt32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.IBinaryInteger<System.UInt64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
         -18 (-11.25 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.IBinaryInteger<nuint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -6 (-2.56 % of base) : System.Private.CoreLib.dasm - System.UInt128:System.Numerics.IBinaryInteger<System.UInt128>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -9 (-1.86 % of base) : System.Private.CoreLib.dasm - System.Int128:System.Numerics.IBinaryInteger<System.Int128>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.73 % of base) : System.Private.CoreLib.dasm - System.Int32:System.Numerics.IBinaryInteger<System.Int32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.72 % of base) : System.Private.CoreLib.dasm - System.Int64:System.Numerics.IBinaryInteger<System.Int64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
          -2 (-0.72 % of base) : System.Private.CoreLib.dasm - System.IntPtr:System.Numerics.IBinaryInteger<nint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)

8 total methods with Code Size differences (8 improved, 0 regressed), 286907 unchanged.

--------------------------------------------------------------------------------

Artifacts:

Activity

  1. MihuBot commented on May 7, 2026

    @MihuBot
    OwnerAuthor

    Top method improvements

    -18 (-11.25 % of base) - System.UInt32:System.Numerics.IBinaryInteger.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool
     ; Assembly listing for method System.UInt32:System.Numerics.IBinaryInteger<System.UInt32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; Emitting BLENDED_CODE for x64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; fully interruptible
     ; No PGO data
    -; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data
    +; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[byte]>
     ;  V01 arg1         [V01,T05] (  3,  2.50)   ubyte  ->  rdx         single-def
     ;  V02 arg2         [V02,T04] (  4,  3   )   byref  ->  r14         single-def
    -;  V03 loc0         [V03,T02] (  5, 10   )     int  ->  r13        
    -;  V04 loc1         [V04,T06] (  2,  4.50)   byref  ->  rax         single-def
    -;  V05 loc2         [V05,T00] (  6, 20.50)     int  ->  rcx        
    -;* V06 loc3         [V06    ] (  0,  0   )     int  ->  zero-ref   
    -;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    -;  V09 tmp2         [V09,T08] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    -;* V10 tmp3         [V10    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    -;* V11 tmp4         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    -;  V12 tmp5         [V12,T07] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    -;  V13 tmp6         [V13,T09] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    -;* V14 tmp7         [V14    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V15 tmp8         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V16 tmp9         [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V17 tmp10        [V17    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    -;* V18 tmp11        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V19 tmp12        [V19    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V20 tmp13        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V21 tmp14        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V22 tmp15        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    -;* V23 tmp16        [V23    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V24 tmp17        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    -;* V25 tmp18        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    -;* V26 tmp19        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    -;* V27 tmp20        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;  V28 tmp21        [V28,T03] (  5,  3   )   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    -;  V29 tmp22        [V29,T01] (  7,  8   )     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    -;* V30 tmp23        [V30    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
    -;* V31 tmp24        [V31    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
    -;* V32 tmp25        [V32    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
    -;* V33 tmp26        [V33    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
    -;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    -;* V35 tmp28        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    -;* V36 tmp29        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
    -;* V37 tmp30        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
    -;* V38 tmp31        [V38    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
    -;* V39 tmp32        [V39    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
    -;* V40 tmp33        [V40    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    -;* V41 tmp34        [V41    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;  V03 loc0         [V03,T02] (  5,  9.92)     int  ->  r13        
    +;* V04 loc1         [V04,T09] (  0,  0   )     int  ->  zero-ref   
    +;* V05 loc2         [V05    ] (  0,  0   )     int  ->  zero-ref   
    +;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;* V07 tmp1         [V07    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    +;  V08 tmp2         [V08,T07] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    +;* V09 tmp3         [V09    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    +;* V10 tmp4         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    +;  V11 tmp5         [V11,T06] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    +;  V12 tmp6         [V12,T08] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    +;* V13 tmp7         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V14 tmp8         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V15 tmp9         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V16 tmp10        [V16    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    +;* V17 tmp11        [V17    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V18 tmp12        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V19 tmp13        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V20 tmp14        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V21 tmp15        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    +;* V22 tmp16        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V23 tmp17        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    +;* V24 tmp18        [V24    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    +;* V25 tmp19        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    +;* V26 tmp20        [V26    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V27 tmp21        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V28 tmp22        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;  V29 tmp23        [V29,T03] (  5,  6.46)   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    +;  V30 tmp24        [V30,T01] (  7,  7.96)     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    +;* V31 tmp25        [V31    ] (  0,  0   )   byref  ->  zero-ref    "field V07._reference (fldOffset=0x0)" P-INDEP
    +;* V32 tmp26        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
    +;* V33 tmp27        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
    +;* V34 tmp28        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
    +;* V35 tmp29        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
    +;* V36 tmp30        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
    +;* V37 tmp31        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    +;* V38 tmp32        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    +;* V39 tmp33        [V39    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
    +;* V40 tmp34        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
    +;* V41 tmp35        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V26._reference (fldOffset=0x0)" P-INDEP
    +;* V42 tmp36        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
    +;* V43 tmp37        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    +;* V44 tmp38        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;* V45 tmp39        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V28._reference (fldOffset=0x0)" P-INDEP
    +;* V46 tmp40        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
    +;  V47 rat0         [V47,T00] (  6, 20.30)    long  ->  rax         "Widened IV V04"
     ;
     ; Lcl frame size = 0
     
     G_M12692_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     rbx
            lea      rbp, [rsp+0x20]
            mov      r15, rdi
            mov      ebx, esi
            mov      r14, rcx
     						;; size=21 bbWeight=1 PerfScore 6.25
     G_M12692_IG02:
            xor      r13d, r13d
            test     ebx, ebx
            je       SHORT G_M12692_IG07
     						;; size=7 bbWeight=1 PerfScore 1.50
     G_M12692_IG03:
            test     dl, dl
            jne      SHORT G_M12692_IG04
            lea      edi, [rbx-0x01]
            cmp      byte  ptr [r15+rdi], 0
            jl       SHORT G_M12692_IG10
     						;; size=14 bbWeight=0.50 PerfScore 2.38
     G_M12692_IG04:
            cmp      ebx, 4
            jle      SHORT G_M12692_IG05
            lea      rdi, bword ptr [r15+0x04]
            lea      edx, [rbx-0x04]
            xor      esi, esi
            mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            call     [rax]System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            test     eax, eax
            jge      SHORT G_M12692_IG10
     						;; size=30 bbWeight=0.50 PerfScore 3.50
     G_M12692_IG05:
    -       mov      rax, r15
            cmp      ebx, 4
            jge      SHORT G_M12692_IG09
    -       xor      ecx, ecx
    -       align    [14 bytes for IG06]
    -						;; size=24 bbWeight=0.50 PerfScore 1.00
    +       xor      eax, eax
    +       align    [1 bytes for IG06]
    +						;; size=8 bbWeight=0.50 PerfScore 0.88
     G_M12692_IG06:
    -       movsxd   rdx, ecx
    -       movzx    rdx, byte  ptr [rax+rdx]
    -       lea      edi, [8*rcx]
    -       shlx     edx, edx, edi
    -       or       r13d, edx
    -       inc      ecx
    -       cmp      ecx, ebx
    +       movzx    rcx, byte  ptr [r15+rax]
    +       lea      edx, [8*rax]
    +       shlx     ecx, ecx, edx
    +       or       r13d, ecx
    +       inc      eax
    +       cmp      eax, ebx
            jl       SHORT G_M12692_IG06
    -						;; size=28 bbWeight=4 PerfScore 20.00
    +						;; size=26 bbWeight=3.96 PerfScore 18.81
     G_M12692_IG07:
            mov      dword ptr [r14], r13d
            mov      eax, 1
     						;; size=8 bbWeight=0.50 PerfScore 0.62
     G_M12692_IG08:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     G_M12692_IG09:
            mov      r13d, dword ptr [r15]
            jmp      SHORT G_M12692_IG07
     						;; size=5 bbWeight=0.50 PerfScore 2.00
     G_M12692_IG10:
            xor      eax, eax
            mov      dword ptr [r14], eax
     						;; size=5 bbWeight=0.50 PerfScore 0.62
     G_M12692_IG11:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     
    -; Total bytes of code 160, prolog size 21, PerfScore 41.38, instruction count 57, allocated bytes for code 160 (MethodHash=f230ce6b) for method System.UInt32:System.Numerics.IBinaryInteger<System.UInt32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
    +; Total bytes of code 142, prolog size 21, PerfScore 40.06, instruction count 55, allocated bytes for code 142 (MethodHash=f230ce6b) for method System.UInt32:System.Numerics.IBinaryInteger<System.UInt32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; ============================================================
    -18 (-11.25 % of base) - System.UInt64:System.Numerics.IBinaryInteger.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool
     ; Assembly listing for method System.UInt64:System.Numerics.IBinaryInteger<System.UInt64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; Emitting BLENDED_CODE for x64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; fully interruptible
     ; No PGO data
    -; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data
    +; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[byte]>
     ;  V01 arg1         [V01,T05] (  3,  2.50)   ubyte  ->  rdx         single-def
     ;  V02 arg2         [V02,T04] (  4,  3   )   byref  ->  r14         single-def
    -;  V03 loc0         [V03,T02] (  5, 10   )    long  ->  r13        
    -;  V04 loc1         [V04,T06] (  2,  4.50)   byref  ->  rax         single-def
    -;  V05 loc2         [V05,T00] (  6, 20.50)     int  ->  rcx        
    -;* V06 loc3         [V06    ] (  0,  0   )    long  ->  zero-ref   
    -;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    -;  V09 tmp2         [V09,T08] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    -;* V10 tmp3         [V10    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    -;* V11 tmp4         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    -;  V12 tmp5         [V12,T07] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    -;  V13 tmp6         [V13,T09] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    -;* V14 tmp7         [V14    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V15 tmp8         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V16 tmp9         [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V17 tmp10        [V17    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    -;* V18 tmp11        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V19 tmp12        [V19    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V20 tmp13        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V21 tmp14        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V22 tmp15        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    -;* V23 tmp16        [V23    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V24 tmp17        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    -;* V25 tmp18        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    -;* V26 tmp19        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    -;* V27 tmp20        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;  V28 tmp21        [V28,T03] (  5,  3   )   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    -;  V29 tmp22        [V29,T01] (  7,  8   )     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    -;* V30 tmp23        [V30    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
    -;* V31 tmp24        [V31    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
    -;* V32 tmp25        [V32    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
    -;* V33 tmp26        [V33    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
    -;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    -;* V35 tmp28        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    -;* V36 tmp29        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
    -;* V37 tmp30        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
    -;* V38 tmp31        [V38    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
    -;* V39 tmp32        [V39    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
    -;* V40 tmp33        [V40    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    -;* V41 tmp34        [V41    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;  V03 loc0         [V03,T02] (  5,  9.92)    long  ->  r13        
    +;* V04 loc1         [V04,T09] (  0,  0   )     int  ->  zero-ref   
    +;* V05 loc2         [V05    ] (  0,  0   )    long  ->  zero-ref   
    +;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;* V07 tmp1         [V07    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    +;  V08 tmp2         [V08,T07] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    +;* V09 tmp3         [V09    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    +;* V10 tmp4         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    +;  V11 tmp5         [V11,T06] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    +;  V12 tmp6         [V12,T08] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    +;* V13 tmp7         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V14 tmp8         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V15 tmp9         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V16 tmp10        [V16    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    +;* V17 tmp11        [V17    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V18 tmp12        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V19 tmp13        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V20 tmp14        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V21 tmp15        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    +;* V22 tmp16        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V23 tmp17        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    +;* V24 tmp18        [V24    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    +;* V25 tmp19        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    +;* V26 tmp20        [V26    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V27 tmp21        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V28 tmp22        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;  V29 tmp23        [V29,T03] (  5,  6.46)   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    +;  V30 tmp24        [V30,T01] (  7,  7.96)     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    +;* V31 tmp25        [V31    ] (  0,  0   )   byref  ->  zero-ref    "field V07._reference (fldOffset=0x0)" P-INDEP
    +;* V32 tmp26        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
    +;* V33 tmp27        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
    +;* V34 tmp28        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
    +;* V35 tmp29        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
    +;* V36 tmp30        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
    +;* V37 tmp31        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    +;* V38 tmp32        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    +;* V39 tmp33        [V39    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
    +;* V40 tmp34        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
    +;* V41 tmp35        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V26._reference (fldOffset=0x0)" P-INDEP
    +;* V42 tmp36        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
    +;* V43 tmp37        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    +;* V44 tmp38        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;* V45 tmp39        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V28._reference (fldOffset=0x0)" P-INDEP
    +;* V46 tmp40        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
    +;  V47 rat0         [V47,T00] (  6, 20.30)    long  ->  rax         "Widened IV V04"
     ;
     ; Lcl frame size = 0
     
     G_M4916_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     rbx
            lea      rbp, [rsp+0x20]
            mov      r15, rdi
            mov      ebx, esi
            mov      r14, rcx
     						;; size=21 bbWeight=1 PerfScore 6.25
     G_M4916_IG02:
            xor      r13d, r13d
            test     ebx, ebx
            je       SHORT G_M4916_IG07
     						;; size=7 bbWeight=1 PerfScore 1.50
     G_M4916_IG03:
            test     dl, dl
            jne      SHORT G_M4916_IG04
            lea      edi, [rbx-0x01]
            cmp      byte  ptr [r15+rdi], 0
            jl       SHORT G_M4916_IG10
     						;; size=14 bbWeight=0.50 PerfScore 2.38
     G_M4916_IG04:
            cmp      ebx, 8
            jle      SHORT G_M4916_IG05
            lea      rdi, bword ptr [r15+0x08]
            lea      edx, [rbx-0x08]
            xor      esi, esi
            mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            call     [rax]System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            test     eax, eax
            jge      SHORT G_M4916_IG10
     						;; size=30 bbWeight=0.50 PerfScore 3.50
     G_M4916_IG05:
    -       mov      rax, r15
            cmp      ebx, 8
            jge      SHORT G_M4916_IG09
    -       xor      ecx, ecx
    -       align    [14 bytes for IG06]
    -						;; size=24 bbWeight=0.50 PerfScore 1.00
    +       xor      eax, eax
    +       align    [1 bytes for IG06]
    +						;; size=8 bbWeight=0.50 PerfScore 0.88
     G_M4916_IG06:
    -       movsxd   rdx, ecx
    -       movzx    rdx, byte  ptr [rax+rdx]
    -       lea      edi, [8*rcx]
    -       shlx     rdx, rdx, rdi
    -       or       r13, rdx
    -       inc      ecx
    -       cmp      ecx, ebx
    +       movzx    rcx, byte  ptr [r15+rax]
    +       lea      edx, [8*rax]
    +       shlx     rcx, rcx, rdx
    +       or       r13, rcx
    +       inc      eax
    +       cmp      eax, ebx
            jl       SHORT G_M4916_IG06
    -						;; size=28 bbWeight=4 PerfScore 20.00
    +						;; size=26 bbWeight=3.96 PerfScore 18.81
     G_M4916_IG07:
            mov      qword ptr [r14], r13
            mov      eax, 1
     						;; size=8 bbWeight=0.50 PerfScore 0.62
     G_M4916_IG08:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     G_M4916_IG09:
            mov      r13, qword ptr [r15]
            jmp      SHORT G_M4916_IG07
     						;; size=5 bbWeight=0.50 PerfScore 2.00
     G_M4916_IG10:
            xor      eax, eax
            mov      qword ptr [r14], rax
     						;; size=5 bbWeight=0.50 PerfScore 0.62
     G_M4916_IG11:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     
    -; Total bytes of code 160, prolog size 21, PerfScore 41.38, instruction count 57, allocated bytes for code 160 (MethodHash=1ccceccb) for method System.UInt64:System.Numerics.IBinaryInteger<System.UInt64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
    +; Total bytes of code 142, prolog size 21, PerfScore 40.06, instruction count 55, allocated bytes for code 142 (MethodHash=1ccceccb) for method System.UInt64:System.Numerics.IBinaryInteger<System.UInt64>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; ============================================================
    -18 (-11.25 % of base) - System.UIntPtr:System.Numerics.IBinaryInteger.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool
     ; Assembly listing for method System.UIntPtr:System.Numerics.IBinaryInteger<nuint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; Emitting BLENDED_CODE for x64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; fully interruptible
     ; No PGO data
    -; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data
    +; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[byte]>
     ;  V01 arg1         [V01,T05] (  3,  2.50)   ubyte  ->  rdx         single-def
     ;  V02 arg2         [V02,T04] (  4,  3   )   byref  ->  r14         single-def
    -;  V03 loc0         [V03,T02] (  5, 10   )    long  ->  r13        
    -;  V04 loc1         [V04,T06] (  2,  4.50)   byref  ->  rax         single-def
    -;  V05 loc2         [V05,T00] (  6, 20.50)     int  ->  rcx        
    -;* V06 loc3         [V06    ] (  0,  0   )    long  ->  zero-ref   
    -;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;* V08 tmp1         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    -;  V09 tmp2         [V09,T08] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    -;* V10 tmp3         [V10    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    -;* V11 tmp4         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    -;  V12 tmp5         [V12,T07] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    -;  V13 tmp6         [V13,T09] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    -;* V14 tmp7         [V14    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V15 tmp8         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V16 tmp9         [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V17 tmp10        [V17    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    -;* V18 tmp11        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V19 tmp12        [V19    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V20 tmp13        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V21 tmp14        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V22 tmp15        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    -;* V23 tmp16        [V23    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V24 tmp17        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    -;* V25 tmp18        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    -;* V26 tmp19        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    -;* V27 tmp20        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;  V28 tmp21        [V28,T03] (  5,  3   )   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    -;  V29 tmp22        [V29,T01] (  7,  8   )     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    -;* V30 tmp23        [V30    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
    -;* V31 tmp24        [V31    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
    -;* V32 tmp25        [V32    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
    -;* V33 tmp26        [V33    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
    -;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    -;* V35 tmp28        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    -;* V36 tmp29        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
    -;* V37 tmp30        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
    -;* V38 tmp31        [V38    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
    -;* V39 tmp32        [V39    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
    -;* V40 tmp33        [V40    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    -;* V41 tmp34        [V41    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;  V03 loc0         [V03,T02] (  5,  9.92)    long  ->  r13        
    +;* V04 loc1         [V04,T09] (  0,  0   )     int  ->  zero-ref   
    +;* V05 loc2         [V05    ] (  0,  0   )    long  ->  zero-ref   
    +;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;* V07 tmp1         [V07    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    +;  V08 tmp2         [V08,T07] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    +;* V09 tmp3         [V09    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    +;* V10 tmp4         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    +;  V11 tmp5         [V11,T06] (  2,  2   )   byref  ->  rdi         single-def "Inlining Arg"
    +;  V12 tmp6         [V12,T08] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    +;* V13 tmp7         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V14 tmp8         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V15 tmp9         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V16 tmp10        [V16    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    +;* V17 tmp11        [V17    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V18 tmp12        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V19 tmp13        [V19    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V20 tmp14        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V21 tmp15        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    +;* V22 tmp16        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V23 tmp17        [V23    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    +;* V24 tmp18        [V24    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    +;* V25 tmp19        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    +;* V26 tmp20        [V26    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V27 tmp21        [V27    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V28 tmp22        [V28    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;  V29 tmp23        [V29,T03] (  5,  6.46)   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    +;  V30 tmp24        [V30,T01] (  7,  7.96)     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    +;* V31 tmp25        [V31    ] (  0,  0   )   byref  ->  zero-ref    "field V07._reference (fldOffset=0x0)" P-INDEP
    +;* V32 tmp26        [V32    ] (  0,  0   )     int  ->  zero-ref    "field V07._length (fldOffset=0x8)" P-INDEP
    +;* V33 tmp27        [V33    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
    +;* V34 tmp28        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
    +;* V35 tmp29        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
    +;* V36 tmp30        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
    +;* V37 tmp31        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    +;* V38 tmp32        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    +;* V39 tmp33        [V39    ] (  0,  0   )   byref  ->  zero-ref    "field V19._reference (fldOffset=0x0)" P-INDEP
    +;* V40 tmp34        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V19._length (fldOffset=0x8)" P-INDEP
    +;* V41 tmp35        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V26._reference (fldOffset=0x0)" P-INDEP
    +;* V42 tmp36        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
    +;* V43 tmp37        [V43    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
    +;* V44 tmp38        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
    +;* V45 tmp39        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V28._reference (fldOffset=0x0)" P-INDEP
    +;* V46 tmp40        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
    +;  V47 rat0         [V47,T00] (  6, 20.30)    long  ->  rax         "Widened IV V04"
     ;
     ; Lcl frame size = 0
     
     G_M647_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     rbx
            lea      rbp, [rsp+0x20]
            mov      r15, rdi
            mov      ebx, esi
            mov      r14, rcx
     						;; size=21 bbWeight=1 PerfScore 6.25
     G_M647_IG02:
            xor      r13d, r13d
            test     ebx, ebx
            je       SHORT G_M647_IG07
     						;; size=7 bbWeight=1 PerfScore 1.50
     G_M647_IG03:
            test     dl, dl
            jne      SHORT G_M647_IG04
            lea      edi, [rbx-0x01]
            cmp      byte  ptr [r15+rdi], 0
            jl       SHORT G_M647_IG10
     						;; size=14 bbWeight=0.50 PerfScore 2.38
     G_M647_IG04:
            cmp      ebx, 8
            jle      SHORT G_M647_IG05
            lea      rdi, bword ptr [r15+0x08]
            lea      edx, [rbx-0x08]
            xor      esi, esi
            mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            call     [rax]System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            test     eax, eax
            jge      SHORT G_M647_IG10
     						;; size=30 bbWeight=0.50 PerfScore 3.50
     G_M647_IG05:
    -       mov      rax, r15
            cmp      ebx, 8
            jge      SHORT G_M647_IG09
    -       xor      ecx, ecx
    -       align    [14 bytes for IG06]
    -						;; size=24 bbWeight=0.50 PerfScore 1.00
    +       xor      eax, eax
    +       align    [1 bytes for IG06]
    +						;; size=8 bbWeight=0.50 PerfScore 0.88
     G_M647_IG06:
    -       movsxd   rdx, ecx
    -       movzx    rdx, byte  ptr [rax+rdx]
    -       lea      edi, [8*rcx]
    -       shlx     rdx, rdx, rdi
    -       or       r13, rdx
    -       inc      ecx
    -       cmp      ecx, ebx
    +       movzx    rcx, byte  ptr [r15+rax]
    +       lea      edx, [8*rax]
    +       shlx     rcx, rcx, rdx
    +       or       r13, rcx
    +       inc      eax
    +       cmp      eax, ebx
            jl       SHORT G_M647_IG06
    -						;; size=28 bbWeight=4 PerfScore 20.00
    +						;; size=26 bbWeight=3.96 PerfScore 18.81
     G_M647_IG07:
            mov      qword ptr [r14], r13
            mov      eax, 1
     						;; size=8 bbWeight=0.50 PerfScore 0.62
     G_M647_IG08:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     G_M647_IG09:
            mov      r13, qword ptr [r15]
            jmp      SHORT G_M647_IG07
     						;; size=5 bbWeight=0.50 PerfScore 2.00
     G_M647_IG10:
            xor      eax, eax
            mov      qword ptr [r14], rax
     						;; size=5 bbWeight=0.50 PerfScore 0.62
     G_M647_IG11:
            pop      rbx
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=9 bbWeight=0.50 PerfScore 1.75
     
    -; Total bytes of code 160, prolog size 21, PerfScore 41.38, instruction count 57, allocated bytes for code 160 (MethodHash=8c65fd78) for method System.UIntPtr:System.Numerics.IBinaryInteger<nuint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
    +; Total bytes of code 142, prolog size 21, PerfScore 40.06, instruction count 55, allocated bytes for code 142 (MethodHash=8c65fd78) for method System.UIntPtr:System.Numerics.IBinaryInteger<nuint>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; ============================================================
    -2 (-0.73 % of base) - System.Int32:System.Numerics.IBinaryInteger.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool
     ; Assembly listing for method System.Int32:System.Numerics.IBinaryInteger<System.Int32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; Emitting BLENDED_CODE for x64 + VEX + EVEX on Unix
     ; FullOpts code
     ; optimized code
     ; rbp based frame
     ; fully interruptible
     ; No PGO data
    -; 0 inlinees with PGO data; 12 single block inlinees; 5 inlinees without PGO data
    +; 0 inlinees with PGO data; 13 single block inlinees; 6 inlinees without PGO data
     ; Final local variable assignments
     ;
     ;* V00 arg0         [V00    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[byte]>
     ;  V01 arg1         [V01,T04] (  5,  3.50)   ubyte  ->  registers  
     ;  V02 arg2         [V02,T05] (  4,  3   )   byref  ->  r14         single-def
    -;  V03 loc0         [V03,T01] (  9, 12   )     int  ->  r13        
    -;  V04 loc1         [V04,T07] (  4,  2   )    byte  ->  rdi        
    -;  V05 loc2         [V05,T06] (  2,  4.50)   byref  ->  rax         single-def
    -;  V06 loc3         [V06,T00] (  5, 16.50)     int  ->  rcx        
    -;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    -;  V08 tmp1         [V08,T10] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    -;* V09 tmp2         [V09    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    -;* V10 tmp3         [V10    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    -;  V11 tmp4         [V11,T09] (  2,  2   )   byref  ->  rsi         single-def "Inlining Arg"
    -;  V12 tmp5         [V12,T11] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    -;* V13 tmp6         [V13    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
    -;* V14 tmp7         [V14    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V15 tmp8         [V15    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;  V16 tmp9         [V16,T12] (  2,  2   )   ubyte  ->  rax         "Inlining Arg"
    -;* V17 tmp10        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V18 tmp11        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    -;* V19 tmp12        [V19    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V20 tmp13        [V20    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V21 tmp14        [V21    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;* V22 tmp15        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    -;* V23 tmp16        [V23    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    -;* V24 tmp17        [V24    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    -;* V25 tmp18        [V25    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    -;* V26 tmp19        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    -;* V27 tmp20        [V27    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    -;* V28 tmp21        [V28    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    -;* V29 tmp22        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    -;  V30 tmp23        [V30,T03] (  6,  3.50)   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    -;  V31 tmp24        [V31,T02] (  9,  9   )     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    -;* V32 tmp25        [V32    ] (  0,  0   )   byref  ->  zero-ref    "field V09._reference (fldOffset=0x0)" P-INDEP
    -;* V33 tmp26        [V33    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
    -;* V34 tmp27        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V10._reference (fldOffset=0x0)" P-INDEP
    -;* V35 tmp28        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V10._length (fldOffset=0x8)" P-INDEP
    -;* V36 tmp29        [V36    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
    -;* V37 tmp30        [V37    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
    -;* V38 tmp31        [V38    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
    -;* V39 tmp32        [V39    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
    -;* V40 tmp33        [V40    ] (  0,  0   )   byref  ->  zero-ref    "field V21._reference (fldOffset=0x0)" P-INDEP
    -;* V41 tmp34        [V41    ] (  0,  0   )     int  ->  zero-ref    "field V21._length (fldOffset=0x8)" P-INDEP
    -;* V42 tmp35        [V42    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V29._reference (fldOffset=0x0)" P-INDEP
    -;* V43 tmp36        [V43    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
    -;  V44 cse0         [V44,T13] (  3,  1.50)     int  ->  rax         "CSE #03: moderate"
    -;  V45 cse1         [V45,T08] (  4,  2   )     int  ->  r12         "CSE #01: moderate"
    +;  V03 loc0         [V03,T01] (  9, 11.92)     int  ->  r13        
    +;  V04 loc1         [V04,T06] (  4,  2   )    byte  ->  rdi        
    +;* V05 loc2         [V05,T13] (  0,  0   )     int  ->  zero-ref   
    +;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
    +;  V07 tmp1         [V07,T09] (  2,  2   )     int  ->  rdi         "Span.get_Item index"
    +;* V08 tmp2         [V08    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.ReadOnlySpan`1[byte]>
    +;* V09 tmp3         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[byte]>
    +;  V10 tmp4         [V10,T08] (  2,  2   )   byref  ->  rsi         single-def "Inlining Arg"
    +;  V11 tmp5         [V11,T10] (  2,  2   )     int  ->  rdx         "Inlining Arg"
    +;* V12 tmp6         [V12    ] (  0,  0   )   ubyte  ->  zero-ref    "Inlining Arg"
    +;* V13 tmp7         [V13    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V14 tmp8         [V14    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;  V15 tmp9         [V15,T11] (  2,  2   )   ubyte  ->  rax         "Inlining Arg"
    +;* V16 tmp10        [V16    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V17 tmp11        [V17    ] (  0,  0   )   byref  ->  zero-ref    single-def "Inlining Arg"
    +;* V18 tmp12        [V18    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V19 tmp13        [V19    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V20 tmp14        [V20    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V21 tmp15        [V21    ] (  0,  0   )     int  ->  zero-ref    "Inline return value spill temp"
    +;* V22 tmp16        [V22    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
    +;* V23 tmp17        [V23    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
    +;* V24 tmp18        [V24    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
    +;* V25 tmp19        [V25    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
    +;* V26 tmp20        [V26    ] (  0,  0   )   ubyte  ->  zero-ref    ld-addr-op "Inlining Arg"
    +;* V27 tmp21        [V27    ] (  0,  0   )    byte  ->  zero-ref    "Inlining Arg"
    +;* V28 tmp22        [V28    ] (  0,  0   )  struct (16) zero-ref    "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V29 tmp23        [V29    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;* V30 tmp24        [V30    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[byte]>
    +;  V31 tmp25        [V31,T03] (  6,  6.96)   byref  ->  r15         single-def "field V00._reference (fldOffset=0x0)" P-INDEP
    +;  V32 tmp26        [V32,T02] (  9,  8.96)     int  ->  rbx         single-def "field V00._length (fldOffset=0x8)" P-INDEP
    +;* V33 tmp27        [V33    ] (  0,  0   )   byref  ->  zero-ref    "field V08._reference (fldOffset=0x0)" P-INDEP
    +;* V34 tmp28        [V34    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
    +;* V35 tmp29        [V35    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V09._reference (fldOffset=0x0)" P-INDEP
    +;* V36 tmp30        [V36    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
    +;* V37 tmp31        [V37    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
    +;* V38 tmp32        [V38    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
    +;* V39 tmp33        [V39    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
    +;* V40 tmp34        [V40    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
    +;* V41 tmp35        [V41    ] (  0,  0   )   byref  ->  zero-ref    "field V20._reference (fldOffset=0x0)" P-INDEP
    +;* V42 tmp36        [V42    ] (  0,  0   )     int  ->  zero-ref    "field V20._length (fldOffset=0x8)" P-INDEP
    +;* V43 tmp37        [V43    ] (  0,  0   )   byref  ->  zero-ref    "field V28._reference (fldOffset=0x0)" P-INDEP
    +;* V44 tmp38        [V44    ] (  0,  0   )     int  ->  zero-ref    "field V28._length (fldOffset=0x8)" P-INDEP
    +;* V45 tmp39        [V45    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V29._reference (fldOffset=0x0)" P-INDEP
    +;* V46 tmp40        [V46    ] (  0,  0   )     int  ->  zero-ref    "field V29._length (fldOffset=0x8)" P-INDEP
    +;* V47 tmp41        [V47    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V30._reference (fldOffset=0x0)" P-INDEP
    +;* V48 tmp42        [V48    ] (  0,  0   )     int  ->  zero-ref    "field V30._length (fldOffset=0x8)" P-INDEP
    +;  V49 cse0         [V49,T12] (  3,  1.50)     int  ->  rax         "CSE #03: moderate"
    +;  V50 cse1         [V50,T07] (  4,  2   )     int  ->  r12         "CSE #01: moderate"
    +;  V51 rat0         [V51,T00] (  5, 16.34)    long  ->  rax         "Widened IV V05"
     ;
     ; Lcl frame size = 8
     
     G_M42804_IG01:
            push     rbp
            push     r15
            push     r14
            push     r13
            push     r12
            push     rbx
            push     rax
            lea      rbp, [rsp+0x30]
            mov      r15, rdi
            mov      ebx, esi
            mov      r14, rcx
     						;; size=24 bbWeight=1 PerfScore 8.25
     G_M42804_IG02:
            xor      r13d, r13d
            test     ebx, ebx
            je       G_M42804_IG09
     						;; size=11 bbWeight=1 PerfScore 1.50
     G_M42804_IG03:
            lea      edi, [rbx-0x01]
            movsx    rdi, byte  ptr [r15+rdi]
            sar      edi, 31
            movsx    rdi, dil
            movzx    rdx, dl
            test     edi, edi
            sete     sil
            movzx    rsi, sil
            or       edx, esi
            movzx    r12, dl
            test     r12d, r12d
            je       SHORT G_M42804_IG04
            test     edi, edi
            jge      SHORT G_M42804_IG04
            cmp      ebx, 4
            jge      G_M42804_IG11
     						;; size=52 bbWeight=0.50 PerfScore 4.38
     G_M42804_IG04:
            cmp      ebx, 4
            jle      SHORT G_M42804_IG05
            lea      rsi, bword ptr [r15+0x04]
            lea      edx, [rbx-0x04]
            movzx    rax, dil
            mov      rdi, rsi
            mov      esi, eax
            mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            call     [rax]System.SpanHelpers:NonPackedIndexOfValueType[byte,System.SpanHelpers+Negate`1[byte]](byref,byte,int):int
            test     eax, eax
    -       jge      G_M42804_IG11
    +       jge      SHORT G_M42804_IG11
    +		  ;; NOP compensation instructions of 4 bytes.
            cmp      byte  ptr [r15+0x03], 0
            setl     al
            movzx    rax, al
            cmp      r12d, eax
            je       SHORT G_M42804_IG11
     						;; size=57 bbWeight=0.50 PerfScore 5.75
     G_M42804_IG05:
    -       mov      rax, r15
            cmp      ebx, 4
            jge      SHORT G_M42804_IG08
    -       xor      ecx, ecx
    -       align    [6 bytes for IG06]
    -						;; size=16 bbWeight=0.50 PerfScore 1.00
    +       xor      eax, eax
    +       align    [9 bytes for IG06]
    +						;; size=16 bbWeight=0.50 PerfScore 0.88
     G_M42804_IG06:
    -       movsxd   rdx, ecx
    -       movzx    rdx, byte  ptr [rax+rdx]
    +       movzx    rcx, byte  ptr [r15+rax]
            shl      r13d, 8
    -       or       r13d, edx
    -       inc      ecx
    -       cmp      ecx, ebx
    +       or       r13d, ecx
    +       inc      eax
    +       cmp      eax, ebx
            jl       SHORT G_M42804_IG06
    -						;; size=20 bbWeight=4 PerfScore 18.00
    +						;; size=18 bbWeight=3.96 PerfScore 16.83
     G_M42804_IG07:
            mov      eax, ebx
            neg      eax
            shl      eax, 3
            lea      ecx, [rax+0x20]
            shlx     ecx, r13d, ecx
            mov      r13d, ecx
            bswap    r13d
            test     r12d, r12d
            jne      SHORT G_M42804_IG09
            add      eax, 31
            mov      ecx, 0xD1FFAB1E
            sarx     eax, ecx, eax
            or       eax, r13d
            mov      r13d, eax
            jmp      SHORT G_M42804_IG09
     						;; size=47 bbWeight=0.50 PerfScore 3.75
     G_M42804_IG08:
            mov      r13d, dword ptr [r15]
     						;; size=3 bbWeight=0.50 PerfScore 1.00
     G_M42804_IG09:
            mov      dword ptr [r14], r13d
            mov      eax, 1
     						;; size=8 bbWeight=0.50 PerfScore 0.62
     G_M42804_IG10:
            add      rsp, 8
            pop      rbx
            pop      r12
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=15 bbWeight=0.50 PerfScore 2.12
     G_M42804_IG11:
            xor      eax, eax
            mov      dword ptr [r14], eax
     						;; size=5 bbWeight=0.50 PerfScore 0.62
     G_M42804_IG12:
            add      rsp, 8
            pop      rbx
            pop      r12
            pop      r13
            pop      r14
            pop      r15
            pop      rbp
            ret      
     						;; size=15 bbWeight=0.50 PerfScore 2.12
     
    -; Total bytes of code 273, prolog size 24, PerfScore 49.12, instruction count 94, allocated bytes for code 273 (MethodHash=5cb458cb) for method System.Int32:System.Numerics.IBinaryInteger<System.Int32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
    +; Total bytes of code 271, prolog size 24, PerfScore 47.83, instruction count 92, allocated bytes for code 271 (MethodHash=5cb458cb) for method System.Int32:System.Numerics.IBinaryInteger<System.Int32>.TryReadLittleEndian(System.ReadOnlySpan`1[byte],bool,byref):bool (FullOpts)
     ; ============================================================

    Note: some changes were skipped as they were too large to fit into a comment.

    Larger list of diffs: https://gist.github.com/MihuBot/04afea51067e218fbf20b14bff4843ed

  2. MihuBot commented on May 7, 2026

    @MihuBot
    OwnerAuthor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions