-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)