Skip to content

Instantly share code, notes, and snippets.

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

Top method regressions

8 (0.43 % of base) - System.Text.UnicodeEncoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this
 ; Assembly listing for method System.Text.UnicodeEncoding: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
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 8 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T17] ( 13, 44   )     ref  ->  r13         this class-hnd single-def <System.Text.UnicodeEncoding>
 ;  V01 arg1         [V01,T02] ( 29,134.50)    long  ->  rbx        
 ;  V02 arg2         [V02,T40] (  3,  3   )     int  ->  rdx         single-def
 ;  V03 arg3         [V03,T03] ( 28,111   )    long  ->  r15        
 ;  V04 arg4         [V04,T41] (  3,  3   )     int  ->   r8         single-def
 ;  V05 arg5         [V05,T05] ( 28,101   )     ref  ->  r14         class-hnd single-def <System.Text.EncoderNLS>
 ;  V06 loc0         [V06,T04] ( 20,112   )  ushort  ->  registers  
 ;  V07 loc1         [V07,T06] ( 11, 96   )  ushort  ->  [rbp-0x2C] 
 ;  V08 loc2         [V08,T31] (  3,  9   )   ubyte  ->  [rbp-0x30] 
 ;  V09 loc3         [V09,T24] (  4, 13   )    long  ->  [rbp-0x38]  spill-single-def
 ;  V10 loc4         [V10,T10] (  9, 51   )    long  ->  [rbp-0x40]  spill-single-def
 ;  V11 loc5         [V11,T25] (  4, 12   )    long  ->  [rbp-0x48]  spill-single-def
 ;  V12 loc6         [V12,T20] (  7, 31.50)    long  ->  [rbp-0x50]  spill-single-def
-;  V13 loc7         [V13,T00] ( 59,400.50)     ref  ->  [rbp-0x68]  class-hnd <System.Text.EncoderFallbackBuffer>
+;  V13 loc7         [V13,T00] ( 56,380.50)     ref  ->  [rbp-0x68]  class-hnd <System.Text.EncoderFallbackBuffer>
 ;  V14 loc8         [V14    ] (  9, 60   )    long  ->  [rbp-0x58]  do-not-enreg[X] addr-exposed ld-addr-op
 ;  V15 loc9         [V15,T23] (  3, 20   )    long  ->  rdx        
 ;  V16 loc10        [V16,T07] (  7, 70   )    long  ->  rdi        
 ;  V17 loc11        [V17,T09] (  5, 52   )    long  ->  r15        
 ;  V18 loc12        [V18,T18] (  5, 40   )    long  ->  rax        
 ;# V19 OutArgs      [V19    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V20 tmp1         [V20,T01] (  4,144   )     int  ->  registers  
 ;  V21 tmp2         [V21,T33] (  2,  8   )    long  ->  rdi         "impSpillLclRefs"
 ;  V22 tmp3         [V22,T28] (  3, 12   )    long  ->  rdx         "impSpillLclRefs"
 ;  V23 tmp4         [V23,T34] (  2,  8   )    long  ->  rdi         "impSpillLclRefs"
 ;  V24 tmp5         [V24,T29] (  3, 12   )    long  ->  rdx         "impSpillLclRefs"
 ;  V25 tmp6         [V25,T35] (  3,  6   )     ref  ->  rax        
 ;  V26 tmp7         [V26,T44] (  3,  0   )     ref  ->  r13         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V27 tmp8         [V27,T49] (  2,  0   )     ref  ->  r14         class-hnd exact "impImportAndPushBox" <System.String>
 ;  V28 tmp9         [V28,T45] (  3,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.ArgumentException>
 ;  V29 tmp10        [V29,T19] (  3, 32   )     ref  ->  rax        
 ;  V30 tmp11        [V30,T13] (  3, 48   )    long  ->  rdx         "impSpillLclRefs"
 ;  V31 tmp12        [V31,T14] (  3, 48   )    long  ->  rdx         "impSpillLclRefs"
 ;  V32 tmp13        [V32,T15] (  3, 48   )    long  ->  rdx         "impSpillLclRefs"
 ;  V33 tmp14        [V33,T16] (  3, 48   )    long  ->  rdx         "impSpillLclRefs"
 ;  V34 tmp15        [V34,T22] (  3, 24   )     ref  ->  rax        
 ;  V35 tmp16        [V35,T36] (  3,  6   )     ref  ->  rax        
 ;* V36 tmp17        [V36    ] (  0,  0   )    long  ->  zero-ref   
 ;  V37 tmp18        [V37,T42] (  2,  4   )    long  ->  rdx        
 ;  V38 tmp19        [V38,T37] (  3,  6   )    long  ->  rdi        
 ;* V39 tmp20        [V39    ] (  0,  0   )    long  ->  zero-ref   
 ;  V40 tmp21        [V40,T50] (  2,  0   )     ref  ->  rbx         class-hnd exact single-def "non-inline candidate call" <System.String>
 ;  V41 tmp22        [V41,T51] (  2,  0   )     ref  ->  r15         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V42 tmp23        [V42,T46] (  3,  0   )     ref  ->  rdi         class-hnd single-def "dup spill" <System.Text.EncoderFallback>
 ;* V43 tmp24        [V43    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V44 tmp25        [V44    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V45 tmp26        [V45    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V46 tmp27        [V46    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V47 tmp28        [V47    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;  V48 tmp29        [V48,T47] (  3,  0   )     ref  ->  r14        
 ;  V49 tmp30        [V49,T48] (  3,  0   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
 ;  V50 tmp31        [V50,T11] (  3, 48   )     ref  ->  rdi         "argument with side effect"
 ;  V51 tmp32        [V51,T12] (  3, 48   )     ref  ->  rdi         "argument with side effect"
 ;  V52 tmp33        [V52,T26] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V53 tmp34        [V53,T27] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V54 tmp35        [V54,T52] (  2,  0   )     ref  ->  r15         "argument with side effect"
 ;  V55 tmp36        [V55,T53] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V56 tmp37        [V56,T54] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V57 cse0         [V57,T38] (  3,  6   )    long  ->  rdi         "CSE #02: conservative"
 ;  V58 cse1         [V58,T21] (  5, 28   )    long  ->  [rbp-0x60]  multi-def "CSE #11: moderate"
 ;  V59 cse2         [V59,T39] (  3,  6   )    long  ->  rsi         "CSE #04: conservative"
 ;  V60 cse3         [V60,T08] (  5, 64   )    long  ->  rsi         "CSE #05: moderate"
 ;  V61 cse4         [V61,T32] (  4,  8   )    long  ->  rdx         "CSE #16: moderate"
 ;  V62 rat0         [V62,T30] (  3, 12   )    long  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
 ;  V63 rat1         [V63,T43] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 72
 
 G_M43362_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 72
        lea      rbp, [rsp+0x70]
        mov      r13, rdi
        mov      rbx, rsi
        mov      r15, rcx
        mov      r14, r9
 						;; size=31 bbWeight=1 PerfScore 7.75
 G_M43362_IG02:
        xor      r12d, r12d
        xor      eax, eax
        mov      dword ptr [rbp-0x30], eax
        movsxd   rcx, r8d
        add      rcx, r15
        mov      qword ptr [rbp-0x38], rcx
        movsxd   rdi, edx
        lea      rdx, [rbx+2*rdi]
        mov      qword ptr [rbp-0x40], rdx
        mov      qword ptr [rbp-0x48], r15
        mov      qword ptr [rbp-0x50], rbx
        xor      r9, r9
        test     r14, r14
        je       SHORT G_M43362_IG04
 						;; size=45 bbWeight=1 PerfScore 8.25
 G_M43362_IG03:
        movzx    r12, word  ptr [r14+0x24]
        cmp      gword ptr [r14+0x10], 0
        mov      rax, r9
        je       G_M43362_IG07
        mov      rdi, r14
        mov      r9, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [r9]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      r9, rax
        mov      rdi, r9
        mov      gword ptr [rbp-0x68], r9
        mov      rax, qword ptr [r9]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.EncoderFallbackBuffer:get_Remaining():int:this
        test     eax, eax
        jle      SHORT G_M43362_IG05
        cmp      byte  ptr [r14+0x27], 0
        je       SHORT G_M43362_IG05
        jmp      G_M43362_IG61
 						;; size=70 bbWeight=0.50 PerfScore 12.75
 G_M43362_IG04:
        mov      rax, r9
        jmp      SHORT G_M43362_IG07
        align    [0 bytes for IG26]
 						;; size=5 bbWeight=0.50 PerfScore 1.12
 G_M43362_IG05:
        mov      rax, gword ptr [rbp-0x68]
        mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
        mov      rdx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x20], rdx
        mov      gword ptr [rbp-0x68], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x68]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edi, edi
        mov      dword ptr [rax+0x28], edi
        jmp      SHORT G_M43362_IG07
 						;; size=57 bbWeight=2 PerfScore 28.00
 G_M43362_IG06:
        mov      qword ptr [rbp-0x58], rbx
        lea      rdx, [rbp-0x58]
+       mov      gword ptr [rbp-0x68], rax
        mov      rdi, rax
        mov      esi, ecx
-       mov      gword ptr [rbp-0x68], rax
-       mov      rcx, qword ptr [rax]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x58]
        mov      rax, gword ptr [rbp-0x68]
-						;; size=35 bbWeight=8 PerfScore 96.00
+						;; size=39 bbWeight=8 PerfScore 90.00
 G_M43362_IG07:
        test     rax, rax
        je       SHORT G_M43362_IG09
 						;; size=5 bbWeight=64 PerfScore 80.00
 G_M43362_IG08:
        mov      gword ptr [rbp-0x68], rax
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rcx]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        jmp      SHORT G_M43362_IG10
 						;; size=21 bbWeight=8 PerfScore 52.00
 G_M43362_IG09:
        xor      edi, edi
        mov      gword ptr [rbp-0x68], rax
        mov      eax, edi
 						;; size=8 bbWeight=8 PerfScore 12.00
 G_M43362_IG10:
        movzx    rcx, ax
        test     eax, eax
        jne      SHORT G_M43362_IG20
 						;; size=7 bbWeight=64 PerfScore 96.00
 G_M43362_IG11:
        cmp      rbx, qword ptr [rbp-0x40]
        jb       SHORT G_M43362_IG20
 						;; size=6 bbWeight=16 PerfScore 48.00
 G_M43362_IG12:
        test     r12d, r12d
        jle      SHORT G_M43362_IG17
 						;; size=5 bbWeight=2 PerfScore 2.50
 G_M43362_IG13:
        test     r14, r14
        je       SHORT G_M43362_IG15
 						;; size=5 bbWeight=4 PerfScore 5.00
 G_M43362_IG14:
        cmp      byte  ptr [r14+0x26], 0
        je       SHORT G_M43362_IG16
 						;; size=7 bbWeight=2 PerfScore 8.00
 G_M43362_IG15:
        cmp      dword ptr [rbp-0x30], 0
        je       SHORT G_M43362_IG18
        jmp      G_M43362_IG60
 						;; size=11 bbWeight=4 PerfScore 20.00
 G_M43362_IG16:
        mov      r13d, r12d
        mov      r12, qword ptr [rbp-0x48]
        jmp      G_M43362_IG38
 						;; size=12 bbWeight=1 PerfScore 3.25
 G_M43362_IG17:
        mov      r13d, r12d
        mov      r12, qword ptr [rbp-0x48]
        jmp      G_M43362_IG38
 						;; size=12 bbWeight=1 PerfScore 3.25
 G_M43362_IG18:
        mov      rdx, gword ptr [rbp-0x68]
        test     rdx, rdx
        mov      gword ptr [rbp-0x68], rdx
        jne      G_M43362_IG59
 						;; size=17 bbWeight=4 PerfScore 13.00
 G_M43362_IG19:
        test     r14, r14
        je       G_M43362_IG57
        mov      rdi, r14
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rcx]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M43362_IG58
 						;; size=29 bbWeight=2 PerfScore 13.50
 G_M43362_IG20:
        test     ecx, ecx
        jne      SHORT G_M43362_IG22
        movzx    rcx, byte  ptr [r13+0x26]
        xor      ecx, 1
        je       SHORT G_M43362_IG21
        mov      edi, ebx
        and      edi, 7
        or       edi, r12d
        je       SHORT G_M43362_IG23
 						;; size=24 bbWeight=2 PerfScore 12.50
 G_M43362_IG21:
        movzx    rcx, word  ptr [rbx]
        mov      eax, ecx
        add      rbx, 2
        mov      ecx, eax
 						;; size=11 bbWeight=2 PerfScore 5.50
 G_M43362_IG22:
        mov      edi, ecx
        sub      edi, 0xD800
        cmp      edi, 0x7FF
        ja       G_M43362_IG47
        cmp      ecx, 0xDBFF
        jg       G_M43362_IG31
        test     r12d, r12d
        jle      G_M43362_IG44
        add      rbx, -2
        mov      rax, gword ptr [rbp-0x68]
        test     rax, rax
        jne      G_M43362_IG56
        test     r14, r14
        je       G_M43362_IG45
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rax]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M43362_IG46
 						;; size=87 bbWeight=2 PerfScore 27.00
 G_M43362_IG23:
        lea      rdx, [rbx-0x06]
        mov      rcx, qword ptr [rbp-0x40]
        mov      rdi, rcx
        sub      rdi, rbx
        mov      rsi, rdi
        shr      rsi, 63
        add      rdi, rsi
        sar      rdi, 1
        mov      r8, qword ptr [rbp-0x38]
        mov      rsi, r8
        sub      rsi, r15
        sar      rsi, 1
        cmp      rdi, rsi
        jg       SHORT G_M43362_IG24
        jmp      SHORT G_M43362_IG25
 						;; size=47 bbWeight=2 PerfScore 17.50
 G_M43362_IG24:
        mov      rdi, rsi
 						;; size=3 bbWeight=2 PerfScore 0.50
 G_M43362_IG25:
        lea      rdx, [rdx+2*rdi]
        mov      rdi, rbx
        cmp      rdi, rdx
        jae      G_M43362_IG30
 						;; size=16 bbWeight=2 PerfScore 4.00
 G_M43362_IG26:
        mov      rsi, qword ptr [rdi]
        mov      rax, 0xD1FFAB1E
        test     rsi, rax
        je       SHORT G_M43362_IG29
 						;; size=18 bbWeight=16 PerfScore 56.00
 G_M43362_IG27:
        mov      rax, 0xD1FFAB1E
        and      rax, rsi
        mov      r9, 0xD1FFAB1E
        xor      rax, r9
        mov      r9, 0xD1FFAB1E
        test     rax, r9
        je       SHORT G_M43362_IG28
        mov      r9, 0xD1FFAB1E
        test     rax, r9
        je       SHORT G_M43362_IG28
        test     eax, -0x10000
        je       SHORT G_M43362_IG28
        movzx    rax, ax
        test     eax, eax
        jne      SHORT G_M43362_IG29
 						;; size=70 bbWeight=8 PerfScore 54.00
 G_M43362_IG28:
        mov      rax, 0xD1FFAB1E
        and      rax, rsi
        mov      r9, 0xD1FFAB1E
        cmp      rax, r9
        jne      SHORT G_M43362_IG30
 						;; size=28 bbWeight=8 PerfScore 16.00
 G_M43362_IG29:
        mov      qword ptr [r15], rsi
        add      rdi, 8
        add      r15, 8
        cmp      rdi, rdx
        jb       G_M43362_IG26
 						;; size=20 bbWeight=16 PerfScore 44.00
 G_M43362_IG30:
        mov      rbx, rdi
        cmp      rbx, rcx
        jae      G_M43362_IG12
        jmp      G_M43362_IG21
 						;; size=17 bbWeight=2 PerfScore 7.00
 G_M43362_IG31:
        test     r12d, r12d
        jne      SHORT G_M43362_IG32
        mov      rax, gword ptr [rbp-0x68]
        test     rax, rax
        jne      G_M43362_IG06
        test     r14, r14
        je       G_M43362_IG42
        mov      dword ptr [rbp-0x2C], ecx
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rax]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M43362_IG43
 						;; size=50 bbWeight=8 PerfScore 90.00
 G_M43362_IG32:
        lea      rdi, [r15+0x03]
        cmp      rdi, qword ptr [rbp-0x38]
        jb       SHORT G_M43362_IG33
        mov      r12, gword ptr [rbp-0x68]
        test     r12, r12
        je       SHORT G_M43362_IG36
        cmp      byte  ptr [r12+0x32], 0
        je       SHORT G_M43362_IG36
        mov      rdi, r12
        mov      rax, qword ptr [r12]
        mov      rax, qword ptr [rax+0x40]
        mov      qword ptr [rbp-0x60], rax
        call     [rax+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        mov      rdi, r12
        mov      r12, qword ptr [rbp-0x60]
        call     [r12+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        jmp      SHORT G_M43362_IG37
 						;; size=59 bbWeight=8 PerfScore 194.00
 G_M43362_IG33:
        cmp      byte  ptr [r13+0x26], 0
        je       SHORT G_M43362_IG34
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        mov      edi, r12d
        sar      edi, 8
        mov      byte  ptr [rdx], dil
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        mov      byte  ptr [rdx], r12b
        jmp      SHORT G_M43362_IG35
 						;; size=35 bbWeight=8 PerfScore 82.00
 G_M43362_IG34:
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        mov      byte  ptr [rdx], r12b
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        sar      r12d, 8
        mov      byte  ptr [rdx], r12b
 						;; size=24 bbWeight=8 PerfScore 32.00
 G_M43362_IG35:
        xor      r12d, r12d
        jmp      G_M43362_IG49
 						;; size=8 bbWeight=8 PerfScore 18.00
 G_M43362_IG36:
        add      rbx, -4
 						;; size=4 bbWeight=8 PerfScore 2.00
 G_M43362_IG37:
        mov      r12, qword ptr [rbp-0x48]
        cmp      r15, r12
        sete     dl
        movzx    rdx, dl
        mov      rdi, r13
        mov      rsi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        call     [rax]System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        xor      eax, eax
        xor      r13d, r13d
 						;; size=36 bbWeight=8 PerfScore 54.00
 G_M43362_IG38:
        test     r14, r14
        je       SHORT G_M43362_IG40
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M43362_IG39:
        mov      word  ptr [r14+0x24], r13w
        mov      rax, rbx
        sub      rax, qword ptr [rbp-0x50]
        mov      rdi, rax
        shr      rdi, 63
        add      rax, rdi
        sar      rax, 1
        mov      dword ptr [r14+0x20], eax
 						;; size=29 bbWeight=0.50 PerfScore 2.88
 G_M43362_IG40:
        mov      rax, r15
        sub      rax, r12
 						;; size=6 bbWeight=1 PerfScore 0.50
 G_M43362_IG41:
        add      rsp, 72
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M43362_IG42:
        mov      dword ptr [rbp-0x2C], ecx
        mov      rdi, gword ptr [r13+0x10]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=17 bbWeight=8 PerfScore 80.00
 G_M43362_IG43:
        mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
        mov      rdx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x20], rdx
        mov      gword ptr [rbp-0x68], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x68]
        mov      word  ptr [rax+0x30], 1
        mov      byte  ptr [rax+0x32], 0
        xor      edi, edi
        mov      dword ptr [rax+0x28], edi
        mov      ecx, dword ptr [rbp-0x2C]
        jmp      G_M43362_IG06
 						;; size=59 bbWeight=8 PerfScore 112.00
 G_M43362_IG44:
        mov      r12d, ecx
        mov      rax, gword ptr [rbp-0x68]
        jmp      G_M43362_IG07
 						;; size=12 bbWeight=8 PerfScore 26.00
 G_M43362_IG45:
        mov      rdi, gword ptr [r13+0x10]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M43362_IG46:
        mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
        mov      rdx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x20], rdx
        mov      gword ptr [rbp-0x68], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x68]
        mov      word  ptr [rax+0x30], 1
        mov      byte  ptr [rax+0x32], 0
        xor      edi, edi
        mov      dword ptr [rax+0x28], edi
        jmp      G_M43362_IG56
 						;; size=56 bbWeight=2 PerfScore 26.00
 G_M43362_IG47:
        test     r12d, r12d
        jle      SHORT G_M43362_IG49
        add      rbx, -2
        mov      rax, gword ptr [rbp-0x68]
        test     rax, rax
        jne      G_M43362_IG56
        test     r14, r14
        je       G_M43362_IG54
 						;; size=31 bbWeight=16 PerfScore 80.00
 G_M43362_IG48:
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rax]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M43362_IG55
 						;; size=20 bbWeight=8 PerfScore 44.00
 G_M43362_IG49:
        lea      rdx, [r15+0x01]
        mov      rsi, qword ptr [rbp-0x38]
        cmp      rdx, rsi
        jb       SHORT G_M43362_IG50
        mov      rax, gword ptr [rbp-0x68]
        test     rax, rax
        je       SHORT G_M43362_IG52
        cmp      byte  ptr [rax+0x32], 0
        je       SHORT G_M43362_IG52
        mov      rdi, rax
        mov      gword ptr [rbp-0x68], rax
        mov      rcx, qword ptr [rax]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x38]System.Text.EncoderFallbackBuffer:MovePrevious():ubyte:this
        jmp      SHORT G_M43362_IG53
 						;; size=47 bbWeight=2 PerfScore 38.50
 G_M43362_IG50:
        cmp      byte  ptr [r13+0x26], 0
        je       SHORT G_M43362_IG51
        mov      rdi, r15
        mov      r15, rdx
        mov      edx, ecx
        sar      edx, 8
        mov      byte  ptr [rdi], dl
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        mov      byte  ptr [rdx], cl
        mov      rax, gword ptr [rbp-0x68]
        jmp      G_M43362_IG07
 						;; size=38 bbWeight=2 PerfScore 22.00
 G_M43362_IG51:
        mov      rdi, r15
        mov      r15, rdx
        mov      byte  ptr [rdi], cl
        mov      rdx, r15
        lea      r15, [rdx+0x01]
        mov      edi, ecx
        sar      edi, 8
        mov      byte  ptr [rdx], dil
        mov      rax, gword ptr [rbp-0x68]
        jmp      G_M43362_IG07
 						;; size=32 bbWeight=2 PerfScore 14.00
 G_M43362_IG52:
        add      rbx, -2
        mov      gword ptr [rbp-0x68], rax
 						;; size=8 bbWeight=2 PerfScore 2.50
 G_M43362_IG53:
        cmp      r15, qword ptr [rbp-0x48]
        sete     dl
        movzx    rdx, dl
        mov      rdi, r13
        mov      rsi, r14
        mov      r8, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        call     [r8]System.Text.Encoding:ThrowBytesOverflow(System.Text.EncoderNLS,ubyte):this
        jmp      G_M43362_IG12
 						;; size=34 bbWeight=2 PerfScore 18.00
 G_M43362_IG54:
        mov      rdi, gword ptr [r13+0x10]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=14 bbWeight=8 PerfScore 72.00
 G_M43362_IG55:
        mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
        mov      rdx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x20], rdx
        mov      gword ptr [rbp-0x68], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x68]
        mov      word  ptr [rax+0x30], 1
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      dword ptr [rax+0x28], edx
 						;; size=51 bbWeight=16 PerfScore 176.00
 G_M43362_IG56:
        mov      qword ptr [rbp-0x58], rbx
        lea      rdx, [rbp-0x58]
+       mov      gword ptr [rbp-0x68], rax
        mov      rdi, rax
        mov      esi, r12d
-       mov      gword ptr [rbp-0x68], rax
-       mov      rcx, qword ptr [rax]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x58]
        xor      r12d, r12d
        mov      rax, gword ptr [rbp-0x68]
        jmp      G_M43362_IG07
-						;; size=44 bbWeight=8 PerfScore 114.00
+						;; size=48 bbWeight=8 PerfScore 108.00
 G_M43362_IG57:
        mov      rdi, gword ptr [r13+0x10]
        mov      rcx, qword ptr [rdi]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M43362_IG58:
        mov      rcx, qword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], rcx
        mov      rdx, qword ptr [rbp-0x40]
        mov      qword ptr [rax+0x20], rdx
        mov      gword ptr [rbp-0x68], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r14
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x68]
        mov      word  ptr [rax+0x30], 1
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      gword ptr [rbp-0x68], rax
        mov      dword ptr [rax+0x28], edx
 						;; size=55 bbWeight=2 PerfScore 24.00
 G_M43362_IG59:
        mov      qword ptr [rbp-0x58], rbx
        lea      rdx, [rbp-0x58]
        mov      rdi, gword ptr [rbp-0x68]
        mov      esi, r12d
-       mov      gword ptr [rbp-0x68], rdi
-       mov      rcx, qword ptr [rdi]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x58]
        xor      r12d, r12d
        mov      edi, 1
        mov      dword ptr [rbp-0x30], edi
        mov      rax, gword ptr [rbp-0x68]
        jmp      G_M43362_IG07
-						;; size=53 bbWeight=4 PerfScore 65.00
+						;; size=53 bbWeight=4 PerfScore 58.00
 G_M43362_IG60:
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Argument_RecursiveFallback():System.String
        call     [rax]System.SR:get_Argument_RecursiveFallback():System.String
        mov      r14, rax
        mov      word  ptr [r13+0x08], r12w
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rsi, r13
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object):System.String
        mov      r15, rax
        mov      edi, 0x133E6
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=127 bbWeight=0 PerfScore 0.00
 G_M43362_IG61:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        call     [rax]System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        mov      rbx, rax
        mov      rdi, r13
        mov      rax, qword ptr [r13]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.Encoding:get_EncodingName():System.String:this
        mov      r15, rax
        mov      rdi, gword ptr [r14+0x08]
        test     rdi, rdi
        je       SHORT G_M43362_IG62
        call     System.Object:GetType():System.Type:this
        mov      r14, rax
        jmp      SHORT G_M43362_IG63
 						;; size=50 bbWeight=0 PerfScore 0.00
 G_M43362_IG62:
        xor      r14, r14
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M43362_IG63:
        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 1845, prolog size 31, PerfScore 2185.25, instruction count 493, allocated bytes for code 1845 (MethodHash=9181569d) for method System.Text.UnicodeEncoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
+; Total bytes of code 1853, prolog size 31, PerfScore 2166.25, instruction count 492, allocated bytes for code 1853 (MethodHash=9181569d) for method System.Text.UnicodeEncoding:GetBytes(ulong,int,ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
4 (1.96 % of base) - System.Text.Encoding+EncodingCharBuffer:Fallback(ubyte[]):ubyte:this
 ; Assembly listing for method System.Text.Encoding+EncodingCharBuffer:Fallback(ubyte[]):ubyte: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; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] ( 20, 11.50)     ref  ->  rbx         this class-hnd single-def <System.Text.Encoding+EncodingCharBuffer>
 ;  V01 arg1         [V01,T01] (  5,  3.50)     ref  ->  r15         class-hnd single-def <ubyte[]>
-;  V02 loc0         [V02,T07] (  2,  1   )    long  ->  r14        
+;  V02 loc0         [V02,T06] (  2,  1   )    long  ->  r14        
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V04 tmp1         [V04    ] (  0,  0   )     int  ->  zero-ref    "non-inline candidate call"
 ;  V05 tmp2         [V05,T02] (  4,  4   )     ref  ->  rdi         class-hnd single-def "Inlining Arg" <System.Text.DecoderFallbackBuffer>
 ;  V06 tmp3         [V06,T03] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
-;  V07 tmp4         [V07,T04] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
-;  V08 cse0         [V08,T06] (  3,  2.50)    long  ->  r14         "CSE #01: aggressive"
-;  V09 rat0         [V09,T05] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
+;  V07 cse0         [V07,T05] (  3,  2.50)    long  ->  r14         "CSE #01: aggressive"
+;  V08 rat0         [V08,T04] (  3,  3   )    long  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 8
 
 G_M8390_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=18 bbWeight=1 PerfScore 6.00
 G_M8390_IG02:
        mov      r14, qword ptr [rbx+0x20]
        test     r14, r14
        je       SHORT G_M8390_IG05
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M8390_IG03:
        mov      rdi, gword ptr [rbx+0x18]
        mov      rdx, qword ptr [rbx+0x48]
        lea      rcx, bword ptr [rbx+0x20]
        mov      rsi, r15
-       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
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong,byref):ubyte:this
        test     eax, eax
        jne      SHORT G_M8390_IG06
        mov      edi, dword ptr [r15+0x08]
        sub      qword ptr [rbx+0x48], rdi
        mov      rdi, gword ptr [rbx+0x18]
        xor      eax, eax
        mov      qword ptr [rdi+0x18], rax
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.DecoderFallbackBuffer:Reset():this
        mov      rdx, qword ptr [rbx+0x20]
        cmp      rdx, qword ptr [rbx+0x28]
        sete     dl
        movzx    rdx, dl
        mov      rsi, gword ptr [rbx+0x10]
        mov      rdi, gword ptr [rbx+0x08]
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        cmp      dword ptr [rdi], edi
        call     [rax]System.Text.Encoding:ThrowCharsOverflow(System.Text.DecoderNLS,ubyte):this
        xor      eax, eax
-						;; size=94 bbWeight=0.50 PerfScore 22.50
+						;; size=98 bbWeight=0.50 PerfScore 22.12
 G_M8390_IG04:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=0.50 PerfScore 1.62
 G_M8390_IG05:
        mov      r14d, dword ptr [rbx+0x50]
        mov      rdi, gword ptr [rbx+0x18]
        mov      rdx, qword ptr [rbx+0x48]
        mov      rsi, r15
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong):int:this
+       call     [rax+0x08]System.Text.DecoderFallbackBuffer:InternalFallback(ubyte[],ulong):int:this
        add      eax, r14d
        mov      dword ptr [rbx+0x50], eax
        jmp      SHORT G_M8390_IG07
 						;; size=33 bbWeight=0.50 PerfScore 8.25
 G_M8390_IG06:
        mov      rax, qword ptr [rbx+0x20]
        sub      rax, r14
        mov      rcx, rax
        shr      rcx, 63
        add      rax, rcx
        sar      rax, 1
        add      dword ptr [rbx+0x50], eax
 						;; size=23 bbWeight=0.50 PerfScore 3.38
 G_M8390_IG07:
        mov      eax, 1
 						;; size=5 bbWeight=0.50 PerfScore 0.12
 G_M8390_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=0.50 PerfScore 1.62
 
-; Total bytes of code 204, prolog size 12, PerfScore 46.75, instruction count 68, allocated bytes for code 204 (MethodHash=8e1ddf39) for method System.Text.Encoding+EncodingCharBuffer:Fallback(ubyte[]):ubyte:this (FullOpts)
+; Total bytes of code 208, prolog size 12, PerfScore 46.38, instruction count 68, allocated bytes for code 208 (MethodHash=8e1ddf39) for method System.Text.Encoding+EncodingCharBuffer:Fallback(ubyte[]):ubyte:this (FullOpts)
4 (0.61 % of base) - System.Text.UTF32Encoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this
 ; Assembly listing for method System.Text.UTF32Encoding:GetByteCount(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,T09] (  6,  2.50)     ref  ->  r14         this class-hnd single-def <System.Text.UTF32Encoding>
 ;  V01 arg1         [V01,T00] ( 14,110   )    long  ->  rbx        
 ;  V02 arg2         [V02,T08] (  3,  3   )     int  ->  rdx         single-def
 ;  V03 arg3         [V03,T07] (  9, 15   )     ref  ->  r15         class-hnd single-def <System.Text.EncoderNLS>
 ;  V04 loc0         [V04,T03] (  3, 66   )    long  ->  r13        
 ;* V05 loc1         [V05    ] (  0,  0   )    long  ->  zero-ref   
 ;  V06 loc2         [V06,T06] (  5, 19   )     int  ->  r12        
 ;  V07 loc3         [V07,T05] (  8, 33.50)  ushort  ->  [rbp-0x2C] 
-;  V08 loc4         [V08,T04] ( 16, 57   )     ref  ->  [rbp-0x40]  class-hnd <System.Text.EncoderFallbackBuffer>
+;  V08 loc4         [V08,T04] ( 14, 41   )     ref  ->  [rbp-0x40]  class-hnd <System.Text.EncoderFallbackBuffer>
 ;  V09 loc5         [V09    ] (  6, 48   )    long  ->  [rbp-0x38]  do-not-enreg[X] addr-exposed ld-addr-op
 ;  V10 loc6         [V10,T01] ( 11, 72   )  ushort  ->  rsi        
 ;# V11 OutArgs      [V11    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V12 tmp1         [V12,T02] (  4, 68   )     int  ->  rsi         "dup spill"
 ;  V13 tmp2         [V13,T12] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;  V14 tmp3         [V14,T16] (  2,  0   )     ref  ->  rbx         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V15 tmp4         [V15,T17] (  2,  0   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V16 tmp5         [V16,T13] (  3,  0   )     ref  ->  rdi         class-hnd single-def "dup spill" <System.Text.EncoderFallback>
 ;* V17 tmp6         [V17    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V18 tmp7         [V18    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V19 tmp8         [V19    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V20 tmp9         [V20    ] (  0,  0   )     ref  ->  zero-ref   
 ;* V21 tmp10        [V21    ] (  0,  0   )     ref  ->  zero-ref   
 ;  V22 tmp11        [V22,T14] (  3,  0   )     ref  ->  r15        
 ;* V23 tmp12        [V23    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V24 tmp13        [V24    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;  V25 tmp14        [V25,T11] (  5,  0   )     ref  ->  r15        
 ;  V26 tmp15        [V26,T15] (  3,  0   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
 ;* V27 tmp16        [V27    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact "Inlining Arg" <System.Text.CodePageDataItem>
 ;  V28 tmp17        [V28,T18] (  2,  0   )     ref  ->  rdi         class-hnd exact single-def "Inlining Arg" <System.RuntimeType>
 ;  V29 tmp18        [V29,T10] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V30 tmp19        [V30,T19] (  2,  0   )     ref  ->  rbx         single-def "argument with side effect"
 ;  V31 tmp20        [V31,T20] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V32 tmp21        [V32,T21] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;
 ; Lcl frame size = 24
 
 G_M47975_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x40]
        mov      r14, rdi
        mov      rbx, rsi
        mov      r15, rcx
 						;; size=28 bbWeight=1 PerfScore 7.50
 G_M47975_IG02:
        movsxd   rdi, edx
        lea      r13, [rbx+2*rdi]
        xor      r12d, r12d
        xor      eax, eax
        test     r15, r15
        je       SHORT G_M47975_IG04
 						;; size=17 bbWeight=1 PerfScore 2.50
 G_M47975_IG03:
        movzx    rax, word  ptr [r15+0x24]
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, r15
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rcx]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      rdi, rax
        mov      gword ptr [rbp-0x40], rax
        mov      rcx, qword ptr [rax]
        mov      rcx, qword ptr [rcx+0x48]
        call     [rcx]System.Text.EncoderFallbackBuffer:get_Remaining():int:this
        test     eax, eax
        jle      SHORT G_M47975_IG05
        jmp      G_M47975_IG21
 						;; size=48 bbWeight=0.50 PerfScore 9.00
 G_M47975_IG04:
        mov      dword ptr [rbp-0x2C], eax
        mov      rdi, gword ptr [r14+0x10]
        mov      rcx, qword ptr [rdi]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      r14, rax
        mov      gword ptr [rbp-0x40], r14
 						;; size=24 bbWeight=0.50 PerfScore 5.62
 G_M47975_IG05:
        mov      r14, gword ptr [rbp-0x40]
        mov      qword ptr [r14+0x18], rbx
        mov      qword ptr [r14+0x20], r13
        lea      rdi, bword ptr [r14+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      word  ptr [r14+0x30], 0
        mov      byte  ptr [r14+0x32], 0
        xor      edi, edi
        mov      dword ptr [r14+0x28], edi
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rax]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        mov      esi, eax
        test     esi, esi
        je       SHORT G_M47975_IG10
 						;; size=63 bbWeight=1 PerfScore 13.00
 G_M47975_IG06:
        test     esi, esi
        jne      SHORT G_M47975_IG07
        movzx    rsi, word  ptr [rbx]
        add      rbx, 2
 						;; size=11 bbWeight=2 PerfScore 7.00
 G_M47975_IG07:
        mov      eax, dword ptr [rbp-0x2C]
        test     eax, eax
        je       SHORT G_M47975_IG16
        add      esi, -0xDC00
        cmp      esi, 0x3FF
        ja       G_M47975_IG18
        xor      eax, eax
        mov      dword ptr [rbp-0x2C], eax
 						;; size=30 bbWeight=2 PerfScore 10.00
 G_M47975_IG08:
        add      r12d, 4
 						;; size=4 bbWeight=8 PerfScore 2.00
 G_M47975_IG09:
        mov      rdi, r14
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rcx]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        mov      esi, eax
        test     esi, esi
        jne      SHORT G_M47975_IG06
 						;; size=21 bbWeight=16 PerfScore 80.00
 G_M47975_IG10:
        cmp      rbx, r13
        jb       SHORT G_M47975_IG06
 						;; size=5 bbWeight=64 PerfScore 80.00
 G_M47975_IG11:
        test     r15, r15
        je       SHORT G_M47975_IG13
 						;; size=5 bbWeight=8 PerfScore 10.00
 G_M47975_IG12:
        cmp      byte  ptr [r15+0x26], 0
        je       SHORT G_M47975_IG14
 						;; size=7 bbWeight=2 PerfScore 8.00
 G_M47975_IG13:
        mov      ecx, dword ptr [rbp-0x2C]
        test     ecx, ecx
        jg       SHORT G_M47975_IG19
 						;; size=7 bbWeight=4 PerfScore 9.00
 G_M47975_IG14:
        test     r12d, r12d
        jl       G_M47975_IG20
        mov      eax, r12d
 						;; size=12 bbWeight=1 PerfScore 1.50
 G_M47975_IG15:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M47975_IG16:
        lea      edx, [rsi-0xD800]
        cmp      edx, 0x3FF
        ja       SHORT G_M47975_IG17
        mov      dword ptr [rbp-0x2C], esi
        jmp      SHORT G_M47975_IG09
 						;; size=19 bbWeight=8 PerfScore 38.00
 G_M47975_IG17:
        lea      edx, [rsi-0xDC00]
        cmp      edx, 0x3FF
        mov      dword ptr [rbp-0x2C], eax
        ja       SHORT G_M47975_IG08
        mov      qword ptr [rbp-0x38], rbx
        lea      rdx, [rbp-0x38]
        mov      rdi, r14
-       mov      rcx, qword ptr [r14]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x38]
        jmp      G_M47975_IG09
-						;; size=47 bbWeight=8 PerfScore 116.00
+						;; size=49 bbWeight=8 PerfScore 86.00
 G_M47975_IG18:
        add      rbx, -2
        mov      ecx, eax
 						;; size=6 bbWeight=2 PerfScore 1.00
 G_M47975_IG19:
        mov      qword ptr [rbp-0x38], rbx
        lea      rdx, [rbp-0x38]
        mov      rdi, r14
        mov      esi, ecx
-       mov      rax, qword ptr [r14]
-       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      rbx, qword ptr [rbp-0x38]
        xor      ecx, ecx
        xor      edi, edi
        mov      dword ptr [rbp-0x2C], edi
        jmp      G_M47975_IG09
-						;; size=39 bbWeight=8 PerfScore 108.00
+						;; size=41 bbWeight=8 PerfScore 78.00
 G_M47975_IG20:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      edi, 975
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rbx, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_GetByteCountOverflow():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_GetByteCountOverflow():System.String
        mov      rdx, rax
        mov      rsi, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=83 bbWeight=0 PerfScore 0.00
 G_M47975_IG21:
        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 [r14+0x08], 0
        jne      SHORT G_M47975_IG22
        mov      rdi, r14
        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_M47975_IG22:
        mov      rdi, gword ptr [r14+0x08]
        mov      r14, gword ptr [rdi+0x20]
        mov      rdi, gword ptr [r15+0x08]
        test     rdi, rdi
        je       SHORT G_M47975_IG23
        call     System.Object:GetType():System.Type:this
        mov      rdi, rax
        mov      esi, 1
        mov      rax, 0xD1FFAB1E      ; code for System.RuntimeType:GetCachedName(int):System.String:this
        call     [rax]System.RuntimeType:GetCachedName(int):System.String:this
        mov      r15, rax
        jmp      SHORT G_M47975_IG24
 						;; size=47 bbWeight=0 PerfScore 0.00
 G_M47975_IG23:
        xor      r15, r15
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M47975_IG24:
        mov      rdi, 0xD1FFAB1E      ; ''
        test     r15, r15
        cmove    r15, rdi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, rbx
        mov      rsi, r14
        mov      rdx, r15
        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=83 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 661, prolog size 19, PerfScore 512.38, instruction count 179, allocated bytes for code 661 (MethodHash=802d4498) for method System.Text.UTF32Encoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
+; Total bytes of code 665, prolog size 19, PerfScore 452.38, instruction count 177, allocated bytes for code 665 (MethodHash=802d4498) for method System.Text.UTF32Encoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
2 (0.13 % of base) - System.Text.UnicodeEncoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this
 ; Assembly listing for method System.Text.UnicodeEncoding:GetByteCount(ulong,int,System.Text.EncoderNLS):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; 8 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T13] (  9, 18   )     ref  ->  r14         this class-hnd single-def <System.Text.UnicodeEncoding>
-;  V01 arg1         [V01,T02] ( 23,117   )    long  ->  registers  
+;  V01 arg1         [V01,T02] ( 23,117   )    long  ->  rbx        
 ;  V02 arg2         [V02,T20] (  4,  4   )     int  ->  rdx         single-def
 ;  V03 arg3         [V03,T06] ( 22, 54.50)     ref  ->  r15         class-hnd single-def <System.Text.EncoderNLS>
 ;  V04 loc0         [V04,T07] ( 16, 56.50)     int  ->  r13        
 ;  V05 loc1         [V05,T15] (  7, 18   )    long  ->  r12        
 ;  V06 loc2         [V06,T11] (  9, 37   )    long  ->  [rbp-0x30]  spill-single-def
 ;  V07 loc3         [V07,T05] ( 15, 68   )  ushort  ->  [rbp-0x34] 
 ;  V08 loc4         [V08,T19] (  3,  9   )   ubyte  ->  [rbp-0x38] 
-;  V09 loc5         [V09,T00] ( 52,256.50)     ref  ->  [rbp-0x50]  class-hnd <System.Text.EncoderFallbackBuffer>
+;  V09 loc5         [V09,T00] ( 48,232.50)     ref  ->  [rbp-0x50]  class-hnd <System.Text.EncoderFallbackBuffer>
 ;  V10 loc6         [V10    ] ( 12, 72   )    long  ->  [rbp-0x40]  do-not-enreg[X] addr-exposed ld-addr-op
 ;  V11 loc7         [V11,T03] (  7, 76   )  ushort  ->  [rbp-0x44] 
 ;  V12 loc8         [V12,T14] (  3, 20   )    long  ->  rdi        
 ;  V13 loc9         [V13,T04] (  7, 70   )    long  ->  rax        
 ;  V14 loc10        [V14,T10] (  5, 40   )    long  ->  rsi        
 ;# V15 OutArgs      [V15    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V16 tmp1         [V16,T01] (  4,144   )     int  ->  registers  
 ;  V17 tmp2         [V17,T12] (  3, 24   )     ref  ->  rax        
 ;  V18 tmp3         [V18,T21] (  3,  6   )     ref  ->  rdx        
 ;  V19 tmp4         [V19,T22] (  3,  6   )     ref  ->  rax        
 ;* V20 tmp5         [V20    ] (  0,  0   )    long  ->  zero-ref   
 ;  V21 tmp6         [V21,T23] (  3,  6   )     ref  ->  rax        
 ;  V22 tmp7         [V22,T24] (  3,  0   )     ref  ->  r14         class-hnd exact "Single-def Box Helper" <System.Char>
 ;  V23 tmp8         [V23,T30] (  2,  0   )     ref  ->  r15         class-hnd exact "impImportAndPushBox" <System.String>
 ;  V24 tmp9         [V24,T25] (  3,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.ArgumentException>
 ;  V25 tmp10        [V25,T31] (  2,  0   )     ref  ->  rbx         class-hnd exact single-def "non-inline candidate call" <System.String>
 ;  V26 tmp11        [V26,T32] (  2,  0   )     ref  ->  r14         class-hnd exact single-def "impAppendStmt" <System.String>
 ;  V27 tmp12        [V27,T26] (  3,  0   )     ref  ->  rdi         class-hnd single-def "dup spill" <System.Text.EncoderFallback>
 ;* V28 tmp13        [V28    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V29 tmp14        [V29    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V30 tmp15        [V30    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V31 tmp16        [V31    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;* V32 tmp17        [V32    ] (  0,  0   )     ref  ->  zero-ref    single-def
 ;  V33 tmp18        [V33,T27] (  3,  0   )     ref  ->  r15        
 ;  V34 tmp19        [V34,T28] (  3,  0   )     ref  ->  r13         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
 ;  V35 tmp20        [V35,T29] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;  V36 tmp21        [V36,T09] (  3, 48   )     ref  ->  rdi         "argument with side effect"
 ;  V37 tmp22        [V37,T16] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V38 tmp23        [V38,T17] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V39 tmp24        [V39,T18] (  3, 12   )     ref  ->  rdi         "argument with side effect"
 ;  V40 tmp25        [V40,T33] (  2,  0   )     ref  ->  r15         "argument with side effect"
 ;  V41 tmp26        [V41,T34] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V42 tmp27        [V42,T35] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V43 tmp28        [V43,T36] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
 ;  V44 tmp29        [V44,T37] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V45 cse0         [V45,T08] (  4, 48   )    long  ->  rdx         "CSE #01: moderate"
 ;
 ; Lcl frame size = 40
 
 G_M510_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 40
        lea      rbp, [rsp+0x50]
        mov      r14, rdi
        mov      rbx, rsi
        mov      r15, rcx
 						;; size=28 bbWeight=1 PerfScore 7.50
 G_M510_IG02:
        lea      r13d, [rdx+rdx]
        test     r13d, r13d
        jl       G_M510_IG51
        mov      r12, rbx
        movsxd   rdi, edx
        lea      rax, [r12+2*rdi]
        mov      qword ptr [rbp-0x30], rax
        xor      ecx, ecx
        xor      edx, edx
        mov      dword ptr [rbp-0x38], edx
        xor      rsi, rsi
        test     r15, r15
        mov      dword ptr [rbp-0x34], ecx
        je       SHORT G_M510_IG04
 						;; size=44 bbWeight=1 PerfScore 7.75
 G_M510_IG03:
        movzx    rcx, word  ptr [r15+0x24]
        lea      edi, [r13+0x02]
        mov      dword ptr [rbp-0x34], ecx
        test     ecx, ecx
        cmovg    r13d, edi
        cmp      gword ptr [r15+0x10], 0
        mov      rax, rsi
        je       SHORT G_M510_IG07
        mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rsi]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      rsi, rax
        mov      rdi, rsi
        mov      gword ptr [rbp-0x50], rsi
        mov      rax, qword ptr [rsi]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.EncoderFallbackBuffer:get_Remaining():int:this
        test     eax, eax
        jle      SHORT G_M510_IG05
        jmp      G_M510_IG48
 						;; size=71 bbWeight=0.50 PerfScore 11.75
 G_M510_IG04:
        mov      rax, rsi
        jmp      SHORT G_M510_IG07
        align    [0 bytes for IG23]
 						;; size=5 bbWeight=0.50 PerfScore 1.12
 G_M510_IG05:
        mov      rax, gword ptr [rbp-0x50]
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x50], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x50]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edi, edi
        mov      dword ptr [rax+0x28], edi
        jmp      SHORT G_M510_IG07
 						;; size=53 bbWeight=2 PerfScore 26.00
 G_M510_IG06:
        xor      ecx, ecx
        mov      dword ptr [rbp-0x34], ecx
        mov      rax, gword ptr [rbp-0x50]
 						;; size=9 bbWeight=8 PerfScore 18.00
 G_M510_IG07:
        test     rax, rax
        je       SHORT G_M510_IG09
 						;; size=5 bbWeight=64 PerfScore 80.00
 G_M510_IG08:
        mov      gword ptr [rbp-0x50], rax
        mov      rdi, rax
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        call     [rcx]System.Text.EncoderFallbackBuffer:InternalGetNextChar():ushort:this
        jmp      SHORT G_M510_IG10
 						;; size=21 bbWeight=8 PerfScore 52.00
 G_M510_IG09:
        xor      edi, edi
        mov      gword ptr [rbp-0x50], rax
        mov      eax, edi
 						;; size=8 bbWeight=8 PerfScore 12.00
 G_M510_IG10:
        movzx    rcx, ax
        test     eax, eax
        jne      SHORT G_M510_IG17
 						;; size=7 bbWeight=64 PerfScore 96.00
 G_M510_IG11:
        cmp      rbx, qword ptr [rbp-0x30]
        jb       SHORT G_M510_IG17
 						;; size=6 bbWeight=16 PerfScore 48.00
 G_M510_IG12:
        cmp      dword ptr [rbp-0x34], 0
        jle      G_M510_IG42
 						;; size=10 bbWeight=8 PerfScore 24.00
 G_M510_IG13:
        add      r13d, -2
        test     r15, r15
        je       SHORT G_M510_IG15
 						;; size=9 bbWeight=4 PerfScore 6.00
 G_M510_IG14:
        cmp      byte  ptr [r15+0x26], 0
        je       G_M510_IG42
 						;; size=11 bbWeight=2 PerfScore 8.00
 G_M510_IG15:
        cmp      dword ptr [rbp-0x38], 0
        jne      G_M510_IG47
        mov      rsi, gword ptr [rbp-0x50]
        test     rsi, rsi
        jne      G_M510_IG46
 						;; size=23 bbWeight=4 PerfScore 21.00
 G_M510_IG16:
        test     r15, r15
        je       G_M510_IG44
        mov      rdi, r15
        mov      rcx, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rcx]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M510_IG45
 						;; size=29 bbWeight=2 PerfScore 13.50
 G_M510_IG17:
        test     ecx, ecx
        jne      G_M510_IG21
        movzx    rcx, byte  ptr [r14+0x26]
        xor      ecx, 1
        je       SHORT G_M510_IG18
        mov      edi, ebx
        and      edi, 7
        mov      ecx, dword ptr [rbp-0x34]
        or       edi, ecx
        mov      dword ptr [rbp-0x34], ecx
        je       SHORT G_M510_IG22
 						;; size=33 bbWeight=2 PerfScore 16.50
 G_M510_IG18:
        movzx    rdi, word  ptr [rbx]
        mov      eax, edi
        add      rbx, 2
 						;; size=9 bbWeight=2 PerfScore 5.00
 G_M510_IG19:
        mov      edi, eax
        sub      edi, 0xD800
        cmp      edi, 0x7FF
        ja       G_M510_IG37
        mov      dword ptr [rbp-0x44], eax
        cmp      eax, 0xDBFF
        jg       G_M510_IG28
        mov      eax, dword ptr [rbp-0x44]
        cmp      dword ptr [rbp-0x34], 0
        jle      G_M510_IG33
        add      rbx, -2
        add      r13d, -2
        mov      rdx, gword ptr [rbp-0x50]
        test     rdx, rdx
        mov      gword ptr [rbp-0x50], rdx
        jne      SHORT G_M510_IG20
        test     r15, r15
        je       G_M510_IG34
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rax]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      G_M510_IG35
 						;; size=97 bbWeight=2 PerfScore 37.00
 G_M510_IG20:
        mov      ecx, dword ptr [rbp-0x34]
        jmp      G_M510_IG36
 						;; size=8 bbWeight=1 PerfScore 3.00
 G_M510_IG21:
        add      r13d, 2
        mov      eax, ecx
        jmp      SHORT G_M510_IG19
 						;; size=8 bbWeight=2 PerfScore 5.00
 G_M510_IG22:
        mov      rcx, qword ptr [rbp-0x30]
        lea      rdi, [rcx-0x06]
        mov      rax, rbx
        cmp      rax, rdi
        jae      G_M510_IG27
 						;; size=20 bbWeight=2 PerfScore 6.00
 G_M510_IG23:
        mov      rdx, qword ptr [rax]
        mov      rsi, 0xD1FFAB1E
        test     rdx, rsi
        je       SHORT G_M510_IG26
 						;; size=18 bbWeight=16 PerfScore 56.00
 G_M510_IG24:
        mov      rsi, 0xD1FFAB1E
        and      rsi, rdx
        mov      r8, 0xD1FFAB1E
        xor      rsi, r8
        mov      r8, 0xD1FFAB1E
        test     rsi, r8
        je       SHORT G_M510_IG25
        mov      r8, 0xD1FFAB1E
        test     rsi, r8
        je       SHORT G_M510_IG25
        test     esi, -0x10000
        je       SHORT G_M510_IG25
        movzx    rsi, si
        test     esi, esi
        jne      SHORT G_M510_IG26
 						;; size=71 bbWeight=8 PerfScore 54.00
 G_M510_IG25:
        mov      rsi, 0xD1FFAB1E
        and      rdx, rsi
        mov      rsi, 0xD1FFAB1E
        cmp      rdx, rsi
        jne      SHORT G_M510_IG27
 						;; size=28 bbWeight=8 PerfScore 16.00
 G_M510_IG26:
        add      rax, 8
        cmp      rax, rdi
        jb       SHORT G_M510_IG23
 						;; size=9 bbWeight=16 PerfScore 24.00
 G_M510_IG27:
        mov      rbx, rax
        cmp      rbx, rcx
        jae      G_M510_IG12
        jmp      G_M510_IG18
 						;; size=17 bbWeight=2 PerfScore 7.00
 G_M510_IG28:
        mov      eax, dword ptr [rbp-0x44]
        mov      ecx, dword ptr [rbp-0x34]
        test     ecx, ecx
        jne      G_M510_IG06
        add      r13d, -2
        mov      rdx, gword ptr [rbp-0x50]
        test     rdx, rdx
        mov      gword ptr [rbp-0x50], rdx
        jne      SHORT G_M510_IG29
        test     r15, r15
        je       SHORT G_M510_IG30
        mov      dword ptr [rbp-0x44], eax
        mov      dword ptr [rbp-0x34], ecx
        mov      rdi, r15
        mov      rdx, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rdx]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      rdx, rax
        jmp      SHORT G_M510_IG31
 						;; size=62 bbWeight=2 PerfScore 31.50
 G_M510_IG29:
        mov      dword ptr [rbp-0x34], ecx
        jmp      SHORT G_M510_IG32
 						;; size=5 bbWeight=1 PerfScore 3.00
 G_M510_IG30:
        mov      dword ptr [rbp-0x44], eax
        mov      dword ptr [rbp-0x34], ecx
        mov      rdi, gword ptr [r14+0x10]
        mov      rdx, qword ptr [rdi]
        mov      rdx, qword ptr [rdx+0x40]
        call     [rdx+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
        mov      rdx, rax
 						;; size=23 bbWeight=2 PerfScore 22.50
 G_M510_IG31:
        mov      rax, rdx
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x50], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x50]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      gword ptr [rbp-0x50], rax
        mov      dword ptr [rax+0x28], edx
        mov      eax, dword ptr [rbp-0x44]
 						;; size=57 bbWeight=2 PerfScore 24.50
 G_M510_IG32:
        mov      qword ptr [rbp-0x40], rbx
        lea      rdx, [rbp-0x40]
        mov      rdi, gword ptr [rbp-0x50]
        mov      esi, eax
-       mov      gword ptr [rbp-0x50], 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
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x40]
        mov      rax, gword ptr [rbp-0x50]
        jmp      G_M510_IG07
-						;; size=41 bbWeight=2 PerfScore 29.50
+						;; size=41 bbWeight=2 PerfScore 26.00
 G_M510_IG33:
        mov      dword ptr [rbp-0x34], eax
        mov      rax, gword ptr [rbp-0x50]
        jmp      G_M510_IG07
 						;; size=12 bbWeight=2 PerfScore 8.00
 G_M510_IG34:
        mov      rdi, gword ptr [r14+0x10]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M510_IG35:
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x50], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x50]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      gword ptr [rbp-0x50], rax
        mov      dword ptr [rax+0x28], edx
        mov      ecx, dword ptr [rbp-0x34]
 						;; size=54 bbWeight=2 PerfScore 24.00
 G_M510_IG36:
        mov      qword ptr [rbp-0x40], rbx
        lea      rdx, [rbp-0x40]
        mov      rdi, gword ptr [rbp-0x50]
        mov      esi, ecx
-       mov      gword ptr [rbp-0x50], 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
+       cmp      dword ptr [rdi], edi
+       call     [rax]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x40]
        jmp      G_M510_IG06
-						;; size=37 bbWeight=2 PerfScore 27.50
+						;; size=37 bbWeight=2 PerfScore 24.00
 G_M510_IG37:
        cmp      dword ptr [rbp-0x34], 0
        mov      rax, gword ptr [rbp-0x50]
        jle      G_M510_IG07
        mov      ecx, dword ptr [rbp-0x34]
        add      rbx, -2
        test     rax, rax
        jne      SHORT G_M510_IG41
 						;; size=26 bbWeight=16 PerfScore 104.00
 G_M510_IG38:
        test     r15, r15
        je       SHORT G_M510_IG39
        mov      dword ptr [rbp-0x34], ecx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        call     [rax]System.Text.Encoder:get_FallbackBuffer():System.Text.EncoderFallbackBuffer:this
        jmp      SHORT G_M510_IG40
 						;; size=25 bbWeight=8 PerfScore 62.00
 G_M510_IG39:
        mov      dword ptr [rbp-0x34], ecx
        mov      rdi, gword ptr [r14+0x10]
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x40]
        call     [rax+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=17 bbWeight=8 PerfScore 80.00
 G_M510_IG40:
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x50], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x50]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      dword ptr [rax+0x28], edx
        mov      ecx, dword ptr [rbp-0x34]
 						;; size=50 bbWeight=8 PerfScore 88.00
 G_M510_IG41:
        mov      qword ptr [rbp-0x40], rbx
        lea      rdx, [rbp-0x40]
+       mov      gword ptr [rbp-0x50], rax
        mov      rdi, rax
        mov      esi, ecx
-       mov      gword ptr [rbp-0x50], rax
-       mov      rcx, qword ptr [rax]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
        mov      rbx, qword ptr [rbp-0x40]
        add      r13d, -2
        jmp      G_M510_IG06
-						;; size=40 bbWeight=16 PerfScore 212.00
+						;; size=44 bbWeight=16 PerfScore 200.00
 G_M510_IG42:
        mov      eax, r13d
 						;; size=3 bbWeight=1 PerfScore 0.25
 G_M510_IG43:
        add      rsp, 40
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M510_IG44:
        mov      rdi, gword ptr [r14+0x10]
        mov      rcx, qword ptr [rdi]
        mov      rcx, qword ptr [rcx+0x40]
        call     [rcx+0x20]System.Text.EncoderFallback:CreateFallbackBuffer():System.Text.EncoderFallbackBuffer:this
 						;; size=14 bbWeight=2 PerfScore 18.00
 G_M510_IG45:
        mov      qword ptr [rax+0x18], r12
        mov      rcx, qword ptr [rbp-0x30]
        mov      qword ptr [rax+0x20], rcx
        mov      gword ptr [rbp-0x50], rax
        lea      rdi, bword ptr [rax+0x08]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rax, gword ptr [rbp-0x50]
        mov      word  ptr [rax+0x30], 0
        mov      byte  ptr [rax+0x32], 0
        xor      edx, edx
        mov      dword ptr [rax+0x28], edx
        mov      rsi, rax
 						;; size=50 bbWeight=2 PerfScore 20.50
 G_M510_IG46:
        mov      qword ptr [rbp-0x40], rbx
        lea      rdx, [rbp-0x40]
        mov      gword ptr [rbp-0x50], rsi
        mov      rdi, rsi
        mov      esi, dword ptr [rbp-0x34]
-       mov      rbx, gword ptr [rbp-0x50]
-       mov      rcx, qword ptr [rbx]
-       mov      rcx, qword ptr [rcx+0x48]
-       call     [rcx+0x10]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
-       mov      rdi, qword ptr [rbp-0x40]
+       mov      rcx, 0xD1FFAB1E      ; code for System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       cmp      dword ptr [rdi], edi
+       call     [rcx]System.Text.EncoderFallbackBuffer:InternalFallback(ushort,byref):ubyte:this
+       mov      rbx, qword ptr [rbp-0x40]
        xor      esi, esi
        mov      dword ptr [rbp-0x34], esi
-       mov      edx, 1
-       mov      dword ptr [rbp-0x38], edx
-       mov      rax, rbx
-       mov      rbx, rdi
+       mov      edi, 1
+       mov      dword ptr [rbp-0x38], edi
+       mov      rax, gword ptr [rbp-0x50]
        jmp      G_M510_IG07
-						;; size=60 bbWeight=4 PerfScore 71.00
+						;; size=58 bbWeight=4 PerfScore 66.00
 G_M510_IG47:
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Argument_RecursiveFallback():System.String
        call     [rax]System.SR:get_Argument_RecursiveFallback():System.String
        mov      r15, rax
        mov      ebx, dword ptr [rbp-0x34]
        mov      word  ptr [r14+0x08], bx
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rsi, r14
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object):System.String
        mov      r15, rax
        mov      edi, 0x133E6
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=130 bbWeight=0 PerfScore 0.00
 G_M510_IG48:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        call     [rax]System.SR:get_Argument_EncoderFallbackNotEmpty():System.String
        mov      rbx, rax
        mov      rdi, r14
        mov      rax, qword ptr [r14]
        mov      rax, qword ptr [rax+0x48]
        call     [rax]System.Text.Encoding:get_EncodingName():System.String:this
        mov      r14, rax
        mov      rdi, gword ptr [r15+0x08]
        test     rdi, rdi
        je       SHORT G_M510_IG49
        call     System.Object:GetType():System.Type:this
        mov      r15, rax
        jmp      SHORT G_M510_IG50
 						;; size=49 bbWeight=0 PerfScore 0.00
 G_M510_IG49:
        xor      r15, r15
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M510_IG50:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentException
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      rdi, rbx
        mov      rsi, r14
        mov      rdx, r15
        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
 G_M510_IG51:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 975
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_GetByteCountOverflow():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_GetByteCountOverflow():System.String
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=83 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 1593, prolog size 28, PerfScore 1510.62, instruction count 419, allocated bytes for code 1597 (MethodHash=a4d4fe01) for method System.Text.UnicodeEncoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
+; Total bytes of code 1595, prolog size 28, PerfScore 1486.62, instruction count 415, allocated bytes for code 1599 (MethodHash=a4d4fe01) for method System.Text.UnicodeEncoding:GetByteCount(ulong,int,System.Text.EncoderNLS):int:this (FullOpts)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment