Skip to content
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

[JitDiff X64] MihaZupan/runtime/jit-uint16mod-2 #901

Open
MihuBot opened this issue Jan 17, 2025 · 2 comments
Open

[JitDiff X64] MihaZupan/runtime/jit-uint16mod-2 #901

MihuBot opened this issue Jan 17, 2025 · 2 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 17, 2025

Job completed in 11 minutes 44 seconds.
https://github.com/MihaZupan/runtime/tree/jit-uint16mod-2

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40346286
Total bytes of diff: 40346212
Total bytes of delta: -74 (-0.00 % of base)
Total relative delta: -0.05
    diff is an improvement.
    relative diff is an improvement.


Top file improvements (bytes):
         -42 : System.Private.CoreLib.dasm (-0.00 % of base)
         -32 : System.Text.Encoding.CodePages.dasm (-0.04 % of base)

2 total files with Code Size differences (2 improved, 0 regressed), 257 unchanged.

Top method improvements (bytes):
         -32 (-1.38 % of base) : System.Text.Encoding.CodePages.dasm - System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
         -20 (-1.36 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:Tokenize(int,byref,byref,byref):ubyte:this (FullOpts)
         -18 (-1.87 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:InsertHash(System.Globalization.DateTimeFormatInfo+TokenHashValue[],System.String,int,int):this (FullOpts)
          -4 (-0.80 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this (FullOpts)

Top method improvements (percentages):
         -18 (-1.87 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:InsertHash(System.Globalization.DateTimeFormatInfo+TokenHashValue[],System.String,int,int):this (FullOpts)
         -32 (-1.38 % of base) : System.Text.Encoding.CodePages.dasm - System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
         -20 (-1.36 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:Tokenize(int,byref,byref,byref):ubyte:this (FullOpts)
          -4 (-0.80 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this (FullOpts)

4 total methods with Code Size differences (4 improved, 0 regressed), 235357 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 17, 2025

Top method improvements

-32 (-1.38 % of base) - System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this
 ; Assembly listing for method System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 13 single block inlinees; 31 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T36] (  5,  19   )     ref  ->  r15         this class-hnd single-def <System.Text.GB18030Encoding>
 ;  V01 arg1         [V01,T73] (  3,   3   )    long  ->  r13         single-def
 ;  V02 arg2         [V02,T74] (  3,   3   )     int  ->  r12         single-def
 ;  V03 arg3         [V03,T72] (  4,   3.50)    long  ->  r14         single-def
 ;  V04 arg4         [V04,T75] (  3,   3   )     int  ->  [rbp-0x2C]  single-def
 ;  V05 arg5         [V05,T08] ( 10, 136.50)     ref  ->  rbx         class-hnd single-def <System.Text.EncoderNLS>
 ;  V06 loc0         [V06,T21] ( 12,  36   )  ushort  ->  [rbp-0x30] 
 ;  V07 loc1         [V07,T01] (180,2714.50)     ref  ->  r13         class-hnd exact single-def <System.Text.EncodingByteBuffer>
 ;* V08 loc2         [V08    ] (  0,   0   )  ushort  ->  zero-ref   
 ;  V09 loc3         [V09,T25] ( 12,  24   )     int  ->  registers  
 ;  V10 loc4         [V10,T76] (  2,   4   )   ubyte  ->  rdi        
 ;  V11 loc5         [V11,T77] (  2,   4   )   ubyte  ->  rcx        
 ;  V12 loc6         [V12,T78] (  2,   4   )   ubyte  ->  rdx        
-;  V13 loc7         [V13,T06] ( 16, 176   )  ushort  ->  rcx        
+;  V13 loc7         [V13,T07] ( 13, 152   )  ushort  ->  rax        
 ;  V14 loc8         [V14,T38] (  2,  16   )   ubyte  ->  rdi        
-;  V15 loc9         [V15,T39] (  2,  16   )   ubyte  ->  rsi        
-;  V16 loc10        [V16,T40] (  2,  16   )   ubyte  ->  rax        
+;  V15 loc9         [V15,T39] (  2,  16   )   ubyte  ->  rcx        
+;  V16 loc10        [V16,T40] (  2,  16   )   ubyte  ->  rdx        
 ;  V17 OutArgs      [V17    ] (  1,   1   )  struct ( 8) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V18 tmp1         [V18,T57] (  3,   6   )     ref  ->  [rbp-0x38]  class-hnd exact spill-single-def "NewObj constructor temp" <System.Text.EncodingByteBuffer>
 ;  V19 tmp2         [V19,T15] ( 14,  82   )  ushort  ->  rsi         "Inline stloc first use temp"
 ;  V20 tmp3         [V20,T58] (  3,   6   )    long  ->  rdi         "Inline stloc first use temp"
 ;  V21 tmp4         [V21,T37] (  4,  16   )   byref  ->  r12         "Inlining Arg"
 ;  V22 tmp5         [V22,T52] (  4,   8   )  ushort  ->  rsi         "Inline stloc first use temp"
 ;  V23 tmp6         [V23,T79] (  2,   4   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V24 tmp7         [V24    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V25 tmp8         [V25    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V26 tmp9         [V26,T59] (  3,   6   )    long  ->  rax         "Inline stloc first use temp"
 ;* V27 tmp10        [V27    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V28 tmp11        [V28    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V29 tmp12        [V29,T60] (  3,   6   )    long  ->  rax         "Inline stloc first use temp"
 ;* V30 tmp13        [V30    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V31 tmp14        [V31,T61] (  3,   6   )    long  ->  rax         "Inline stloc first use temp"
 ;  V32 tmp15        [V32,T62] (  3,   6   )   ubyte  ->  rax         "Inline return value spill temp"
 ;  V33 tmp16        [V33,T63] (  3,   6   )    long  ->  rax         "Inline stloc first use temp"
 ;* V34 tmp17        [V34    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V35 tmp18        [V35    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V36 tmp19        [V36,T26] (  3,  24   )    long  ->  rdi         "Inline stloc first use temp"
 ;* V37 tmp20        [V37    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V38 tmp21        [V38,T56] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V39 tmp22        [V39,T27] (  3,  24   )   ubyte  ->  rdi         "Inline stloc first use temp"
 ;  V40 tmp23        [V40,T41] (  2,  16   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V41 tmp24        [V41    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V42 tmp25        [V42    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V43 tmp26        [V43,T28] (  3,  24   )    long  ->  rdx         "Inline stloc first use temp"
+;  V43 tmp26        [V43,T28] (  3,  24   )    long  ->  rsi         "Inline stloc first use temp"
 ;* V44 tmp27        [V44    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V45 tmp28        [V45    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
-;  V46 tmp29        [V46,T29] (  3,  24   )    long  ->  rcx         "Inline stloc first use temp"
+;  V46 tmp29        [V46,T29] (  3,  24   )    long  ->  rax         "Inline stloc first use temp"
 ;* V47 tmp30        [V47    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V48 tmp31        [V48,T30] (  3,  24   )    long  ->  rax         "Inline stloc first use temp"
 ;  V49 tmp32        [V49,T31] (  3,  24   )   ubyte  ->  rax         "Inline return value spill temp"
 ;  V50 tmp33        [V50,T32] (  3,  24   )    long  ->  rax         "Inline stloc first use temp"
 ;* V51 tmp34        [V51    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V52 tmp35        [V52    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V53 tmp36        [V53,T10] (  2, 128   )   ubyte  ->  rax         "Inline return value spill temp"
 ;* V54 tmp37        [V54    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V55 tmp38        [V55    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V56 tmp39        [V56    ] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V57 tmp40        [V57,T12] (  3,  96   )    long  ->  rdi         "Inline stloc first use temp"
 ;* V58 tmp41        [V58    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;  V59 tmp42        [V59,T09] (  3, 128   )   ubyte  ->  rax         "Inline return value spill temp"
 ;  V60 tmp43        [V60,T13] (  3,  96   )    long  ->  rdi         "Inline stloc first use temp"
 ;* V61 tmp44        [V61    ] (  0,   0   )   ubyte  ->  zero-ref    "Inlining Arg"
 ;* V62 tmp45        [V62,T11] (  0,   0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;  V63 tmp46        [V63,T00] (  3,3072   )     ref  ->  rdi         "argument with side effect"
 ;  V64 tmp47        [V64,T42] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V65 tmp48        [V65,T04] (  3, 192   )     ref  ->  rdi         "argument with side effect"
 ;  V66 tmp49        [V66,T05] (  3, 192   )     ref  ->  rdi         "argument with side effect"
 ;  V67 tmp50        [V67,T16] (  3,  48   )     ref  ->  rdi         "argument with side effect"
 ;  V68 tmp51        [V68,T17] (  3,  48   )     ref  ->  rdi         "argument with side effect"
 ;  V69 tmp52        [V69,T18] (  3,  48   )     ref  ->  rdi         "argument with side effect"
 ;  V70 tmp53        [V70,T19] (  3,  48   )     ref  ->  rdi         "argument with side effect"
 ;  V71 tmp54        [V71,T20] (  3,  48   )     ref  ->  rdi         "argument with side effect"
 ;  V72 tmp55        [V72,T43] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V73 tmp56        [V73,T44] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V74 tmp57        [V74,T45] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V75 tmp58        [V75,T46] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V76 tmp59        [V76,T47] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V77 tmp60        [V77,T48] (  3,  12   )     ref  ->  rdi         "argument with side effect"
 ;  V78 cse0         [V78,T64] (  3,   6   )     int  ->  rax         "CSE #04: conservative"
 ;  V79 cse1         [V79,T65] (  3,   6   )     int  ->  rax         "CSE #05: conservative"
 ;  V80 cse2         [V80,T66] (  3,   6   )     int  ->  rax         "CSE #06: conservative"
 ;  V81 cse3         [V81,T02] ( 16, 296   )    long  ->  registers   multi-def "CSE #07: aggressive"
 ;  V82 cse4         [V82,T03] (  4, 192   )    long  ->  rdi         "CSE #33: aggressive"
-;  V83 cse5         [V83,T07] ( 15, 156   )    long  ->  rdi         multi-def "CSE #02: aggressive"
+;  V83 cse5         [V83,T06] ( 15, 156   )    long  ->  rdi         multi-def "CSE #02: aggressive"
 ;  V84 cse6         [V84,T14] (  3,  96   )    long  ->  rdi         "CSE #34: moderate"
-;  V85 cse7         [V85,T22] (  4,  32   )    long  ->  rcx         "CSE #27: moderate"
+;  V85 cse7         [V85,T22] (  4,  32   )    long  ->  rax         "CSE #27: moderate"
 ;  V86 cse8         [V86,T23] (  4,  32   )    long  ->  rax         "CSE #29: moderate"
 ;  V87 cse9         [V87,T24] (  4,  32   )    long  ->  rax         "CSE #31: moderate"
 ;  V88 cse10        [V88,T33] (  3,  24   )    long  ->  rdi         "CSE #28: moderate"
 ;  V89 cse11        [V89,T34] (  3,  24   )    long  ->  rdi         "CSE #30: moderate"
 ;  V90 cse12        [V90,T35] (  3,  24   )    long  ->  rdi         "CSE #32: moderate"
 ;  V91 cse13        [V91,T53] (  4,   8   )    long  ->  rax         "CSE #15: conservative"
 ;  V92 cse14        [V92,T54] (  4,   8   )    long  ->  rax         "CSE #17: conservative"
 ;  V93 cse15        [V93,T55] (  4,   8   )    long  ->  rax         "CSE #19: conservative"
 ;  V94 cse16        [V94,T67] (  3,   6   )    long  ->  rdi         "CSE #01: conservative"
 ;  V95 cse17        [V95,T68] (  3,   6   )    long  ->  rdi         "CSE #16: conservative"
 ;  V96 cse18        [V96,T69] (  3,   6   )    long  ->  rdi         "CSE #18: conservative"
 ;  V97 cse19        [V97,T70] (  3,   6   )    long  ->  rdi         "CSE #20: conservative"
 ;  V98 cse20        [V98,T71] (  3,   6   )    long  ->  rdi         "CSE #21: conservative"
 ;  V99 rat0         [V99,T49] (  3,  12   )     int  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;  V100 rat1        [V100,T50] (  3,  12   )     int  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;  V101 rat2        [V101,T51] (  3,  12   )     int  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 24
 
 G_M32130_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x40]
        mov      dword ptr [rbp-0x2C], r8d
        mov      r15, rdi
        mov      r13, rsi
        mov      r12d, edx
        mov      r14, rcx
        mov      rbx, r9
 						;; size=38 bbWeight=1 PerfScore 9.00
 G_M32130_IG02:
        xor      ecx, ecx
        test     rbx, rbx
        mov      dword ptr [rbp-0x30], ecx
        je       SHORT G_M32130_IG04
 						;; size=10 bbWeight=1 PerfScore 2.50
 G_M32130_IG03:
        movzx    rcx, word  ptr [rbx+0x34]
        mov      dword ptr [rbp-0x30], ecx
 						;; size=7 bbWeight=0.50 PerfScore 1.50
 G_M32130_IG04:
        mov      rdi, 0xD1FFAB1E      ; System.Text.EncodingByteBuffer
        call     CORINFO_HELP_NEWSFAST
        mov      gword ptr [rbp-0x38], rax
        mov      dword ptr [rsp], r12d
        mov      rdi, rax
        mov      rsi, r15
        mov      rdx, rbx
        mov      rcx, r14
        mov      r8d, dword ptr [rbp-0x2C]
        mov      r9, r13
        mov      r10, 0xD1FFAB1E      ; code for System.Text.EncodingByteBuffer:.ctor(System.Text.EncodingNLS,System.Text.EncoderNLS,ulong,int,ulong,int):this
        call     [r10]System.Text.EncodingByteBuffer:.ctor(System.Text.EncodingNLS,System.Text.EncoderNLS,ulong,int,ulong,int):this
        mov      r13, gword ptr [rbp-0x38]
        jmp      SHORT G_M32130_IG09
 						;; size=61 bbWeight=1 PerfScore 11.75
 G_M32130_IG05:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG06
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG07
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG07
 						;; size=27 bbWeight=32 PerfScore 424.00
 G_M32130_IG06:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=32 PerfScore 288.00
 G_M32130_IG07:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        xor      eax, eax
 						;; size=38 bbWeight=32 PerfScore 536.00
 G_M32130_IG08:
        test     eax, eax
        mov      dword ptr [rbp-0x30], r12d
        je       G_M32130_IG23
 						;; size=12 bbWeight=64 PerfScore 144.00
 G_M32130_IG09:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.EncoderFallbackBuffer:get_Remaining():int:this
        test     eax, eax
        jg       SHORT G_M32130_IG11
 						;; size=17 bbWeight=512 PerfScore 5248.00
 G_M32130_IG10:
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x48]
        jae      G_M32130_IG23
 						;; size=14 bbWeight=128 PerfScore 768.00
 G_M32130_IG11:
        lea      r12, bword ptr [r13+0x58]
        mov      rdi, gword ptr [r12+0x08]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x30]System.Text.EncoderFallbackBuffer:GetNextChar():ushort:this
        mov      esi, eax
        test     esi, esi
        setne    dil
        mov      byte  ptr [r12+0x26], dil
        test     esi, esi
        jne      SHORT G_M32130_IG12
        xor      edi, edi
        mov      dword ptr [r12+0x20], edi
 						;; size=43 bbWeight=2 PerfScore 29.00
 G_M32130_IG12:
        test     esi, esi
        jne      SHORT G_M32130_IG13
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x48]
        jae      SHORT G_M32130_IG13
        lea      rsi, [rdi+0x02]
        mov      qword ptr [r13+0x38], rsi
        movzx    rsi, word  ptr [rdi]
 						;; size=25 bbWeight=2 PerfScore 21.50
 G_M32130_IG13:
        mov      r12d, dword ptr [rbp-0x30]
        test     r12d, r12d
        jne      G_M32130_IG53
 						;; size=13 bbWeight=2 PerfScore 4.50
 G_M32130_IG14:
        cmp      esi, 127
        jle      G_M32130_IG48
        lea      edi, [rsi-0xD800]
        cmp      edi, 0x3FF
        jbe      G_M32130_IG47
        lea      edi, [rsi-0xDC00]
        cmp      edi, 0x3FF
        jbe      G_M32130_IG46
        mov      rdi, qword ptr [r15+0x70]
        mov      eax, esi
-       movzx    rcx, word  ptr [rdi+2*rax]
+       movzx    rax, word  ptr [rdi+2*rax]
        mov      edi, esi
        shr      edi, 3
        movsxd   rdi, edi
-       mov      rax, qword ptr [r15+0x90]
-       movzx    rdi, byte  ptr [rdi+rax]
+       mov      rcx, qword ptr [r15+0x90]
+       movzx    rdi, byte  ptr [rdi+rcx]
        test     edi, edi
        je       SHORT G_M32130_IG15
        and      esi, 7
        bt       edi, esi
        jb       G_M32130_IG28
 						;; size=91 bbWeight=8 PerfScore 136.00
 G_M32130_IG15:
        mov      rdi, qword ptr [r13+0x20]
        test     rdi, rdi
        je       SHORT G_M32130_IG17
-       mov      rax, qword ptr [r13+0x30]
-       dec      rax
-       cmp      rdi, rax
+       mov      rcx, qword ptr [r13+0x30]
+       dec      rcx
+       cmp      rdi, rcx
        jae      SHORT G_M32130_IG20
 						;; size=21 bbWeight=64 PerfScore 432.00
 G_M32130_IG16:
-       lea      rax, [rdi+0x01]
-       mov      qword ptr [r13+0x20], rax
-       mov      eax, ecx
-       sar      eax, 8
-       mov      byte  ptr [rdi], al
+       lea      rcx, [rdi+0x01]
+       mov      qword ptr [r13+0x20], rcx
+       mov      ecx, eax
+       sar      ecx, 8
+       mov      byte  ptr [rdi], cl
 						;; size=15 bbWeight=32 PerfScore 104.00
 G_M32130_IG17:
        inc      dword ptr [r13+0x50]
        mov      rdi, qword ptr [r13+0x20]
        test     rdi, rdi
        je       SHORT G_M32130_IG19
 						;; size=13 bbWeight=64 PerfScore 400.00
 G_M32130_IG18:
        cmp      rdi, qword ptr [r13+0x30]
        jae      G_M32130_IG05
-       lea      rax, [rdi+0x01]
-       mov      qword ptr [r13+0x20], rax
-       mov      byte  ptr [rdi], cl
+       lea      rcx, [rdi+0x01]
+       mov      qword ptr [r13+0x20], rcx
+       mov      byte  ptr [rdi], al
 						;; size=20 bbWeight=32 PerfScore 208.00
 G_M32130_IG19:
        inc      dword ptr [r13+0x50]
        mov      eax, 1
        jmp      G_M32130_IG08
 						;; size=14 bbWeight=32 PerfScore 168.00
 G_M32130_IG20:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG27
 						;; size=7 bbWeight=64 PerfScore 256.00
 G_M32130_IG21:
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG22
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
 						;; size=18 bbWeight=32 PerfScore 232.00
 G_M32130_IG22:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        mov      dword ptr [rbp-0x30], r12d
 						;; size=40 bbWeight=64 PerfScore 1120.00
 G_M32130_IG23:
        test     rbx, rbx
        je       SHORT G_M32130_IG25
 						;; size=5 bbWeight=128 PerfScore 160.00
 G_M32130_IG24:
        cmp      byte  ptr [rbx+0x36], 0
        je       G_M32130_IG79
 						;; size=10 bbWeight=2 PerfScore 8.00
 G_M32130_IG25:
        mov      r12d, dword ptr [rbp-0x30]
        test     r12d, r12d
        jle      G_M32130_IG78
        lea      rdi, bword ptr [r13+0x58]
        lea      rdx, bword ptr [r13+0x38]
        mov      esi, r12d
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
        call     [rax]System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
 						;; size=36 bbWeight=4 PerfScore 27.00
 G_M32130_IG26:
        xor      r12d, r12d
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG09
 						;; size=12 bbWeight=8 PerfScore 26.00
 G_M32130_IG27:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        jmp      SHORT G_M32130_IG22
 						;; size=16 bbWeight=32 PerfScore 352.00
 G_M32130_IG28:
-       mov      eax, 0xD1FFAB1E
-       mov      edx, ecx
-       imul     rax, rdx
-       shr      rax, 35
-       imul     eax, eax, 10
-       mov      edx, ecx
-       sub      edx, eax
+       imul     edx, eax, 0xD1FFAB1E
+       imul     rdx, rdx, 10
+       shr      rdx, 32
        add      edx, 48
        movzx    rdi, dl
-       mov      eax, 0xD1FFAB1E
-       mov      ecx, ecx
-       imul     rax, rcx
-       shr      rax, 35
-       movzx    rcx, ax
-       mov      rdx, 0xD1FFAB1E
-       mov      eax, ecx
-       mul      rdx:rax, rdx
-       imul     eax, edx, 126
-       mov      edx, ecx
-       sub      edx, eax
-       add      edx, 129
-       movzx    rsi, dl
-       mov      rdx, 0xD1FFAB1E
-       mov      eax, ecx
-       mul      rdx:rax, rdx
-       movzx    rcx, dx
-       mov      eax, 0xD1FFAB1E
-       mov      edx, ecx
+       mov      edx, 0xD1FFAB1E
+       mov      eax, eax
        imul     rax, rdx
        shr      rax, 35
-       imul     eax, eax, 10
-       mov      edx, ecx
-       sub      edx, eax
+       movzx    rax, ax
+       imul     edx, eax, 0xD1FFAB1E
+       imul     rdx, rdx, 126
+       shr      rdx, 32
+       add      edx, 129
+       movzx    rcx, dl
+       mov      rdx, 0xD1FFAB1E
+       mul      rdx:rax, rdx
+       movzx    rax, dx
+       imul     edx, eax, 0xD1FFAB1E
+       imul     rdx, rdx, 10
+       shr      rdx, 32
        add      edx, 48
-       movzx    rax, dl
-       mov      edx, 0xD1FFAB1E
-       imul     rcx, rdx
-       shr      rcx, 35
-       movzx    rcx, cx
-       mov      rdx, qword ptr [r13+0x20]
-       test     rdx, rdx
+       movzx    rdx, dl
+       mov      esi, 0xD1FFAB1E
+       imul     rax, rsi
+       shr      rax, 35
+       movzx    rax, ax
+       mov      rsi, qword ptr [r13+0x20]
+       test     rsi, rsi
        je       SHORT G_M32130_IG29
        mov      r8, qword ptr [r13+0x30]
        add      r8, -3
-       cmp      rdx, r8
+       cmp      rsi, r8
        jae      G_M32130_IG43
-       lea      r8, [rdx+0x01]
+       lea      r8, [rsi+0x01]
        mov      qword ptr [r13+0x20], r8
-       add      ecx, 129
-       mov      byte  ptr [rdx], cl
-						;; size=183 bbWeight=8 PerfScore 304.00
+       add      eax, 129
+       mov      byte  ptr [rsi], al
+						;; size=155 bbWeight=8 PerfScore 274.00
 G_M32130_IG29:
        inc      dword ptr [r13+0x50]
-       mov      rcx, qword ptr [r13+0x20]
-       test     rcx, rcx
+       mov      rax, qword ptr [r13+0x20]
+       test     rax, rax
        je       SHORT G_M32130_IG30
-       mov      rdx, qword ptr [r13+0x30]
-       add      rdx, -2
-       cmp      rcx, rdx
+       mov      rsi, qword ptr [r13+0x30]
+       add      rsi, -2
+       cmp      rax, rsi
        jae      G_M32130_IG40
-       lea      rdx, [rcx+0x01]
-       mov      qword ptr [r13+0x20], rdx
-       mov      byte  ptr [rcx], al
+       lea      rsi, [rax+0x01]
+       mov      qword ptr [r13+0x20], rsi
+       mov      byte  ptr [rax], dl
 						;; size=40 bbWeight=8 PerfScore 98.00
 G_M32130_IG30:
        inc      dword ptr [r13+0x50]
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG31
-       mov      rcx, qword ptr [r13+0x30]
-       dec      rcx
-       cmp      rax, rcx
+       mov      rdx, qword ptr [r13+0x30]
+       dec      rdx
+       cmp      rax, rdx
        jae      G_M32130_IG37
-       lea      rcx, [rax+0x01]
-       mov      qword ptr [r13+0x20], rcx
-       mov      byte  ptr [rax], sil
-						;; size=40 bbWeight=8 PerfScore 98.00
+       lea      rdx, [rax+0x01]
+       mov      qword ptr [r13+0x20], rdx
+       mov      byte  ptr [rax], cl
+						;; size=39 bbWeight=8 PerfScore 98.00
 G_M32130_IG31:
        inc      dword ptr [r13+0x50]
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG32
        cmp      rax, qword ptr [r13+0x30]
        jae      SHORT G_M32130_IG33
        lea      rcx, [rax+0x01]
        mov      qword ptr [r13+0x20], rcx
        mov      byte  ptr [rax], dil
 						;; size=30 bbWeight=8 PerfScore 102.00
 G_M32130_IG32:
        inc      dword ptr [r13+0x50]
        mov      eax, 1
        jmp      SHORT G_M32130_IG36
 						;; size=11 bbWeight=8 PerfScore 42.00
 G_M32130_IG33:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG34
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG35
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG35
 						;; size=27 bbWeight=8 PerfScore 106.00
 G_M32130_IG34:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M32130_IG35:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        xor      eax, eax
 						;; size=38 bbWeight=8 PerfScore 134.00
 G_M32130_IG36:
        test     eax, eax
        mov      dword ptr [rbp-0x30], r12d
        jne      G_M32130_IG09
        jmp      G_M32130_IG23
 						;; size=17 bbWeight=8 PerfScore 34.00
 G_M32130_IG37:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG38
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG39
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG39
 						;; size=27 bbWeight=8 PerfScore 106.00
 G_M32130_IG38:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M32130_IG39:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=45 bbWeight=8 PerfScore 156.00
 G_M32130_IG40:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG41
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG42
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG42
 						;; size=27 bbWeight=8 PerfScore 106.00
 G_M32130_IG41:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M32130_IG42:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=45 bbWeight=8 PerfScore 156.00
 G_M32130_IG43:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG44
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG45
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG45
 						;; size=27 bbWeight=8 PerfScore 106.00
 G_M32130_IG44:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M32130_IG45:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=45 bbWeight=8 PerfScore 156.00
 G_M32130_IG46:
        lea      rdi, bword ptr [r13+0x58]
        lea      rdx, bword ptr [r13+0x38]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
        call     [rax]System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
        test     eax, eax
        mov      dword ptr [rbp-0x30], r12d
        jne      G_M32130_IG09
        jmp      G_M32130_IG23
 						;; size=37 bbWeight=8 PerfScore 68.00
 G_M32130_IG47:
        mov      r12d, esi
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG09
 						;; size=12 bbWeight=8 PerfScore 26.00
 G_M32130_IG48:
-       mov      rdx, qword ptr [r13+0x20]
-       test     rdx, rdx
+       mov      rdi, qword ptr [r13+0x20]
+       test     rdi, rdi
        je       SHORT G_M32130_IG49
-       cmp      rdx, qword ptr [r13+0x30]
+       cmp      rdi, qword ptr [r13+0x30]
        jae      SHORT G_M32130_IG50
-       mov      rdi, rdx
        lea      rax, [rdi+0x01]
        mov      qword ptr [r13+0x20], rax
        mov      byte  ptr [rdi], sil
-						;; size=29 bbWeight=8 PerfScore 80.00
+						;; size=26 bbWeight=8 PerfScore 78.00
 G_M32130_IG49:
        inc      dword ptr [r13+0x50]
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG09
 						;; size=13 bbWeight=8 PerfScore 48.00
 G_M32130_IG50:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG51
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG52
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG52
 						;; size=27 bbWeight=8 PerfScore 106.00
 G_M32130_IG51:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M32130_IG52:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=45 bbWeight=8 PerfScore 156.00
 G_M32130_IG53:
        lea      eax, [rsi-0xDC00]
        cmp      eax, 0x3FF
        ja       G_M32130_IG75
        add      r12d, -0xD800
        shl      r12d, 10
        lea      edi, [r12+rsi-0xDC00]
        mov      edx, 0xD1FFAB1E
        mov      eax, edx
        imul     edx:eax, edi
        mov      eax, edx
        shr      eax, 31
        sar      edx, 2
        add      eax, edx
        lea      edx, [rax+4*rax]
        add      edx, edx
        sub      edi, edx
        add      edi, 48
        movzx    rdi, dil
        mov      ecx, eax
        mov      edx, 0xD1FFAB1E
        mov      eax, edx
        imul     edx:eax, ecx
        add      edx, ecx
        mov      eax, edx
        shr      eax, 31
        sar      edx, 6
        add      eax, edx
        imul     edx, eax, 126
        sub      ecx, edx
        add      ecx, 129
        movzx    rcx, cl
        mov      esi, eax
        mov      edx, 0xD1FFAB1E
        mov      eax, edx
        imul     edx:eax, esi
        mov      eax, edx
        shr      eax, 31
        sar      edx, 2
        add      eax, edx
        lea      edx, [rax+4*rax]
        add      edx, edx
        sub      esi, edx
        add      esi, 48
        movzx    rdx, sil
        mov      esi, eax
        xor      r12d, r12d
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG54
        mov      r8, qword ptr [r13+0x30]
        add      r8, -3
        cmp      rax, r8
        jae      G_M32130_IG68
        lea      r8, [rax+0x01]
        mov      qword ptr [r13+0x20], r8
        add      esi, 144
        mov      byte  ptr [rax], sil
 						;; size=189 bbWeight=2 PerfScore 70.00
 G_M32130_IG54:
        inc      dword ptr [r13+0x50]
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG55
        mov      rsi, qword ptr [r13+0x30]
        add      rsi, -2
        cmp      rax, rsi
        jae      G_M32130_IG65
        lea      rsi, [rax+0x01]
        mov      qword ptr [r13+0x20], rsi
        mov      byte  ptr [rax], dl
 						;; size=40 bbWeight=2 PerfScore 24.50
 G_M32130_IG55:
        inc      dword ptr [r13+0x50]
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG56
        mov      rdx, qword ptr [r13+0x30]
        dec      rdx
        cmp      rax, rdx
        jae      G_M32130_IG62
        lea      rdx, [rax+0x01]
        mov      qword ptr [r13+0x20], rdx
        mov      byte  ptr [rax], cl
 						;; size=39 bbWeight=2 PerfScore 24.50
 G_M32130_IG56:
        inc      dword ptr [r13+0x50]
        mov      rax, qword ptr [r13+0x20]
        test     rax, rax
        je       SHORT G_M32130_IG57
        cmp      rax, qword ptr [r13+0x30]
        jae      SHORT G_M32130_IG58
        lea      rcx, [rax+0x01]
        mov      qword ptr [r13+0x20], rcx
        mov      byte  ptr [rax], dil
 						;; size=30 bbWeight=2 PerfScore 25.50
 G_M32130_IG57:
        inc      dword ptr [r13+0x50]
        mov      eax, 1
        jmp      SHORT G_M32130_IG61
 						;; size=11 bbWeight=2 PerfScore 10.50
 G_M32130_IG58:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG59
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG60
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG60
 						;; size=27 bbWeight=2 PerfScore 26.50
 G_M32130_IG59:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M32130_IG60:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        xor      eax, eax
 						;; size=38 bbWeight=2 PerfScore 33.50
 G_M32130_IG61:
        test     eax, eax
        jne      G_M32130_IG26
        jmp      G_M32130_IG71
 						;; size=13 bbWeight=2 PerfScore 6.50
 G_M32130_IG62:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG63
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG64
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG64
 						;; size=27 bbWeight=2 PerfScore 26.50
 G_M32130_IG63:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M32130_IG64:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        jmp      G_M32130_IG71
 						;; size=41 bbWeight=2 PerfScore 37.00
 G_M32130_IG65:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG66
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG67
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG67
 						;; size=27 bbWeight=2 PerfScore 26.50
 G_M32130_IG66:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M32130_IG67:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        jmp      SHORT G_M32130_IG71
 						;; size=38 bbWeight=2 PerfScore 37.00
 G_M32130_IG68:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG69
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG70
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG70
 						;; size=27 bbWeight=2 PerfScore 26.50
 G_M32130_IG69:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M32130_IG70:
        mov      rdx, qword ptr [r13+0x20]
        cmp      rdx, qword ptr [r13+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [r13+0x10]
        mov      rdi, gword ptr [r13+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.EncodingNLS:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
 						;; size=36 bbWeight=2 PerfScore 33.00
 G_M32130_IG71:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG74
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        ja       SHORT G_M32130_IG73
 						;; size=17 bbWeight=2 PerfScore 20.00
 G_M32130_IG72:
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=9 bbWeight=1 PerfScore 3.00
 G_M32130_IG73:
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=17 bbWeight=2 PerfScore 8.50
 G_M32130_IG74:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=23 bbWeight=2 PerfScore 24.00
 G_M32130_IG75:
        cmp      byte  ptr [r13+0x7E], 0
        jne      SHORT G_M32130_IG76
        mov      rdi, qword ptr [r13+0x38]
        cmp      rdi, qword ptr [r13+0x40]
        jbe      SHORT G_M32130_IG77
        add      rdi, -2
        mov      qword ptr [r13+0x38], rdi
        jmp      SHORT G_M32130_IG77
 						;; size=27 bbWeight=2 PerfScore 26.50
 G_M32130_IG76:
        mov      rdi, gword ptr [r13+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M32130_IG77:
        lea      rdi, bword ptr [r13+0x58]
        lea      rdx, bword ptr [r13+0x38]
        mov      esi, r12d
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
        call     [rax]System.Text.EncoderFallbackBufferHelper:InternalFallback(ushort,byref):ubyte:this
        test     eax, eax
        jne      G_M32130_IG26
        xor      r12d, r12d
        mov      dword ptr [rbp-0x30], r12d
        jmp      G_M32130_IG23
 						;; size=43 bbWeight=2 PerfScore 18.00
 G_M32130_IG78:
        test     rbx, rbx
        mov      dword ptr [rbp-0x30], r12d
        je       SHORT G_M32130_IG81
 						;; size=9 bbWeight=1 PerfScore 2.25
 G_M32130_IG79:
        test     r14, r14
        je       SHORT G_M32130_IG80
        mov      r12d, dword ptr [rbp-0x30]
        mov      word  ptr [rbx+0x34], r12w
 						;; size=14 bbWeight=0.50 PerfScore 1.62
 G_M32130_IG80:
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncodingByteBuffer:get_CharsUsed():int:this
        call     [rax]System.Text.EncodingByteBuffer:get_CharsUsed():int:this
        mov      dword ptr [rbx+0x30], eax
 						;; size=18 bbWeight=0.50 PerfScore 2.25
 G_M32130_IG81:
        mov      eax, dword ptr [r13+0x50]
 						;; size=4 bbWeight=1 PerfScore 2.00
 G_M32130_IG82:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 2321, prolog size 19, PerfScore 14275.12, instruction count 639, allocated bytes for code 2321 (MethodHash=d6c5827d) for method System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
+; Total bytes of code 2289, prolog size 19, PerfScore 14243.12, instruction count 626, allocated bytes for code 2289 (MethodHash=d6c5827d) for method System.Text.GB18030Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
 ; ============================================================
-4 (-0.80 % of base) - System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this
 ; Assembly listing for method System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T10] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Diagnostics.Tracing.EventSource>
-;  V01 arg1         [V01,T11] (  3,  3   )     ref  ->  rsi         class-hnd single-def <ubyte[]>
-;  V02 loc0         [V02,T14] (  3,  1.50)    long  ->  r14        
+;  V00 this         [V00,T09] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Diagnostics.Tracing.EventSource>
+;  V01 arg1         [V01,T10] (  3,  3   )     ref  ->  rsi         class-hnd single-def <ubyte[]>
+;  V02 loc0         [V02,T13] (  3,  1.50)    long  ->  r14        
 ;  V03 loc1         [V03    ] (  2,  1   )     ref  ->  [rbp-0x50]  must-init pinned class-hnd ptr <ubyte[]>
 ;  V04 loc2         [V04    ] (  2, 16.50)  struct (16) [rbp-0x60]  do-not-enreg[XS] addr-exposed ld-addr-op <System.Diagnostics.Tracing.EventDescriptor>
 ;  V05 loc3         [V05    ] ( 12, 59.50)  struct ( 8) [rbp-0x68]  do-not-enreg[XSF] addr-exposed ld-addr-op ptr <System.Diagnostics.Tracing.ManifestEnvelope>
 ;  V06 loc4         [V06,T00] (  8, 96.50)     int  ->  r15        
 ;* V07 loc5         [V07    ] (  0,  0   )    long  ->  zero-ref    ptr
-;  V08 loc6         [V08,T03] ( 10, 92.50)     int  ->  r14        
+;  V08 loc6         [V08,T02] ( 10, 92.50)     int  ->  r14        
 ;  V09 OutArgs      [V09    ] (  1,  1   )  struct (16) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V10 tmp1         [V10    ] (  9, 82.50)  struct (32) [rbp-0x48]  do-not-enreg[XSF] addr-exposed ld-addr-op ptr unsafe-buffer "stackallocLocal"
 ;* V11 tmp2         [V11    ] (  0,  0   )    long  ->  zero-ref    "dup spill"
-;  V12 tmp3         [V12,T05] (  3, 48   )     int  ->  rdi         "Inline return value spill temp"
+;  V12 tmp3         [V12,T04] (  3, 48   )     int  ->  rdi         "Inline return value spill temp"
 ;* V13 tmp4         [V13    ] (  0,  0   )   ubyte  ->  zero-ref    "Inline return value spill temp"
 ;* V14 tmp5         [V14    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Diagnostics.Tracing.EventSource+OverrideEventProvider>
-;  V15 tmp6         [V15,T06] (  3, 36   )     int  ->  r13         "Inline stloc first use temp"
-;  V16 tmp7         [V16,T13] (  2,  2   )    long  ->  r14         "Cast away GC"
+;  V15 tmp6         [V15,T05] (  3, 36   )     int  ->  r13         "Inline stloc first use temp"
+;  V16 tmp7         [V16,T12] (  2,  2   )    long  ->  r14         "Cast away GC"
 ;  V17 tmp8         [V17,T01] (  3, 96   )     ref  ->  rdi         "argument with side effect"
 ;  V18 GsCookie     [V18    ] (  1,  1   )    long  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "GSSecurityCookie"
-;  V19 tmp10        [V19,T04] (  5, 50   )     ref  ->  rbx         single-def "shadowVar"
-;  V20 tmp11        [V20,T12] (  5,  3.50)     ref  ->  rsi         single-def "shadowVar"
-;  V21 cse0         [V21,T09] (  3, 12   )    long  ->  rax         "CSE #02: aggressive"
-;  V22 cse1         [V22,T15] (  3,  1.50)     int  ->  r15         "CSE #01: moderate"
-;  V23 rat0         [V23,T07] (  2, 16   )    long  ->  rax         "TLS field access"
-;  V24 rat1         [V24,T08] (  2, 16   )    long  ->  rax         "TLS access"
-;  V25 rat2         [V25,T02] (  3, 96   )     int  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
+;  V19 tmp10        [V19,T03] (  5, 50   )     ref  ->  rbx         single-def "shadowVar"
+;  V20 tmp11        [V20,T11] (  5,  3.50)     ref  ->  rsi         single-def "shadowVar"
+;  V21 cse0         [V21,T08] (  3, 12   )    long  ->  rax         "CSE #02: aggressive"
+;  V22 cse1         [V22,T14] (  3,  1.50)     int  ->  r15         "CSE #01: moderate"
+;  V23 rat0         [V23,T06] (  2, 16   )    long  ->  rax         "TLS field access"
+;  V24 rat1         [V24,T07] (  2, 16   )    long  ->  rax         "TLS access"
 ;
 ; Lcl frame size = 96
 
 G_M11069_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        sub      rsp, 96
        lea      rbp, [rsp+0x80]
        xor      eax, eax
        mov      qword ptr [rbp-0x50], rax
        mov      qword ptr [rbp-0x28], 0xD1FFAB1E
 						;; size=34 bbWeight=1 PerfScore 8.00
 G_M11069_IG02:
        mov      rbx, rdi
        test     rsi, rsi
        je       G_M11069_IG18
 						;; size=12 bbWeight=1 PerfScore 1.50
 G_M11069_IG03:
        mov      gword ptr [rbp-0x50], rsi
        mov      r15d, dword ptr [rsi+0x08]
        test     r15d, r15d
        je       SHORT G_M11069_IG04
        add      rsi, 16
        mov      r14, rsi
        jmp      SHORT G_M11069_IG05
 						;; size=22 bbWeight=0.50 PerfScore 3.38
 G_M11069_IG04:
        xor      r14d, r14d
 						;; size=3 bbWeight=0.50 PerfScore 0.12
 G_M11069_IG05:
        mov      dword ptr [rsp], 0xFFFE
        mov      rdi, 0xD1FFAB1E
        mov      qword ptr [rsp+0x08], rdi
        lea      rdi, [rbp-0x60]
        mov      esi, 0xFFFE
        mov      edx, 1
        xor      ecx, ecx
        xor      r8d, r8d
        mov      r9d, 254
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.EventDescriptor:.ctor(int,ubyte,ubyte,ubyte,ubyte,int,long):this
        call     [rax]System.Diagnostics.Tracing.EventDescriptor:.ctor(int,ubyte,ubyte,ubyte,ubyte,int,long):this
        xor      eax, eax
        mov      qword ptr [rbp-0x68], rax
        mov      byte  ptr [rbp-0x68], 1
        mov      byte  ptr [rbp-0x67], 1
        mov      byte  ptr [rbp-0x66], 0
        mov      byte  ptr [rbp-0x65], 91
        mov      word  ptr [rbp-0x62], 0
        lea      rax, [rbp-0x68]
        mov      qword ptr [rbp-0x48], rax
        mov      dword ptr [rbp-0x40], 8
        xor      eax, eax
        mov      dword ptr [rbp-0x3C], eax
        mov      qword ptr [rbp-0x38], r14
 						;; size=111 bbWeight=0.50 PerfScore 9.12
 G_M11069_IG06:
        mov      dword ptr [rbp-0x2C], eax
        mov      r14d, 0xF700
        jmp      SHORT G_M11069_IG08
 						;; size=11 bbWeight=0.50 PerfScore 1.62
 G_M11069_IG07:
        shr      r14d, 1
 						;; size=3 bbWeight=4 PerfScore 2.00
 G_M11069_IG08:
        lea      eax, [r15+r14-0x01]
        cdq      
        idiv     edx:eax, r14d
        mov      word  ptr [rbp-0x64], ax
        test     r15d, r15d
        jle      G_M11069_IG17
 						;; size=22 bbWeight=4 PerfScore 115.00
 G_M11069_IG09:
        cmp      r15d, r14d
        jg       SHORT G_M11069_IG11
 						;; size=5 bbWeight=32 PerfScore 40.00
 G_M11069_IG10:
        mov      edi, r15d
        jmp      SHORT G_M11069_IG12
 						;; size=5 bbWeight=8 PerfScore 18.00
 G_M11069_IG11:
        mov      edi, r14d
 						;; size=3 bbWeight=8 PerfScore 2.00
 G_M11069_IG12:
        mov      dword ptr [rbp-0x30], edi
        cmp      gword ptr [rbx+0x30], 0
        je       SHORT G_M11069_IG14
 						;; size=10 bbWeight=32 PerfScore 160.00
 G_M11069_IG13:
        mov      rdi, gword ptr [rbx+0x30]
        mov      rdi, gword ptr [rdi+0x08]
        lea      rsi, [rbp-0x48]
        mov      qword ptr [rsp], rsi
        lea      rsi, [rbp-0x60]
        xor      edx, edx
        xor      ecx, ecx
        xor      r8d, r8d
        mov      r9d, 2
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Diagnostics.Tracing.EventProviderImpl:EventWriteTransfer(byref,long,ulong,ulong,int,ulong):int:this
        mov      r13d, eax
        test     r13d, r13d
        jne      SHORT G_M11069_IG21
 						;; size=50 bbWeight=16 PerfScore 248.00
 G_M11069_IG14:
        sub      r15d, r14d
        mov      edi, r14d
        add      rdi, qword ptr [rbp-0x38]
        mov      qword ptr [rbp-0x38], rdi
        movzx    rdi, word  ptr [rbp-0x62]
        inc      edi
        mov      word  ptr [rbp-0x62], di
        movzx    rdi, word  ptr [rbp-0x62]
-       mov      eax, 0xD1FFAB1E
-       mov      ecx, edi
-       imul     rax, rcx
-       shr      rax, 34
-       lea      eax, [rax+4*rax]
-       sub      edi, eax
+       imul     edi, edi, 0xD1FFAB1E
+       lea      rdi, [rdi+4*rdi]
+       shr      rdi, 32
+       test     edi, edi
        jne      SHORT G_M11069_IG16
-						;; size=50 bbWeight=16 PerfScore 184.00
+						;; size=46 bbWeight=16 PerfScore 176.00
 G_M11069_IG15:
        mov      edi, 15
        mov      rax, 0xD1FFAB1E      ; code for System.Threading.Thread:Sleep(int)
        call     [rax]System.Threading.Thread:Sleep(int)
 						;; size=17 bbWeight=8 PerfScore 28.00
 G_M11069_IG16:
        test     r15d, r15d
        jg       G_M11069_IG09
 						;; size=9 bbWeight=16 PerfScore 20.00
 G_M11069_IG17:
        xor      rax, rax
        mov      gword ptr [rbp-0x50], rax
 						;; size=6 bbWeight=0.50 PerfScore 0.62
 G_M11069_IG18:
        cmp      qword ptr [rbp-0x28], 0xD1FFAB1E
        je       SHORT G_M11069_IG19
        call     CORINFO_HELP_FAIL_FAST
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M11069_IG19:
        nop      
 						;; size=1 bbWeight=1 PerfScore 0.25
 G_M11069_IG20:
        add      rsp, 96
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=13 bbWeight=1 PerfScore 3.75
 G_M11069_IG21:
        mov      rdi, 0xD1FFAB1E
        mov      rax, 0xD1FFAB1E      ; function address
        call     rax
        add      rax, 56
        mov      dword ptr [rax+0x10], r13d
        cmp      dword ptr [rax+0x10], 2
        jne      SHORT G_M11069_IG22
        cmp      word  ptr [rbp-0x62], 0
        jne      SHORT G_M11069_IG22
        cmp      r14d, 256
        jg       G_M11069_IG07
 						;; size=56 bbWeight=4 PerfScore 52.00
 G_M11069_IG22:
        test     byte  ptr [rbx+0x94], 1
        je       SHORT G_M11069_IG17
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'SendManifest'
        xor      rdx, rdx
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Tracing.EventSource:ThrowEventSourceException(System.String,System.Exception):this
        call     [rax]System.Diagnostics.Tracing.EventSource:ThrowEventSourceException(System.String,System.Exception):this
        jmp      G_M11069_IG17
 						;; size=41 bbWeight=0.50 PerfScore 5.00
 
-; Total bytes of code 499, prolog size 34, PerfScore 906.38, instruction count 130, allocated bytes for code 499 (MethodHash=a56ad4c2) for method System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this (FullOpts)
+; Total bytes of code 495, prolog size 34, PerfScore 898.38, instruction count 128, allocated bytes for code 495 (MethodHash=a56ad4c2) for method System.Diagnostics.Tracing.EventSource:SendManifest(ubyte[]):this (FullOpts)
 ; ============================================================

Larger list of diffs: https://gist.github.com/MihuBot/9acdafff8a07039d9c602efce0862d1f

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 17, 2025

@MihaZupan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant