Skip to content

Instantly share code, notes, and snippets.

@MihuBot
Created July 5, 2024 13:51
Show Gist options
  • Save MihuBot/2ae802e98622c2bc62c704d0e47f2383 to your computer and use it in GitHub Desktop.
Save MihuBot/2ae802e98622c2bc62c704d0e47f2383 to your computer and use it in GitHub Desktop.

Top method improvements

-50 (-2.37 % of base) - System.Text.UnicodeEncoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this
 ; Assembly listing for method System.Text.UnicodeEncoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int: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; 11 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T11] ( 13, 17   )     ref  ->  r14         this class-hnd single-def <System.Text.UnicodeEncoding>
 ;  V01 arg1         [V01,T03] ( 38, 47   )    long  ->  rbx        
 ;  V02 arg2         [V02,T47] (  3,  3   )     int  ->  rdx         single-def
-;  V03 arg3         [V03,T05] ( 28, 40.50)    long  ->  [rbp-0x30] 
+;  V03 arg3         [V03,T04] ( 28, 40.50)    long  ->  r15        
 ;  V04 arg4         [V04,T48] (  3,  3   )     int  ->   r8         single-def
 ;  V05 arg5         [V05,T46] (  4,  3   )     ref  ->   r9         class-hnd single-def <System.Text.DecoderNLS>
 ;  V06 loc0         [V06,T08] ( 23, 22.50)     ref  ->  r13         class-hnd exact single-def <System.Text.UnicodeEncoding+Decoder>
-;  V07 loc1         [V07,T12] ( 14, 18.50)     int  ->  [rbp-0x34] 
-;  V08 loc2         [V08,T07] ( 24, 35   )  ushort  ->  [rbp-0x38] 
-;  V09 loc3         [V09,T04] ( 38, 46.50)     ref  ->  [rbp-0x70]  class-hnd <System.Text.DecoderFallbackBuffer>
-;  V10 loc4         [V10    ] ( 15, 21   )    long  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed ld-addr-op
-;  V11 loc5         [V11,T20] (  6, 12   )    long  ->  [rbp-0x48]  spill-single-def
-;  V12 loc6         [V12,T19] (  9, 14   )    long  ->  [rbp-0x50]  spill-single-def
-;  V13 loc7         [V13,T32] (  8,  9.50)    long  ->  [rbp-0x58]  spill-single-def
-;  V14 loc8         [V14,T52] (  5,  3.50)    long  ->  [rbp-0x60]  spill-single-def
+;  V07 loc1         [V07,T12] ( 14, 18.50)     int  ->  [rbp-0x2C] 
+;  V08 loc2         [V08,T07] ( 24, 35   )  ushort  ->  [rbp-0x30] 
+;  V09 loc3         [V09,T05] ( 35, 40.50)     ref  ->  [rbp-0x60]  class-hnd <System.Text.DecoderFallbackBuffer>
+;  V10 loc4         [V10    ] ( 15, 21   )    long  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed ld-addr-op
+;  V11 loc5         [V11,T20] (  6, 12   )    long  ->  [rbp-0x40]  spill-single-def
+;  V12 loc6         [V12,T19] (  9, 14   )    long  ->  [rbp-0x48]  spill-single-def
+;  V13 loc7         [V13,T32] (  8,  9.50)    long  ->  [rbp-0x50]  spill-single-def
+;  V14 loc8         [V14,T52] (  5,  3.50)    long  ->  [rbp-0x58]  spill-single-def
 ;  V15 loc9         [V15,T09] ( 10, 20   )  ushort  ->  r12        
 ;  V16 loc10        [V16,T10] (  3, 20   )    long  ->  rdi        
 ;  V17 loc11        [V17,T00] (  7, 70   )    long  ->  rbx        
 ;  V18 loc12        [V18,T02] (  5, 52   )    long  ->  r15        
 ;  V19 loc13        [V19,T06] (  5, 40   )    long  ->  r10        
-;  V20 loc14        [V20,T37] (  3,  6   )     ref  ->  [rbp-0x78]  class-hnd <ubyte[]>
+;  V20 loc14        [V20,T37] (  3,  6   )     ref  ->  [rbp-0x68]  class-hnd <ubyte[]>
 ;  V21 loc15        [V21,T38] (  3,  6   )     ref  ->  r12         class-hnd <ubyte[]>
-;  V22 loc16        [V22,T39] (  3,  6   )     ref  ->  [rbp-0x80]  class-hnd <ubyte[]>
-;  V23 loc17        [V23,T59] (  3,  1.50)     ref  ->  [rbp-0x88]  class-hnd <ubyte[]>
+;  V22 loc16        [V22,T39] (  3,  6   )     ref  ->  [rbp-0x70]  class-hnd <ubyte[]>
+;  V23 loc17        [V23,T59] (  3,  1.50)     ref  ->  [rbp-0x78]  class-hnd <ubyte[]>
 ;# V24 OutArgs      [V24    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V25 tmp1         [V25,T24] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V26 tmp2         [V26,T25] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V27 tmp3         [V27,T13] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V28 tmp4         [V28,T33] (  2,  8   )     int  ->  rax         "impAppendStmt"
 ;  V29 tmp5         [V29,T40] (  3,  6   )     ref  ->  rdx        
 ;  V30 tmp6         [V30,T14] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V31 tmp7         [V31,T26] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V32 tmp8         [V32,T15] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V33 tmp9         [V33,T34] (  2,  8   )     int  ->  rax         "impAppendStmt"
 ;  V34 tmp10        [V34,T41] (  3,  6   )     ref  ->  rax        
 ;  V35 tmp11        [V35,T16] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V36 tmp12        [V36,T17] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V37 tmp13        [V37,T35] (  2,  8   )     int  ->  rax         "impAppendStmt"
 ;  V38 tmp14        [V38,T42] (  3,  6   )     ref  ->  rdx        
 ;  V39 tmp15        [V39,T18] (  4, 16   )     ref  ->  rax         class-hnd exact "dup spill" <ubyte[]>
 ;  V40 tmp16        [V40,T27] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V41 tmp17        [V41,T28] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;* V42 tmp18        [V42    ] (  0,  0   )    long  ->  zero-ref   
 ;  V43 tmp19        [V43,T51] (  2,  4   )    long  ->  rdi        
 ;  V44 tmp20        [V44,T43] (  3,  6   )    long  ->  rsi        
 ;* V45 tmp21        [V45    ] (  0,  0   )    long  ->  zero-ref   
 ;  V46 tmp22        [V46,T53] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "dup spill" <ubyte[]>
 ;  V47 tmp23        [V47,T57] (  2,  2   )     int  ->  rax         "impAppendStmt"
 ;  V48 tmp24        [V48,T60] (  3,  1.50)     ref  ->  rcx        
 ;  V49 tmp25        [V49,T49] (  4,  4   )     ref  ->  rax         class-hnd exact single-def "dup spill" <ubyte[]>
 ;  V50 tmp26        [V50,T58] (  2,  2   )     int  ->  rax         "impAppendStmt"
 ;  V51 tmp27        [V51,T61] (  3,  1.50)     ref  ->  rdx        
 ;  V52 tmp28        [V52,T50] (  4,  4   )     ref  ->  rax         class-hnd exact single-def "dup spill" <ubyte[]>
 ;  V53 tmp29        [V53,T21] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V54 tmp30        [V54,T22] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V55 tmp31        [V55,T23] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V56 tmp32        [V56,T54] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V57 tmp33        [V57,T55] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V58 cse0         [V58,T44] (  3,  6   )    long  ->  rsi         "CSE #02: conservative"
-;  V59 cse1         [V59,T62] (  3,  1.50)    long  ->  [rbp-0x68]  spill-single-def "CSE #17: conservative"
-;  V60 cse2         [V60,T63] (  3,  1.50)    long  ->  r15         "CSE #19: conservative"
-;  V61 cse3         [V61,T31] (  5, 10   )     int  ->  r11         "CSE #07: moderate"
-;  V62 cse4         [V62,T01] (  5, 64   )    long  ->  rsi         "CSE #04: aggressive"
-;  V63 rat0         [V63,T36] (  4,  7   )     ref  ->  r13         "replacement local"
-;  V64 rat1         [V64,T56] (  3,  2   )    long  ->  rdi         "CSE for expectedClsNode"
-;  V65 rat2         [V65,T29] (  3, 12   )    long  ->  rsi         "ReplaceWithLclVar is creating a new local variable"
-;  V66 rat3         [V66,T30] (  3, 12   )    long  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
-;  V67 rat4         [V67,T45] (  3,  6   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
+;  V59 cse1         [V59,T31] (  5, 10   )     int  ->  r11         "CSE #07: moderate"
+;  V60 cse2         [V60,T01] (  5, 64   )    long  ->  rsi         "CSE #04: aggressive"
+;  V61 rat0         [V61,T36] (  4,  7   )     ref  ->  r13         "replacement local"
+;  V62 rat1         [V62,T56] (  3,  2   )    long  ->  rdi         "CSE for expectedClsNode"
+;  V63 rat2         [V63,T29] (  3, 12   )    long  ->  rsi         "ReplaceWithLclVar is creating a new local variable"
+;  V64 rat3         [V64,T30] (  3, 12   )    long  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
+;  V65 rat4         [V65,T45] (  3,  6   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
-; Lcl frame size = 104
+; Lcl frame size = 88
 
 G_M8858_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
-       sub      rsp, 104
-       lea      rbp, [rsp+0x90]
+       sub      rsp, 88
+       lea      rbp, [rsp+0x80]
        mov      r14, rdi
        mov      rbx, rsi
        mov      r15, rcx
 						;; size=31 bbWeight=1 PerfScore 7.50
 G_M8858_IG02:
        mov      r13, r9
        test     r13, r13
        je       SHORT G_M8858_IG04
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M8858_IG03:
        mov      rdi, 0xD1FFAB1E      ; System.Text.UnicodeEncoding+Decoder
        cmp      qword ptr [r13], rdi
        jne      G_M8858_IG71
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M8858_IG04:
        mov      r12d, -1
        xor      eax, eax
        test     r13, r13
        je       SHORT G_M8858_IG06
 						;; size=13 bbWeight=1 PerfScore 1.75
 G_M8858_IG05:
        mov      r12d, dword ptr [r13+0x30]
        movzx    rax, word  ptr [r13+0x2E]
 						;; size=9 bbWeight=0.50 PerfScore 2.00
 G_M8858_IG06:
        xor      rcx, rcx
-       mov      gword ptr [rbp-0x70], rcx
+       mov      gword ptr [rbp-0x60], rcx
        movsxd   rdx, edx
        add      rdx, rbx
-       mov      qword ptr [rbp-0x48], rdx
+       mov      qword ptr [rbp-0x40], rdx
        movsxd   rdi, r8d
        lea      r8, [r15+2*rdi]
-       mov      qword ptr [rbp-0x50], r8
+       mov      qword ptr [rbp-0x48], r8
        mov      r9, rbx
-       mov      qword ptr [rbp-0x58], r9
-       mov      qword ptr [rbp-0x60], r15
+       mov      qword ptr [rbp-0x50], r9
+       mov      qword ptr [rbp-0x58], r15
        cmp      r9, rdx
        jae      G_M8858_IG26
 						;; size=47 bbWeight=1 PerfScore 8.00
 G_M8858_IG07:
        movzx    rdi, byte  ptr [r14+0x26]
        xor      edi, 1
        je       G_M8858_IG16
 						;; size=14 bbWeight=4 PerfScore 13.00
 G_M8858_IG08:
        test     r15b, 7
        jne      G_M8858_IG16
        cmp      r12d, -1
        jne      G_M8858_IG16
        test     eax, eax
        jne      G_M8858_IG16
        lea      rdi, [rbx-0x07]
        mov      rsi, r8
        sub      rsi, r15
        mov      r11, rsi
        shr      r11, 63
        add      rsi, r11
        sar      rsi, 1
        mov      r11, rdx
        sub      r11, rbx
        sar      r11, 1
        cmp      rsi, r11
        jg       SHORT G_M8858_IG09
        add      rsi, rsi
        jmp      SHORT G_M8858_IG10
        align    [0 bytes for IG11]
 						;; size=70 bbWeight=2 PerfScore 21.50
 G_M8858_IG09:
        mov      rsi, rdx
        sub      rsi, rbx
 						;; size=6 bbWeight=2 PerfScore 1.00
 G_M8858_IG10:
        add      rdi, rsi
        cmp      rbx, rdi
        jae      G_M8858_IG15
 						;; size=12 bbWeight=2 PerfScore 3.00
 G_M8858_IG11:
        mov      rsi, qword ptr [rbx]
        mov      r11, 0xD1FFAB1E
        test     rsi, r11
        je       SHORT G_M8858_IG14
 						;; size=18 bbWeight=16 PerfScore 56.00
 G_M8858_IG12:
        mov      r11, 0xD1FFAB1E
        and      r11, rsi
        mov      r10, 0xD1FFAB1E
        xor      r10, r11
        mov      r11, 0xD1FFAB1E
        test     r10, r11
        je       SHORT G_M8858_IG13
        mov      r11, 0xD1FFAB1E
        test     r10, r11
        je       SHORT G_M8858_IG13
        test     r10d, -0x10000
        je       SHORT G_M8858_IG13
        movzx    r10, r10w
        test     r10d, r10d
        jne      SHORT G_M8858_IG14
 						;; size=74 bbWeight=8 PerfScore 54.00
 G_M8858_IG13:
        mov      r10, 0xD1FFAB1E
        and      r10, rsi
        mov      r11, 0xD1FFAB1E
        cmp      r10, r11
        jne      SHORT G_M8858_IG15
 						;; size=28 bbWeight=8 PerfScore 16.00
 G_M8858_IG14:
        mov      qword ptr [r15], rsi
        add      rbx, 8
        add      r15, 8
        cmp      rbx, rdi
        jb       G_M8858_IG11
 						;; size=20 bbWeight=16 PerfScore 44.00
 G_M8858_IG15:
        cmp      rbx, rdx
-       mov      rdx, qword ptr [rbp-0x48]
-       mov      r8, qword ptr [rbp-0x50]
+       mov      rdx, qword ptr [rbp-0x40]
+       mov      r8, qword ptr [rbp-0x48]
        jae      G_M8858_IG26
 						;; size=17 bbWeight=2 PerfScore 6.50
 G_M8858_IG16:
        test     r12d, r12d
        jge      SHORT G_M8858_IG18
 						;; size=5 bbWeight=4 PerfScore 5.00
 G_M8858_IG17:
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        movzx    r12, byte  ptr [rdi]
        jmp      G_M8858_IG25
 						;; size=16 bbWeight=2 PerfScore 9.50
 G_M8858_IG18:
        movzx    r11, byte  ptr [r14+0x26]
        test     r11d, r11d
        je       SHORT G_M8858_IG19
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        shl      r12d, 8
        movzx    rdi, byte  ptr [rdi]
        or       edi, r12d
        movzx    r12, di
        jmp      SHORT G_M8858_IG20
 						;; size=34 bbWeight=2 PerfScore 18.00
 G_M8858_IG19:
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        movzx    rdi, byte  ptr [rdi]
        shl      edi, 8
        or       edi, r12d
        movzx    r12, di
 						;; size=21 bbWeight=2 PerfScore 7.50
 G_M8858_IG20:
-       mov      dword ptr [rbp-0x34], -1
+       mov      dword ptr [rbp-0x2C], -1
        mov      edi, r12d
        sub      edi, 0xD800
        cmp      edi, 0x7FF
        ja       G_M8858_IG45
        cmp      r12d, 0xDBFF
        jg       SHORT G_M8858_IG21
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        test     eax, eax
        jle      G_M8858_IG44
        test     r11d, r11d
        je       G_M8858_IG37
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x10], dil
        mov      byte  ptr [rax+0x11], cl
        jmp      G_M8858_IG38
 						;; size=97 bbWeight=2 PerfScore 29.50
 G_M8858_IG21:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        test     eax, eax
        jne      SHORT G_M8858_IG22
        test     r11d, r11d
        je       G_M8858_IG31
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
        mov      edi, r12d
        sar      edi, 8
        mov      byte  ptr [rax+0x10], dil
        mov      byte  ptr [rax+0x11], r12b
        mov      r12, rax
        jmp      G_M8858_IG32
 						;; size=58 bbWeight=2 PerfScore 20.00
 G_M8858_IG22:
        mov      rdi, r8
        sub      rdi, r15
        mov      r11, rdi
        shr      r11, 63
        add      rdi, r11
        sar      rdi, 1
        cmp      rdi, 2
        jl       G_M8858_IG53
        mov      rdi, r15
        lea      r15, [rdi+0x02]
-       mov      eax, dword ptr [rbp-0x38]
+       mov      eax, dword ptr [rbp-0x30]
        mov      word  ptr [rdi], ax
 						;; size=42 bbWeight=2 PerfScore 12.00
 G_M8858_IG23:
        xor      eax, eax
 						;; size=2 bbWeight=2 PerfScore 0.50
 G_M8858_IG24:
        cmp      r15, r8
        jae      SHORT G_M8858_IG30
        mov      rdi, r15
        lea      r15, [rdi+0x02]
        mov      word  ptr [rdi], r12w
-       mov      r8, qword ptr [rbp-0x50]
-       mov      r12d, dword ptr [rbp-0x34]
+       mov      r8, qword ptr [rbp-0x48]
+       mov      r12d, dword ptr [rbp-0x2C]
 						;; size=24 bbWeight=2 PerfScore 10.00
 G_M8858_IG25:
        cmp      rbx, rdx
        jb       G_M8858_IG07
 						;; size=9 bbWeight=4 PerfScore 5.00
 G_M8858_IG26:
        test     r13, r13
        je       SHORT G_M8858_IG28
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M8858_IG27:
        cmp      byte  ptr [r13+0x2C], 0
        je       SHORT G_M8858_IG29
 						;; size=7 bbWeight=0.50 PerfScore 2.00
 G_M8858_IG28:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        test     eax, eax
        jle      G_M8858_IG61
        cmp      byte  ptr [r14+0x26], 0
        je       G_M8858_IG55
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x10], dil
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        mov      byte  ptr [rax+0x11], cl
        jmp      G_M8858_IG56
 						;; size=65 bbWeight=0.50 PerfScore 7.25
 G_M8858_IG29:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        jmp      G_M8858_IG68
 						;; size=8 bbWeight=0.25 PerfScore 0.75
 G_M8858_IG30:
-       mov      dword ptr [rbp-0x38], eax
-       mov      r8, qword ptr [rbp-0x50]
+       mov      dword ptr [rbp-0x30], eax
+       mov      r8, qword ptr [rbp-0x48]
        jmp      G_M8858_IG53
 						;; size=12 bbWeight=1 PerfScore 4.00
 G_M8858_IG31:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
        mov      byte  ptr [rax+0x10], r12b
        sar      r12d, 8
        mov      byte  ptr [rax+0x11], r12b
        mov      r12, rax
 						;; size=35 bbWeight=2 PerfScore 8.50
 G_M8858_IG32:
-       mov      rax, gword ptr [rbp-0x70]
+       mov      rax, gword ptr [rbp-0x60]
        test     rax, rax
        jne      SHORT G_M8858_IG35
        test     r13, r13
        je       SHORT G_M8858_IG33
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [rax]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        jmp      SHORT G_M8858_IG34
 						;; size=31 bbWeight=2 PerfScore 18.00
 G_M8858_IG33:
        mov      rdi, gword ptr [r14+0x18]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M8858_IG34:
-       mov      r8, qword ptr [rbp-0x58]
+       mov      r8, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], r8
-       mov      r9, qword ptr [rbp-0x50]
+       mov      r9, qword ptr [rbp-0x48]
        mov      qword ptr [rax+0x20], r9
 						;; size=16 bbWeight=2 PerfScore 8.00
 G_M8858_IG35:
-       mov      qword ptr [rbp-0x40], r15
-       lea      rcx, [rbp-0x40]
+       mov      qword ptr [rbp-0x38], r15
+       lea      rcx, [rbp-0x38]
+       mov      gword ptr [rbp-0x60], rax
        mov      rdi, rax
        mov      rsi, r12
        mov      rdx, rbx
-       mov      gword ptr [rbp-0x70], rax
-       mov      r10, qword ptr [rax]
-       mov      r10, qword ptr [r10+0x48]
-       call     [r10+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
-       mov      r15, qword ptr [rbp-0x40]
+       mov      r10, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [r10]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      r15, qword ptr [rbp-0x38]
        test     eax, eax
-       mov      rdx, qword ptr [rbp-0x48]
+       mov      rdx, qword ptr [rbp-0x40]
        je       G_M8858_IG52
-						;; size=48 bbWeight=2 PerfScore 27.00
+						;; size=52 bbWeight=2 PerfScore 25.50
 G_M8858_IG36:
-       mov      eax, dword ptr [rbp-0x38]
-       mov      r8, qword ptr [rbp-0x50]
-       mov      r12d, dword ptr [rbp-0x34]
+       mov      eax, dword ptr [rbp-0x30]
+       mov      r8, qword ptr [rbp-0x48]
+       mov      r12d, dword ptr [rbp-0x2C]
        jmp      G_M8858_IG25
 						;; size=16 bbWeight=1 PerfScore 5.00
 G_M8858_IG37:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      byte  ptr [rax+0x10], cl
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x11], dil
-       mov      gword ptr [rbp-0x78], rax
-       mov      rax, gword ptr [rbp-0x78]
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      gword ptr [rbp-0x68], rax
+       mov      rax, gword ptr [rbp-0x68]
+       mov      ecx, dword ptr [rbp-0x30]
 						;; size=49 bbWeight=2 PerfScore 18.50
 G_M8858_IG38:
-       mov      rdx, gword ptr [rbp-0x70]
+       mov      rdx, gword ptr [rbp-0x60]
        test     rdx, rdx
        jne      SHORT G_M8858_IG39
        test     r13, r13
        je       SHORT G_M8858_IG40
-       mov      dword ptr [rbp-0x38], ecx
-       mov      gword ptr [rbp-0x78], rax
+       mov      dword ptr [rbp-0x30], ecx
+       mov      gword ptr [rbp-0x68], rax
        mov      rdi, r13
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [rdx]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
        jmp      SHORT G_M8858_IG41
 						;; size=41 bbWeight=2 PerfScore 22.50
 G_M8858_IG39:
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        jmp      SHORT G_M8858_IG42
 						;; size=5 bbWeight=1 PerfScore 3.00
 G_M8858_IG40:
-       mov      dword ptr [rbp-0x38], ecx
-       mov      gword ptr [rbp-0x78], rax
+       mov      dword ptr [rbp-0x30], ecx
+       mov      gword ptr [rbp-0x68], rax
        mov      rdi, gword ptr [r14+0x18]
        mov      rdx, qword ptr [rdi]
        mov      rdx, qword ptr [rdx+0x40]
        call     [rdx+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
 						;; size=24 bbWeight=2 PerfScore 22.50
 G_M8858_IG41:
        mov      rax, rdx
-       mov      r8, qword ptr [rbp-0x58]
+       mov      r8, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], r8
-       mov      r9, qword ptr [rbp-0x50]
+       mov      r9, qword ptr [rbp-0x48]
        mov      qword ptr [rax+0x20], r9
        mov      rdx, rax
-       mov      rax, gword ptr [rbp-0x78]
+       mov      rax, gword ptr [rbp-0x68]
 						;; size=26 bbWeight=2 PerfScore 11.00
 G_M8858_IG42:
-       mov      qword ptr [rbp-0x40], r15
-       lea      rcx, [rbp-0x40]
-       mov      gword ptr [rbp-0x70], rdx
+       mov      qword ptr [rbp-0x38], r15
+       lea      rcx, [rbp-0x38]
+       mov      gword ptr [rbp-0x60], rdx
        mov      rdi, rdx
        mov      rsi, rax
        mov      rdx, rbx
-       mov      r15, gword ptr [rbp-0x70]
-       mov      rax, qword ptr [r15]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
-       mov      rdi, qword ptr [rbp-0x40]
-       mov      rcx, rdi
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      r15, qword ptr [rbp-0x38]
        test     eax, eax
-       mov      r15, rcx
-       mov      rdx, qword ptr [rbp-0x48]
+       mov      rdx, qword ptr [rbp-0x40]
        je       G_M8858_IG52
-						;; size=57 bbWeight=2 PerfScore 30.00
+						;; size=51 bbWeight=2 PerfScore 25.50
 G_M8858_IG43:
-       mov      r8, qword ptr [rbp-0x50]
+       mov      r8, qword ptr [rbp-0x48]
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M8858_IG44:
        mov      eax, r12d
-       mov      r12d, dword ptr [rbp-0x34]
+       mov      r12d, dword ptr [rbp-0x2C]
        jmp      G_M8858_IG25
 						;; size=12 bbWeight=2 PerfScore 6.50
 G_M8858_IG45:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        test     eax, eax
-       mov      eax, dword ptr [rbp-0x38]
+       mov      eax, dword ptr [rbp-0x30]
        jle      G_M8858_IG24
        test     r11d, r11d
        je       SHORT G_M8858_IG46
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x10], dil
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        mov      byte  ptr [rax+0x11], cl
        jmp      SHORT G_M8858_IG47
 						;; size=62 bbWeight=2 PerfScore 27.50
 G_M8858_IG46:
-       mov      dword ptr [rbp-0x38], eax
+       mov      dword ptr [rbp-0x30], eax
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      byte  ptr [rax+0x10], cl
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x11], dil
-       mov      gword ptr [rbp-0x80], rax
-       mov      rax, gword ptr [rbp-0x80]
+       mov      gword ptr [rbp-0x70], rax
+       mov      rax, gword ptr [rbp-0x70]
 						;; size=49 bbWeight=2 PerfScore 18.50
 G_M8858_IG47:
-       mov      rdx, gword ptr [rbp-0x70]
+       mov      rdx, gword ptr [rbp-0x60]
        test     rdx, rdx
        jne      SHORT G_M8858_IG50
        test     r13, r13
        je       SHORT G_M8858_IG48
-       mov      gword ptr [rbp-0x80], rax
+       mov      gword ptr [rbp-0x70], rax
        mov      rdi, r13
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [rdx]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
        jmp      SHORT G_M8858_IG49
 						;; size=38 bbWeight=2 PerfScore 20.50
 G_M8858_IG48:
-       mov      gword ptr [rbp-0x80], rax
+       mov      gword ptr [rbp-0x70], rax
        mov      rdi, gword ptr [r14+0x18]
        mov      rdx, qword ptr [rdi]
        mov      rdx, qword ptr [rdx+0x40]
        call     [rdx+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
 						;; size=21 bbWeight=2 PerfScore 20.50
 G_M8858_IG49:
        mov      rax, rdx
-       mov      r8, qword ptr [rbp-0x58]
+       mov      r8, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], r8
-       mov      r9, qword ptr [rbp-0x50]
+       mov      r9, qword ptr [rbp-0x48]
        mov      qword ptr [rax+0x20], r9
        mov      rdx, rax
-       mov      rax, gword ptr [rbp-0x80]
+       mov      rax, gword ptr [rbp-0x70]
 						;; size=26 bbWeight=2 PerfScore 11.00
 G_M8858_IG50:
-       mov      qword ptr [rbp-0x40], r15
-       lea      rcx, [rbp-0x40]
-       mov      gword ptr [rbp-0x70], rdx
+       mov      qword ptr [rbp-0x38], r15
+       lea      rcx, [rbp-0x38]
+       mov      gword ptr [rbp-0x60], rdx
        mov      rdi, rdx
        mov      rsi, rax
        mov      rdx, rbx
-       mov      r15, gword ptr [rbp-0x70]
-       mov      rax, qword ptr [r15]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
-       mov      rdi, qword ptr [rbp-0x40]
-       mov      rcx, rdi
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      r15, qword ptr [rbp-0x38]
        test     eax, eax
-       mov      gword ptr [rbp-0x70], r15
-       mov      r15, rcx
-       mov      rdx, qword ptr [rbp-0x48]
+       mov      rdx, qword ptr [rbp-0x40]
        je       SHORT G_M8858_IG52
-						;; size=57 bbWeight=2 PerfScore 32.00
+						;; size=47 bbWeight=2 PerfScore 25.50
 G_M8858_IG51:
-       mov      r8, qword ptr [rbp-0x50]
+       mov      r8, qword ptr [rbp-0x48]
        jmp      G_M8858_IG23
 						;; size=9 bbWeight=1 PerfScore 3.00
 G_M8858_IG52:
        add      rbx, -2
        xor      edi, edi
-       mov      r12, gword ptr [rbp-0x70]
+       mov      r12, gword ptr [rbp-0x60]
        mov      qword ptr [r12+0x18], rdi
        mov      rdi, r12
-       mov      gword ptr [rbp-0x70], r12
+       mov      gword ptr [rbp-0x60], r12
        mov      rax, qword ptr [r12]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.DecoderFallbackBuffer:Reset():this
        jmp      SHORT G_M8858_IG54
 						;; size=34 bbWeight=0.50 PerfScore 6.38
 G_M8858_IG53:
        add      rbx, -2
 						;; size=4 bbWeight=0.50 PerfScore 0.12
 G_M8858_IG54:
-       cmp      r15, qword ptr [rbp-0x60]
+       cmp      r15, qword ptr [rbp-0x58]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r14
        mov      rsi, r13
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        call     [rcx]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
-       mov      eax, dword ptr [rbp-0x38]
-       mov      r8, qword ptr [rbp-0x50]
-       mov      r12d, dword ptr [rbp-0x34]
+       mov      eax, dword ptr [rbp-0x30]
+       mov      r8, qword ptr [rbp-0x48]
+       mov      r12d, dword ptr [rbp-0x2C]
        jmp      G_M8858_IG26
 						;; size=44 bbWeight=0.50 PerfScore 6.00
 G_M8858_IG55:
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 2
        call     CORINFO_HELP_NEWARR_1_VC
-       mov      ecx, dword ptr [rbp-0x38]
+       mov      ecx, dword ptr [rbp-0x30]
        mov      byte  ptr [rax+0x10], cl
-       mov      dword ptr [rbp-0x38], ecx
+       mov      dword ptr [rbp-0x30], ecx
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rax+0x11], dil
-       mov      gword ptr [rbp-0x88], rax
-       mov      rax, gword ptr [rbp-0x88]
-						;; size=52 bbWeight=0.50 PerfScore 4.12
+       mov      gword ptr [rbp-0x78], rax
+       mov      rax, gword ptr [rbp-0x78]
+						;; size=46 bbWeight=0.50 PerfScore 4.12
 G_M8858_IG56:
-       mov      rdx, gword ptr [rbp-0x70]
+       mov      rdx, gword ptr [rbp-0x60]
        test     rdx, rdx
        jne      SHORT G_M8858_IG59
        test     r13, r13
        je       SHORT G_M8858_IG57
-       mov      gword ptr [rbp-0x88], rax
+       mov      gword ptr [rbp-0x78], rax
        mov      rdi, r13
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [rdx]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
        jmp      SHORT G_M8858_IG58
-						;; size=41 bbWeight=0.50 PerfScore 5.12
+						;; size=38 bbWeight=0.50 PerfScore 5.12
 G_M8858_IG57:
-       mov      gword ptr [rbp-0x88], rax
+       mov      gword ptr [rbp-0x78], rax
        mov      rdi, gword ptr [r14+0x18]
        mov      rdx, qword ptr [rdi]
        mov      rdx, qword ptr [rdx+0x40]
        call     [rdx+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rdx, rax
-						;; size=24 bbWeight=0.50 PerfScore 5.12
+						;; size=21 bbWeight=0.50 PerfScore 5.12
 G_M8858_IG58:
        mov      rax, rdx
-       mov      r8, qword ptr [rbp-0x58]
+       mov      r8, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], r8
-       mov      r9, qword ptr [rbp-0x50]
+       mov      r9, qword ptr [rbp-0x48]
        mov      qword ptr [rax+0x20], r9
        mov      rdx, rax
-       mov      rax, gword ptr [rbp-0x88]
-						;; size=29 bbWeight=0.50 PerfScore 2.75
+       mov      rax, gword ptr [rbp-0x78]
+						;; size=26 bbWeight=0.50 PerfScore 2.75
 G_M8858_IG59:
-       mov      qword ptr [rbp-0x40], r15
-       lea      rcx, [rbp-0x40]
-       mov      gword ptr [rbp-0x70], rdx
+       mov      qword ptr [rbp-0x38], r15
+       lea      rcx, [rbp-0x38]
+       mov      gword ptr [rbp-0x60], rdx
        mov      rdi, rdx
        mov      rsi, rax
        mov      rdx, rbx
-       mov      r15, gword ptr [rbp-0x70]
-       mov      rax, qword ptr [r15]
-       mov      rax, qword ptr [rax+0x48]
-       mov      qword ptr [rbp-0x68], rax
-       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
-       mov      rdi, qword ptr [rbp-0x40]
-       mov      qword ptr [rbp-0x30], rdi
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      r15, qword ptr [rbp-0x38]
        test     eax, eax
        jne      SHORT G_M8858_IG60
        add      rbx, -2
        lea      rdi, [rbx-0x01]
        test     r12d, r12d
        cmovge   rbx, rdi
        xor      edi, edi
-       mov      qword ptr [r15+0x18], rdi
-       mov      rdi, r15
-       mov      r15, qword ptr [rbp-0x68]
-       call     [r15]System.Text.DecoderFallbackBuffer:Reset():this
-       mov      r15, qword ptr [rbp-0x30]
-       cmp      r15, qword ptr [rbp-0x60]
+       mov      rax, gword ptr [rbp-0x60]
+       mov      qword ptr [rax+0x18], rdi
+       mov      rdi, rax
+       mov      rax, qword ptr [rax]
+       mov      rax, qword ptr [rax+0x48]
+       call     [rax]System.Text.DecoderFallbackBuffer:Reset():this
+       cmp      r15, qword ptr [rbp-0x58]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r14
        mov      rsi, r13
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        call     [rcx]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        add      rbx, 2
        test     r12d, r12d
        jl       G_M8858_IG67
        jmp      G_M8858_IG65
-						;; size=132 bbWeight=0.50 PerfScore 16.88
+						;; size=126 bbWeight=0.50 PerfScore 16.50
 G_M8858_IG60:
-       xor      edi, edi
-       mov      dword ptr [rbp-0x38], edi
-       mov      gword ptr [rbp-0x70], r15
-       mov      r8, qword ptr [rbp-0x50]
-       mov      r15, qword ptr [rbp-0x30]
-						;; size=17 bbWeight=0.50 PerfScore 2.12
+       xor      ecx, ecx
+       mov      dword ptr [rbp-0x30], ecx
+       mov      r8, qword ptr [rbp-0x48]
+						;; size=9 bbWeight=0.50 PerfScore 1.12
 G_M8858_IG61:
        test     r12d, r12d
        jl       G_M8858_IG67
-       mov      rcx, gword ptr [rbp-0x70]
+       mov      rcx, gword ptr [rbp-0x60]
        test     rcx, rcx
-       mov      gword ptr [rbp-0x70], rcx
+       mov      gword ptr [rbp-0x60], rcx
        jne      SHORT G_M8858_IG64
        test     r13, r13
        je       SHORT G_M8858_IG62
        mov      rdi, r13
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [rcx]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rcx, rax
        jmp      SHORT G_M8858_IG63
 						;; size=47 bbWeight=0.50 PerfScore 5.75
 G_M8858_IG62:
        mov      rdi, gword ptr [r14+0x18]
        mov      rcx, qword ptr [rdi]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
        mov      rcx, rax
 						;; size=17 bbWeight=0.50 PerfScore 4.62
 G_M8858_IG63:
        mov      rax, rcx
-       mov      rcx, qword ptr [rbp-0x58]
+       mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
-       mov      gword ptr [rbp-0x70], rax
-       mov      rdi, qword ptr [rbp-0x50]
+       mov      gword ptr [rbp-0x60], rax
+       mov      rdi, qword ptr [rbp-0x48]
        mov      qword ptr [rax+0x20], rdi
 						;; size=23 bbWeight=0.50 PerfScore 2.62
 G_M8858_IG64:
-       mov      qword ptr [rbp-0x40], r15
+       mov      qword ptr [rbp-0x38], r15
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 1
        call     CORINFO_HELP_NEWARR_1_VC
        mov      byte  ptr [rax+0x10], r12b
-       lea      rcx, [rbp-0x40]
-       mov      rdi, gword ptr [rbp-0x70]
+       lea      rcx, [rbp-0x38]
+       mov      rdi, gword ptr [rbp-0x60]
        mov      rsi, rax
        mov      rdx, rbx
-       mov      gword ptr [rbp-0x70], rdi
-       mov      rax, qword ptr [rdi]
-       mov      r15, qword ptr [rax+0x48]
-       call     [r15+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
-       mov      rdi, qword ptr [rbp-0x40]
-       mov      qword ptr [rbp-0x30], rdi
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      r15, qword ptr [rbp-0x38]
        test     eax, eax
        jne      SHORT G_M8858_IG66
        dec      rbx
        xor      edi, edi
-       mov      rax, gword ptr [rbp-0x70]
+       mov      rax, gword ptr [rbp-0x60]
        mov      qword ptr [rax+0x18], rdi
        mov      rdi, rax
-       call     [r15]System.Text.DecoderFallbackBuffer:Reset():this
-       mov      r15, qword ptr [rbp-0x30]
-       cmp      r15, qword ptr [rbp-0x60]
+       mov      rax, qword ptr [rax]
+       mov      rax, qword ptr [rax+0x48]
+       call     [rax]System.Text.DecoderFallbackBuffer:Reset():this
+       cmp      r15, qword ptr [rbp-0x58]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r14
        mov      rsi, r13
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        call     [rcx]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
-						;; size=120 bbWeight=0.50 PerfScore 15.25
+						;; size=115 bbWeight=0.50 PerfScore 13.88
 G_M8858_IG65:
        inc      rbx
        jmp      SHORT G_M8858_IG67
 						;; size=5 bbWeight=0.50 PerfScore 1.12
 G_M8858_IG66:
        mov      r12d, -1
-       mov      r15, qword ptr [rbp-0x30]
-						;; size=10 bbWeight=0.50 PerfScore 0.62
+						;; size=6 bbWeight=0.50 PerfScore 0.12
 G_M8858_IG67:
        test     r13, r13
        je       SHORT G_M8858_IG69
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M8858_IG68:
        mov      rax, rbx
-       sub      rax, qword ptr [rbp-0x58]
+       sub      rax, qword ptr [rbp-0x50]
        mov      dword ptr [r13+0x20], eax
-       mov      ebx, dword ptr [rbp-0x38]
+       mov      ebx, dword ptr [rbp-0x30]
        mov      word  ptr [r13+0x2E], bx
        mov      dword ptr [r13+0x30], r12d
 						;; size=23 bbWeight=0.50 PerfScore 3.12
 G_M8858_IG69:
        mov      rax, r15
-       sub      rax, qword ptr [rbp-0x60]
+       sub      rax, qword ptr [rbp-0x58]
        mov      rsi, rax
        shr      rsi, 63
        add      rax, rsi
        sar      rax, 1
 						;; size=20 bbWeight=1 PerfScore 3.75
 G_M8858_IG70:
-       add      rsp, 104
+       add      rsp, 88
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M8858_IG71:
        mov      rsi, r9
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=16 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 2110, prolog size 31, PerfScore 793.62, instruction count 557, allocated bytes for code 2110 (MethodHash=1564dd65) for method System.Text.UnicodeEncoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this (FullOpts)
+; Total bytes of code 2060, prolog size 31, PerfScore 777.88, instruction count 543, allocated bytes for code 2060 (MethodHash=1564dd65) for method System.Text.UnicodeEncoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this (FullOpts)
-4 (-0.36 % of base) - System.Text.UTF32Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this
 ; Assembly listing for method System.Text.UTF32Encoding: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; 11 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T15] ( 10, 22.50)     ref  ->  r13         this class-hnd single-def <System.Text.UTF32Encoding>
-;  V01 arg1         [V01,T03] ( 18, 81.50)    long  ->  r15        
+;  V01 arg1         [V01,T02] ( 18, 81.50)    long  ->  r15        
 ;  V02 arg2         [V02,T28] (  3,  3   )     int  ->  rdx         single-def
 ;  V03 arg3         [V03,T00] ( 40,184   )    long  ->  registers  
 ;  V04 arg4         [V04,T29] (  3,  3   )     int  ->   r8         single-def
 ;  V05 arg5         [V05,T14] ( 15, 27.50)     ref  ->  r14         class-hnd single-def <System.Text.EncoderNLS>
 ;  V06 loc0         [V06,T30] (  4,  3.50)    long  ->  r12        
 ;  V07 loc1         [V07,T16] (  3, 18   )    long  ->  [rbp-0x30]  spill-single-def
 ;  V08 loc2         [V08,T18] (  5, 13   )    long  ->  [rbp-0x38]  spill-single-def
 ;  V09 loc3         [V09,T27] (  3, 11   )    long  ->  [rbp-0x40]  spill-single-def
 ;  V10 loc4         [V10,T13] ( 11, 38   )  ushort  ->  [rbp-0x44] 
-;  V11 loc5         [V11,T02] ( 24, 91   )     ref  ->  [rbp-0x58]  class-hnd <System.Text.EncoderFallbackBuffer>
+;  V11 loc5         [V11,T03] ( 22, 75   )     ref  ->  [rbp-0x58]  class-hnd <System.Text.EncoderFallbackBuffer>
 ;  V12 loc6         [V12    ] (  6, 48   )    long  ->  [rbp-0x50]  do-not-enreg[X] addr-exposed ld-addr-op
 ;  V13 loc7         [V13,T01] ( 16,106   )  ushort  ->  registers  
 ;  V14 loc8         [V14,T17] (  7, 14   )     int  ->  rax        
 ;# V15 OutArgs      [V15    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V16 tmp1         [V16,T04] (  4, 68   )     int  ->  registers   "dup spill"
 ;  V17 tmp2         [V17,T05] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V18 tmp3         [V18,T06] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V19 tmp4         [V19,T07] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V20 tmp5         [V20,T08] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V21 tmp6         [V21,T09] (  3, 48   )    long  ->  rbx         "impSpillLclRefs"
 ;  V22 tmp7         [V22,T10] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V23 tmp8         [V23,T11] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V24 tmp9         [V24,T12] (  3, 48   )    long  ->  rsi         "impSpillLclRefs"
 ;  V25 tmp10        [V25,T19] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V26 tmp11        [V26,T20] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V27 tmp12        [V27,T21] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V28 tmp13        [V28,T22] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V29 tmp14        [V29,T23] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V30 tmp15        [V30,T24] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V31 tmp16        [V31,T25] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V32 tmp17        [V32,T26] (  3, 12   )    long  ->  rdi         "impSpillLclRefs"
 ;  V33 tmp18        [V33,T36] (  2,  0   )     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V34 tmp19        [V34,T37] (  2,  0   )     ref  ->  r15         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V35 tmp20        [V35,T33] (  3,  0   )     ref  ->  rdi         class-hnd single-def "dup spill" <System.Text.EncoderFallback>
 ;* V36 tmp21        [V36    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V37 tmp22        [V37    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V38 tmp23        [V38    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V39 tmp24        [V39    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V40 tmp25        [V40    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;  V41 tmp26        [V41,T34] (  3,  0   )     ref  ->  r14        
 ;  V42 tmp27        [V42,T35] (  3,  0   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
 ;* V43 tmp28        [V43    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Text.CodePageDataItem>
 ;  V44 tmp29        [V44,T31] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V45 tmp30        [V45,T38] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V46 rat0         [V46,T32] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 56
 
 G_M32635_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 56
        lea      rbp, [rsp+0x60]
        mov      r13, rdi
        mov      r15, rsi
        mov      rbx, rcx
        mov      r14, r9
 						;; size=31 bbWeight=1 PerfScore 7.75
 G_M32635_IG02:
        mov      r12, r15
        movsxd   rdi, edx
        lea      rax, [r12+2*rdi]
        mov      qword ptr [rbp-0x30], rax
        mov      rcx, rbx
        mov      qword ptr [rbp-0x38], rcx
        movsxd   rdx, r8d
        add      rdx, rcx
        mov      qword ptr [rbp-0x40], rdx
        xor      esi, esi
        test     r14, r14
        je       SHORT G_M32635_IG04
 						;; size=38 bbWeight=1 PerfScore 6.25
 G_M32635_IG03:
        movzx    rsi, word  ptr [r14+0x24]
        mov      dword ptr [rbp-0x44], esi
        mov      rdi, r14
        mov      r8, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [r8]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        cmp      byte  ptr [r14+0x27], 0
        je       SHORT G_M32635_IG05
        mov      rdi, rax
        mov      gword ptr [rbp-0x58], rax
        mov      rcx, qword ptr [rax]
        mov      rcx, qword ptr [rcx+0x48]
        call     [rcx]System.Text.EncoderFallbackBuffer:get_Remaining():int:this
        test     eax, eax
        mov      rax, gword ptr [rbp-0x58]
        jle      SHORT G_M32635_IG05
        jmp      G_M32635_IG32
 						;; size=60 bbWeight=0.50 PerfScore 11.50
 G_M32635_IG04:
        mov      dword ptr [rbp-0x44], esi
        mov      rdi, gword ptr [r13+0x10]
        mov      r8, qword ptr [rdi]
        mov      r8, qword ptr [r8+0x40]
        call     [r8+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=18 bbWeight=0.50 PerfScore 5.00
 G_M32635_IG05:
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x58], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x58]
        mov      word  ptr [rax+0x30], 1
        mov      byte  ptr [rax+0x32], 0
        xor      edi, edi
        mov      dword ptr [rax+0x28], edi
        mov      gword ptr [rbp-0x58], rax
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rcx]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        mov      ecx, eax
        test     ecx, ecx
        je       G_M32635_IG08
 						;; size=76 bbWeight=1 PerfScore 16.00
 G_M32635_IG06:
        test     ecx, ecx
        jne      SHORT G_M32635_IG07
        movzx    rcx, word  ptr [r15]
        add      r15, 2
 						;; size=12 bbWeight=2 PerfScore 7.00
 G_M32635_IG07:
        mov      edi, dword ptr [rbp-0x44]
        test     edi, edi
        je       SHORT G_M32635_IG09
        lea      eax, [rcx-0xDC00]
        cmp      eax, 0x3FF
        ja       G_M32635_IG23
        add      edi, -0xD800
        shl      edi, 10
        lea      eax, [rdi+rcx+0x2400]
        xor      edi, edi
        xor      edx, edx
        lea      rdi, [rbx+0x03]
        cmp      rdi, qword ptr [rbp-0x40]
        jb       G_M32635_IG28
        mov      r8, gword ptr [rbp-0x58]
        cmp      byte  ptr [r8+0x32], 0
        je       G_M32635_IG30
        mov      rdi, r8
        mov      gword ptr [rbp-0x58], r8
        mov      rax, qword ptr [r8]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        mov      rdi, gword ptr [rbp-0x58]
        mov      gword ptr [rbp-0x58], rdi
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        jmp      G_M32635_IG31
 						;; size=113 bbWeight=2 PerfScore 68.00
 G_M32635_IG08:
        mov      edx, ecx
        jmp      G_M32635_IG26
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M32635_IG09:
        lea      edx, [rcx-0xD800]
        cmp      edx, 0x3FF
        ja       SHORT G_M32635_IG10
        mov      dword ptr [rbp-0x44], ecx
        jmp      G_M32635_IG25
 						;; size=22 bbWeight=8 PerfScore 38.00
 G_M32635_IG10:
        lea      edx, [rcx-0xDC00]
        cmp      edx, 0x3FF
        ja       SHORT G_M32635_IG11
        mov      dword ptr [rbp-0x44], edi
        mov      qword ptr [rbp-0x50], r15
        lea      rdx, [rbp-0x50]
        mov      rdi, gword ptr [rbp-0x58]
        mov      esi, ecx
-       mov      gword ptr [rbp-0x58], rdi
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       call     [rax]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      r15, qword ptr [rbp-0x50]
        jmp      G_M32635_IG25
-						;; size=54 bbWeight=8 PerfScore 132.00
+						;; size=52 bbWeight=8 PerfScore 94.00
 G_M32635_IG11:
        lea      rax, [rbx+0x03]
        cmp      rax, qword ptr [rbp-0x40]
        jb       SHORT G_M32635_IG12
        mov      rax, gword ptr [rbp-0x58]
        cmp      byte  ptr [rax+0x32], 0
        je       G_M32635_IG14
        mov      dword ptr [rbp-0x44], edi
        mov      rdi, rax
        mov      gword ptr [rbp-0x58], rax
        mov      rcx, qword ptr [rax]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        jmp      G_M32635_IG15
 						;; size=49 bbWeight=8 PerfScore 158.00
 G_M32635_IG12:
        cmp      byte  ptr [r13+0x27], 0
        je       SHORT G_M32635_IG13
        lea      rsi, [rbx+0x01]
        mov      rax, rsi
        mov      byte  ptr [rbx], 0
        mov      rsi, rax
        lea      rax, [rsi+0x01]
        mov      byte  ptr [rsi], 0
        mov      rsi, rax
        lea      rax, [rsi+0x01]
        mov      r8d, ecx
        shr      r8d, 8
        mov      byte  ptr [rsi], r8b
        mov      rsi, rax
        lea      rax, [rsi+0x01]
        mov      byte  ptr [rsi], cl
        mov      dword ptr [rbp-0x44], edi
        mov      rbx, rax
        jmp      G_M32635_IG25
 						;; size=64 bbWeight=8 PerfScore 120.00
 G_M32635_IG13:
        mov      rsi, rbx
        lea      rbx, [rsi+0x01]
        mov      byte  ptr [rsi], cl
        mov      rsi, rbx
        lea      rbx, [rsi+0x01]
        mov      eax, ecx
        shr      eax, 8
        mov      byte  ptr [rsi], al
        mov      rsi, rbx
        lea      rbx, [rsi+0x01]
        mov      byte  ptr [rsi], 0
        mov      rsi, rbx
        lea      rbx, [rsi+0x01]
        mov      byte  ptr [rsi], 0
        mov      dword ptr [rbp-0x44], edi
        jmp      G_M32635_IG25
 						;; size=51 bbWeight=8 PerfScore 86.00
 G_M32635_IG14:
        add      r15, -2
        mov      gword ptr [rbp-0x58], rax
        mov      dword ptr [rbp-0x44], edi
 						;; size=11 bbWeight=8 PerfScore 18.00
 G_M32635_IG15:
        cmp      rbx, qword ptr [rbp-0x38]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r13
        mov      rsi, r14
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        call     [rcx]System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
 						;; size=28 bbWeight=8 PerfScore 56.00
 G_M32635_IG16:
        test     r14, r14
        je       SHORT G_M32635_IG18
 						;; size=5 bbWeight=8 PerfScore 10.00
 G_M32635_IG17:
        cmp      byte  ptr [r14+0x26], 0
        je       SHORT G_M32635_IG20
 						;; size=7 bbWeight=2 PerfScore 8.00
 G_M32635_IG18:
        mov      ecx, dword ptr [rbp-0x44]
        test     ecx, ecx
        jg       SHORT G_M32635_IG24
 						;; size=7 bbWeight=4 PerfScore 9.00
 G_M32635_IG19:
        test     r14, r14
        mov      dword ptr [rbp-0x44], ecx
        je       SHORT G_M32635_IG21
 						;; size=8 bbWeight=1 PerfScore 2.25
 G_M32635_IG20:
        mov      ecx, dword ptr [rbp-0x44]
        mov      word  ptr [r14+0x24], cx
        mov      rax, r15
        sub      rax, r12
        mov      rdx, rax
        shr      rdx, 63
        add      rax, rdx
        sar      rax, 1
        mov      dword ptr [r14+0x20], eax
 						;; size=31 bbWeight=0.50 PerfScore 2.50
 G_M32635_IG21:
        mov      rax, rbx
        sub      rax, qword ptr [rbp-0x38]
 						;; size=7 bbWeight=1 PerfScore 2.25
 G_M32635_IG22:
        add      rsp, 56
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M32635_IG23:
        add      r15, -2
        mov      ecx, edi
 						;; size=6 bbWeight=2 PerfScore 1.00
 G_M32635_IG24:
        mov      qword ptr [rbp-0x50], r15
        lea      rdx, [rbp-0x50]
        mov      rdi, gword ptr [rbp-0x58]
        mov      esi, ecx
-       mov      gword ptr [rbp-0x58], rdi
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       call     [rax]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      r15, qword ptr [rbp-0x50]
        xor      ecx, ecx
        mov      dword ptr [rbp-0x44], ecx
-						;; size=37 bbWeight=8 PerfScore 104.00
+						;; size=35 bbWeight=8 PerfScore 66.00
 G_M32635_IG25:
        mov      rdi, gword ptr [rbp-0x58]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rax]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        mov      ecx, eax
        mov      edx, ecx
        test     edx, edx
        jne      SHORT G_M32635_IG27
 						;; size=24 bbWeight=16 PerfScore 96.00
 G_M32635_IG26:
        mov      rax, qword ptr [rbp-0x30]
        cmp      r15, rax
        mov      ecx, edx
        jb       G_M32635_IG06
        jmp      G_M32635_IG16
 						;; size=20 bbWeight=16 PerfScore 72.00
 G_M32635_IG27:
        mov      ecx, edx
        jmp      G_M32635_IG06
 						;; size=7 bbWeight=8 PerfScore 18.00
 G_M32635_IG28:
        cmp      byte  ptr [r13+0x27], 0
        je       SHORT G_M32635_IG29
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      byte  ptr [rdi], 0
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      ecx, eax
        shr      ecx, 16
        mov      byte  ptr [rdi], cl
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      ecx, eax
        shr      ecx, 8
        mov      byte  ptr [rdi], cl
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      byte  ptr [rdi], al
        mov      dword ptr [rbp-0x44], edx
        jmp      SHORT G_M32635_IG25
 						;; size=59 bbWeight=2 PerfScore 31.00
 G_M32635_IG29:
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      byte  ptr [rdi], al
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      ecx, eax
        shr      ecx, 8
        mov      byte  ptr [rdi], cl
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        shr      eax, 16
        mov      byte  ptr [rdi], al
        mov      rdi, rbx
        lea      rbx, [rdi+0x01]
        mov      byte  ptr [rdi], 0
        mov      dword ptr [rbp-0x44], edx
        jmp      G_M32635_IG25
 						;; size=53 bbWeight=2 PerfScore 22.50
 G_M32635_IG30:
        add      r15, -4
        mov      gword ptr [rbp-0x58], r8
 						;; size=8 bbWeight=2 PerfScore 2.50
 G_M32635_IG31:
        cmp      rbx, qword ptr [rbp-0x38]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r13
        mov      rsi, r14
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        call     [rcx]System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        xor      edx, edx
        mov      dword ptr [rbp-0x44], edx
        jmp      G_M32635_IG16
 						;; size=38 bbWeight=2 PerfScore 20.50
 G_M32635_IG32:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        call     [rax]System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        mov      rbx, rax
        cmp      gword ptr [r13+0x08], 0
        jne      SHORT G_M32635_IG33
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:GetDataItem():this
        call     [rax]System.Text.Encoding:GetDataItem():this
 						;; size=37 bbWeight=0 PerfScore 0.00
 G_M32635_IG33:
        mov      rdi, gword ptr [r13+0x08]
        mov      r15, gword ptr [rdi+0x20]
        mov      rdi, gword ptr [r14+0x08]
        test     rdi, rdi
        je       SHORT G_M32635_IG34
        call     System.Object:GetType():System.Type:this
        mov      r14, rax
        jmp      SHORT G_M32635_IG35
 						;; size=27 bbWeight=0 PerfScore 0.00
 G_M32635_IG34:
        xor      r14, r14
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M32635_IG35:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, rbx
        mov      rsi, r15
        mov      rdx, r14
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object,System.Object):System.String
        mov      rsi, rax
        mov      rdi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentException:.ctor(System.String):this
        call     [rax]System.ArgumentException:.ctor(System.String):this
        mov      rdi, r13
        call     CORINFO_HELP_THROW
        int3     
 						;; size=66 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1099, prolog size 19, PerfScore 1136.38, instruction count 312, allocated bytes for code 1099 (MethodHash=3c5e8084) for method System.Text.UTF32Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
+; Total bytes of code 1095, prolog size 19, PerfScore 1060.38, instruction count 308, allocated bytes for code 1095 (MethodHash=3c5e8084) for method System.Text.UTF32Encoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
-4 (-0.37 % of base) - System.Text.UTF32Encoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this
 ; Assembly listing for method System.Text.UTF32Encoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int: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; 6 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T17] (  7,  8   )     ref  ->  r14         this class-hnd single-def <System.Text.UTF32Encoding>
+;  V00 this         [V00,T16] (  7,  8   )     ref  ->  r14         this class-hnd single-def <System.Text.UTF32Encoding>
 ;  V01 arg1         [V01,T09] ( 15, 20   )    long  ->  [rbp-0x30] 
 ;  V02 arg2         [V02,T27] (  3,  3   )     int  ->  rdx         single-def
 ;  V03 arg3         [V03,T02] ( 16, 74   )    long  ->  registers  
 ;  V04 arg4         [V04,T28] (  3,  3   )     int  ->   r8         single-def
 ;  V05 arg5         [V05,T21] (  7,  5   )     ref  ->   r9         class-hnd single-def <System.Text.DecoderNLS>
 ;  V06 loc0         [V06,T23] ( 10,  6   )     ref  ->  r13         class-hnd exact single-def <System.Text.UTF32Encoding+UTF32Decoder>
 ;  V07 loc1         [V07,T30] (  5,  4   )    long  ->  r12        
 ;  V08 loc2         [V08,T11] (  3, 17   )    long  ->  [rbp-0x38]  spill-single-def
 ;  V09 loc3         [V09,T29] (  5,  4.50)    long  ->  [rbp-0x40]  spill-single-def
 ;  V10 loc4         [V10,T25] (  3,  6   )    long  ->  [rbp-0x48]  spill-single-def
 ;  V11 loc5         [V11,T10] ( 11, 18.50)     int  ->  [rbp-0x4C] 
 ;  V12 loc6         [V12,T00] ( 36,115.50)     int  ->  [rbp-0x50] 
-;  V13 loc7         [V13,T16] ( 14, 11   )     ref  ->  [rbp-0x68]  class-hnd <System.Text.DecoderFallbackBuffer>
+;  V13 loc7         [V13,T18] ( 12,  8.50)     ref  ->  [rbp-0x68]  class-hnd <System.Text.DecoderFallbackBuffer>
 ;  V14 loc8         [V14    ] (  6,  7.50)    long  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed ld-addr-op
 ;  V15 loc9         [V15,T24] (  3,  6   )     ref  ->  rsi         class-hnd <ubyte[]>
 ;  V16 loc10        [V16,T13] (  6, 13   )     ref  ->  rax         class-hnd exact single-def <ubyte[]>
 ;  V17 loc11        [V17,T05] ( 11, 32.50)     int  ->  rcx        
 ;# V18 OutArgs      [V18    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V19 tmp1         [V19,T14] (  3, 12   )    long  ->  rsi         "impSpillLclRefs"
 ;  V20 tmp2         [V20,T06] (  6, 24   )     ref  ->  rsi         class-hnd exact "dup spill" <ubyte[]>
 ;  V21 tmp3         [V21,T19] (  2,  8   )     int  ->  rax         "impAppendStmt"
 ;  V22 tmp4         [V22,T07] (  6, 24   )     ref  ->  rsi         class-hnd exact "dup spill" <ubyte[]>
 ;  V23 tmp5         [V23,T01] (  3, 96   )    long  ->  rsi         "impSpillLclRefs"
 ;  V24 tmp6         [V24,T03] (  3, 48   )    long  ->  rbx         "impSpillLclRefs"
 ;  V25 tmp7         [V25,T15] (  3, 12   )    long  ->  r15         "impSpillLclRefs"
 ;  V26 tmp8         [V26,T20] (  2,  8   )     int  ->  rcx         "dup spill"
 ;  V27 tmp9         [V27,T34] (  2,  2   )     int  ->  rax         "impAppendStmt"
 ;  V28 tmp10        [V28,T12] (  2, 16   )     int  ->  rcx         "dup spill"
 ;* V29 tmp11        [V29    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
 ;  V30 tmp12        [V30,T31] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V31 cse0         [V31,T32] (  3,  3   )    long  ->  [rbp-0x60]  spill-single-def "CSE #03: moderate"
-;  V32 cse1         [V32,T18] (  3, 10   )     int  ->  rdi         "CSE #06: moderate"
+;  V32 cse1         [V32,T17] (  3, 10   )     int  ->  rdi         "CSE #06: moderate"
 ;  V33 cse2         [V33,T08] (  3, 24   )     int  ->  r10         "CSE #11: moderate"
 ;  V34 rat0         [V34,T22] (  4,  7   )     ref  ->  r13         "replacement local"
 ;  V35 rat1         [V35,T33] (  3,  2   )    long  ->  rdi         "CSE for expectedClsNode"
 ;  V36 rat2         [V36,T04] (  3, 48   )    long  ->  rsi         "ReplaceWithLclVar is creating a new local variable"
 ;  V37 rat3         [V37,T26] (  3,  6   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 72
 
 G_M1603_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 72
        lea      rbp, [rsp+0x70]
        mov      r14, rdi
        mov      r15, rsi
        mov      rbx, rcx
 						;; size=28 bbWeight=1 PerfScore 7.50
 G_M1603_IG02:
        mov      r13, r9
        test     r13, r13
        je       SHORT G_M1603_IG04
 						;; size=8 bbWeight=1 PerfScore 1.50
 G_M1603_IG03:
        mov      rdi, 0xD1FFAB1E      ; System.Text.UTF32Encoding+UTF32Decoder
        cmp      qword ptr [r13], rdi
        jne      G_M1603_IG43
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M1603_IG04:
        mov      r12, rbx
        movsxd   rdi, r8d
        lea      rax, [r12+2*rdi]
        mov      qword ptr [rbp-0x60], rax
        mov      qword ptr [rbp-0x38], rax
        mov      rsi, r15
        mov      qword ptr [rbp-0x40], rsi
        movsxd   rdx, edx
        add      rdx, rsi
        mov      qword ptr [rbp-0x48], rdx
        xor      r8d, r8d
        xor      r10d, r10d
        test     r9, r9
        je       SHORT G_M1603_IG06
 						;; size=46 bbWeight=1 PerfScore 7.50
 G_M1603_IG05:
        mov      r8d, dword ptr [r9+0x34]
        mov      dword ptr [rbp-0x4C], r8d
        mov      r10d, dword ptr [r9+0x30]
        mov      dword ptr [rbp-0x50], r10d
        mov      rdi, r13
        mov      r10, 0xD1FFAB1E      ; code for System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        call     [r10]System.Text.Decoder:get_FallbackBuffer():System.Text.DecoderFallbackBuffer:this
        jmp      SHORT G_M1603_IG07
        align    [0 bytes for IG28]
 						;; size=34 bbWeight=0.50 PerfScore 5.75
 G_M1603_IG06:
        mov      dword ptr [rbp-0x50], r10d
        mov      dword ptr [rbp-0x4C], r8d
        mov      rdi, gword ptr [r14+0x18]
        mov      r9, qword ptr [rdi]
        mov      r9, qword ptr [r9+0x40]
        call     [r9+0x20]System.Text.DecoderFallback:CreateFallbackBuffer():System.Text.DecoderFallbackBuffer:this
 						;; size=23 bbWeight=0.50 PerfScore 5.50
 G_M1603_IG07:
        mov      rcx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x18], rcx
        mov      gword ptr [rbp-0x68], rax
        mov      rdi, qword ptr [rbp-0x60]
        mov      qword ptr [rax+0x20], rdi
        mov      rdx, qword ptr [rbp-0x48]
        cmp      rcx, rdx
        jae      SHORT G_M1603_IG10
 						;; size=29 bbWeight=1 PerfScore 7.25
 G_M1603_IG08:
        movzx    rdi, byte  ptr [r14+0x27]
        test     edi, edi
        je       SHORT G_M1603_IG11
 						;; size=9 bbWeight=4 PerfScore 13.00
 G_M1603_IG09:
        mov      r10d, dword ptr [rbp-0x50]
        shl      r10d, 8
        lea      rsi, [r15+0x01]
        mov      r8, rsi
        movzx    rsi, byte  ptr [r15]
        add      r10d, esi
        jmp      SHORT G_M1603_IG12
 						;; size=24 bbWeight=2 PerfScore 13.00
 G_M1603_IG10:
        mov      qword ptr [rbp-0x30], r15
        mov      r15d, dword ptr [rbp-0x4C]
        jmp      G_M1603_IG24
 						;; size=13 bbWeight=0.50 PerfScore 2.00
 G_M1603_IG11:
        mov      r10d, dword ptr [rbp-0x50]
        shr      r10d, 8
        mov      rsi, r15
        lea      r15, [rsi+0x01]
        mov      qword ptr [rbp-0x30], r15
        movzx    rsi, byte  ptr [rsi]
        shl      esi, 24
        add      r10d, esi
        mov      r8, qword ptr [rbp-0x30]
 						;; size=33 bbWeight=2 PerfScore 14.00
 G_M1603_IG12:
        mov      r15d, dword ptr [rbp-0x4C]
        inc      r15d
        cmp      r15d, 4
        jl       SHORT G_M1603_IG15
 						;; size=13 bbWeight=4 PerfScore 10.00
 G_M1603_IG13:
        xor      r15d, r15d
        cmp      r10d, 0xD1FFAB1E
        ja       SHORT G_M1603_IG14
        cmp      r10d, 0xD800
        jb       SHORT G_M1603_IG16
        mov      dword ptr [rbp-0x50], r10d
        cmp      r10d, 0xDFFF
        mov      r10d, dword ptr [rbp-0x50]
        ja       SHORT G_M1603_IG16
 						;; size=38 bbWeight=2 PerfScore 12.00
 G_M1603_IG14:
        test     edi, edi
        je       G_M1603_IG31
        mov      dword ptr [rbp-0x50], r10d
        mov      qword ptr [rbp-0x30], r8
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 4
        call     CORINFO_HELP_NEWARR_1_VC
        mov      rsi, rax
        mov      eax, dword ptr [rbp-0x50]
        mov      edi, eax
        shr      edi, 24
        mov      byte  ptr [rsi+0x10], dil
        mov      edi, eax
        shr      edi, 16
        mov      byte  ptr [rsi+0x11], dil
        mov      edi, eax
        shr      edi, 8
        mov      byte  ptr [rsi+0x12], dil
        mov      byte  ptr [rsi+0x13], al
        jmp      G_M1603_IG32
 						;; size=77 bbWeight=2 PerfScore 28.50
 G_M1603_IG15:
        mov      dword ptr [rbp-0x50], r10d
        mov      r9, qword ptr [rbp-0x38]
        jmp      G_M1603_IG23
 						;; size=13 bbWeight=2 PerfScore 8.00
 G_M1603_IG16:
        cmp      r10d, 0x10000
        jb       SHORT G_M1603_IG19
 						;; size=9 bbWeight=16 PerfScore 20.00
 G_M1603_IG17:
        mov      r9, qword ptr [rbp-0x38]
        mov      rsi, r9
        sub      rsi, rbx
        mov      rdi, rsi
        shr      rdi, 63
        add      rsi, rdi
        sar      rsi, 1
        cmp      rsi, 2
        jge      SHORT G_M1603_IG20
 						;; size=29 bbWeight=8 PerfScore 34.00
 G_M1603_IG18:
        add      r8, -4
        xor      r10d, r10d
        mov      dword ptr [rbp-0x50], r10d
        mov      qword ptr [rbp-0x30], r8
        jmp      G_M1603_IG35
 						;; size=20 bbWeight=0.50 PerfScore 2.25
 G_M1603_IG19:
        mov      r9, qword ptr [rbp-0x38]
        cmp      rbx, r9
        jae      SHORT G_M1603_IG18
        jmp      SHORT G_M1603_IG21
 						;; size=11 bbWeight=8 PerfScore 34.00
 G_M1603_IG20:
        lea      rsi, [rbx+0x02]
        mov      r11, rsi
        add      r10d, -0x10000
        mov      esi, r10d
        shr      esi, 10
        add      esi, 0xD800
        mov      word  ptr [rbx], si
        and      r10d, 0x3FF
        add      r10d, 0xDC00
        movzx    r10, r10w
        mov      ebx, r10d
        mov      r10d, ebx
        mov      rbx, r11
 						;; size=56 bbWeight=8 PerfScore 36.00
 G_M1603_IG21:
        mov      rsi, rbx
        lea      rbx, [rsi+0x02]
        mov      word  ptr [rsi], r10w
 						;; size=11 bbWeight=16 PerfScore 28.00
 G_M1603_IG22:
        xor      r10d, r10d
        mov      dword ptr [rbp-0x50], r10d
 						;; size=7 bbWeight=8 PerfScore 10.00
 G_M1603_IG23:
        mov      qword ptr [rbp-0x30], r8
        mov      rdx, qword ptr [rbp-0x48]
        cmp      r8, rdx
        jb       SHORT G_M1603_IG27
 						;; size=13 bbWeight=4 PerfScore 13.00
 G_M1603_IG24:
        test     r15d, r15d
        jle      G_M1603_IG39
 						;; size=9 bbWeight=1 PerfScore 1.25
 G_M1603_IG25:
        test     r13, r13
        je       SHORT G_M1603_IG26
        cmp      byte  ptr [r13+0x2C], 0
        je       G_M1603_IG39
 						;; size=16 bbWeight=0.50 PerfScore 2.62
 G_M1603_IG26:
        movsxd   rsi, r15d
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      ecx, r15d
        cmp      byte  ptr [r14+0x27], 0
        je       G_M1603_IG37
        jmp      SHORT G_M1603_IG29
 						;; size=34 bbWeight=0.50 PerfScore 3.88
 G_M1603_IG27:
        mov      dword ptr [rbp-0x4C], r15d
        mov      r15, qword ptr [rbp-0x30]
        jmp      G_M1603_IG08
 						;; size=13 bbWeight=2 PerfScore 8.00
 G_M1603_IG28:
        dec      ecx
        cmp      ecx, dword ptr [rax+0x08]
        jae      G_M1603_IG44
        mov      edi, ecx
        mov      r8d, dword ptr [rbp-0x50]
        mov      byte  ptr [rax+rdi+0x10], r8b
        shr      r8d, 8
        mov      dword ptr [rbp-0x50], r8d
 						;; size=30 bbWeight=4 PerfScore 32.00
 G_M1603_IG29:
        test     ecx, ecx
        jg       SHORT G_M1603_IG28
 						;; size=4 bbWeight=4 PerfScore 5.00
 G_M1603_IG30:
        mov      qword ptr [rbp-0x58], rbx
        lea      rcx, [rbp-0x58]
        mov      rdi, gword ptr [rbp-0x68]
        mov      rsi, rax
        mov      rdx, qword ptr [rbp-0x30]
-       mov      gword ptr [rbp-0x68], rdi
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x58]
        test     eax, eax
        jne      G_M1603_IG38
        xor      edi, edi
        mov      rax, gword ptr [rbp-0x68]
        mov      qword ptr [rax+0x18], rdi
        mov      rdi, rax
        mov      rax, qword ptr [rax]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.DecoderFallbackBuffer:Reset():this
        cmp      rbx, r12
        sete     dl
        movzx    rdx, dl
        mov      rdi, r14
        mov      rsi, r13
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        call     [rax]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        jmp      G_M1603_IG39
-						;; size=99 bbWeight=0.50 PerfScore 15.38
+						;; size=97 bbWeight=0.50 PerfScore 13.00
 G_M1603_IG31:
        mov      dword ptr [rbp-0x50], r10d
        mov      qword ptr [rbp-0x30], r8
        mov      rdi, 0xD1FFAB1E      ; ubyte[]
        mov      esi, 4
        call     CORINFO_HELP_NEWARR_1_VC
        mov      rsi, rax
        mov      eax, dword ptr [rbp-0x50]
        mov      byte  ptr [rsi+0x10], al
        mov      ecx, eax
        shr      ecx, 8
        mov      byte  ptr [rsi+0x11], cl
        mov      ecx, eax
        shr      ecx, 16
        mov      byte  ptr [rsi+0x12], cl
        mov      ecx, eax
        shr      ecx, 24
        mov      byte  ptr [rsi+0x13], cl
 						;; size=61 bbWeight=2 PerfScore 22.00
 G_M1603_IG32:
        mov      qword ptr [rbp-0x58], rbx
        lea      rcx, [rbp-0x58]
        mov      rdi, gword ptr [rbp-0x68]
        mov      rdx, qword ptr [rbp-0x30]
-       mov      gword ptr [rbp-0x68], rdi
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       mov      rax, 0xD1FFAB1E      ; code for System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x58]
        test     eax, eax
        mov      r8, qword ptr [rbp-0x30]
        mov      r9, qword ptr [rbp-0x38]
        jne      G_M1603_IG22
-						;; size=50 bbWeight=2 PerfScore 31.50
+						;; size=48 bbWeight=2 PerfScore 22.00
 G_M1603_IG33:
        add      r8, -4
        mov      qword ptr [rbp-0x30], r8
        xor      edi, edi
        mov      dword ptr [rbp-0x50], edi
 						;; size=13 bbWeight=0.50 PerfScore 1.25
 G_M1603_IG34:
        mov      rax, gword ptr [rbp-0x68]
        mov      qword ptr [rax+0x18], rdi
        mov      rdi, rax
        mov      gword ptr [rbp-0x68], rax
        mov      rsi, qword ptr [rax]
        mov      rsi, qword ptr [rsi+0x48]
        call     [rsi]System.Text.DecoderFallbackBuffer:Reset():this
 						;; size=24 bbWeight=0.50 PerfScore 5.12
 G_M1603_IG35:
        cmp      rbx, r12
        sete     dl
        movzx    rdx, dl
        mov      rdi, r14
        mov      rsi, r13
        mov      r9, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        call     [r9]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        jmp      G_M1603_IG24
 						;; size=33 bbWeight=0.50 PerfScore 3.62
 G_M1603_IG36:
        dec      ecx
        cmp      ecx, dword ptr [rax+0x08]
        jae      SHORT G_M1603_IG44
        mov      esi, ecx
        mov      edi, dword ptr [rbp-0x50]
        mov      edx, edi
        shr      edx, 24
        mov      byte  ptr [rax+rsi+0x10], dl
        shl      edi, 8
        mov      dword ptr [rbp-0x50], edi
 						;; size=27 bbWeight=2 PerfScore 17.50
 G_M1603_IG37:
        test     ecx, ecx
        jg       SHORT G_M1603_IG36
        jmp      G_M1603_IG30
 						;; size=9 bbWeight=4 PerfScore 13.00
 G_M1603_IG38:
        xor      r15d, r15d
        xor      edi, edi
        xor      r14d, r14d
        mov      dword ptr [rbp-0x50], r14d
 						;; size=12 bbWeight=0.50 PerfScore 0.88
 G_M1603_IG39:
        test     r13, r13
        je       SHORT G_M1603_IG41
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M1603_IG40:
        mov      r10d, dword ptr [rbp-0x50]
        mov      dword ptr [r13+0x30], r10d
        mov      dword ptr [r13+0x34], r15d
        mov      r8, qword ptr [rbp-0x30]
        mov      rax, r8
        sub      rax, qword ptr [rbp-0x40]
        mov      dword ptr [r13+0x20], eax
 						;; size=27 bbWeight=0.50 PerfScore 3.62
 G_M1603_IG41:
        mov      rax, rbx
        sub      rax, r12
        mov      rsi, rax
        shr      rsi, 63
        add      rax, rsi
        sar      rax, 1
 						;; size=19 bbWeight=1 PerfScore 2.00
 G_M1603_IG42:
        add      rsp, 72
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M1603_IG43:
        mov      rsi, r9
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_CHKCASTCLASS
        call     [rax]CORINFO_HELP_CHKCASTCLASS
        int3     
 						;; size=16 bbWeight=0 PerfScore 0.00
 G_M1603_IG44:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1086, prolog size 28, PerfScore 489.00, instruction count 302, allocated bytes for code 1086 (MethodHash=c5d2f9bc) for method System.Text.UTF32Encoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this (FullOpts)
+; Total bytes of code 1082, prolog size 28, PerfScore 477.12, instruction count 298, allocated bytes for code 1082 (MethodHash=c5d2f9bc) for method System.Text.UTF32Encoding:GetChars(ulong,int,ulong,int,System.Text.DecoderNLS):int:this (FullOpts)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment