forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] [saucecontrol] JIT: Improve x86 integral to floating cast codegen #910
Comments
Top method regressions8 (3.00 % of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object ; Assembly listing for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (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; 5 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 5, 3 ) long -> [rbp-0x08] EH-live single-def
; V01 arg1 [V01,T02] ( 5, 3 ) long -> [rbp-0x10] EH-live single-def
; V02 loc0 [V02,T03] ( 4, 2 ) ref -> [rbp-0x38] do-not-enreg[M] class-hnd EH-live <System.Object>
;* V03 loc1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.OverflowException>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.OverflowException>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V06 tmp1 [V06,T00] ( 3, 6 ) ref -> rdi class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
;* V07 tmp2 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <System.OverflowException>
;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Decimal>
;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Decimal>
;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Decimal>
; V11 tmp6 [V11,T04] ( 3, 0 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
;* V12 tmp7 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <System.OverflowException>
; V13 tmp8 [V13,T05] ( 3, 0 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Double>
; V14 tmp9 [V14 ] ( 5, 0 ) struct (16) [rbp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
; V15 tmp10 [V15 ] ( 4, 0 ) struct (16) [rbp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
;* V16 tmp11 [V16 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
;* V17 tmp12 [V17,T06] ( 0, 0 ) int -> zero-ref single-def "field V08._flags (fldOffset=0x0)" P-INDEP
;* V18 tmp13 [V18,T07] ( 0, 0 ) int -> zero-ref single-def "field V08._hi32 (fldOffset=0x4)" P-INDEP
;* V19 tmp14 [V19,T08] ( 0, 0 ) long -> zero-ref single-def "field V08._lo64 (fldOffset=0x8)" P-INDEP
;* V20 tmp15 [V20,T09] ( 0, 0 ) int -> zero-ref single-def "field V09._flags (fldOffset=0x0)" P-INDEP
;* V21 tmp16 [V21,T10] ( 0, 0 ) int -> zero-ref single-def "field V09._hi32 (fldOffset=0x4)" P-INDEP
;* V22 tmp17 [V22,T11] ( 0, 0 ) long -> zero-ref single-def "field V09._lo64 (fldOffset=0x8)" P-INDEP
;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref single-def "field V10._flags (fldOffset=0x0)" P-INDEP
;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref single-def "field V10._hi32 (fldOffset=0x4)" P-INDEP
;* V25 tmp20 [V25 ] ( 0, 0 ) long -> zero-ref single-def "field V10._lo64 (fldOffset=0x8)" P-INDEP
; V26 tmp21 [V26 ] ( 3, 0 ) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V14._flags (fldOffset=0x0)" P-DEP
; V27 tmp22 [V27 ] ( 3, 0 ) int -> [rbp-0x1C] do-not-enreg[X] addr-exposed "field V14._hi32 (fldOffset=0x4)" P-DEP
; V28 tmp23 [V28 ] ( 3, 0 ) long -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V14._lo64 (fldOffset=0x8)" P-DEP
; V29 tmp24 [V29 ] ( 2, 0 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V15._flags (fldOffset=0x0)" P-DEP
; V30 tmp25 [V30 ] ( 2, 0 ) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V15._hi32 (fldOffset=0x4)" P-DEP
; V31 tmp26 [V31 ] ( 2, 0 ) long -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V15._lo64 (fldOffset=0x8)" P-DEP
; V32 rat0 [V32 ] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym"
;
; Lcl frame size = 64
G_M41291_IG01:
push rbp
sub rsp, 64
lea rbp, [rsp+0x40]
mov qword ptr [rbp-0x40], rsp
mov qword ptr [rbp-0x08], rdi
mov qword ptr [rbp-0x10], rsi
;; size=22 bbWeight=1 PerfScore 4.75
G_M41291_IG02:
mov rdi, 0xD1FFAB1E ; System.UInt64
call CORINFO_HELP_NEWSFAST
mov rdi, rax
mov rcx, qword ptr [rbp-0x08]
mov rax, rcx
mul rdx:rax, qword ptr [rbp-0x10]
jb SHORT G_M41291_IG03
mov qword ptr [rdi+0x08], rax
mov gword ptr [rbp-0x38], rdi
jmp SHORT G_M41291_IG08
;; size=41 bbWeight=1 PerfScore 12.75
G_M41291_IG03:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M41291_IG04:
xor edi, edi
mov dword ptr [rbp-0x20], edi
;; size=5 bbWeight=0 PerfScore 0.00
G_M41291_IG05:
mov dword ptr [rbp-0x1C], edi
mov rcx, qword ptr [rbp-0x08]
mov qword ptr [rbp-0x18], rcx
;; size=11 bbWeight=0 PerfScore 0.00
G_M41291_IG06:
mov dword ptr [rbp-0x30], edi
;; size=3 bbWeight=0 PerfScore 0.00
G_M41291_IG07:
mov dword ptr [rbp-0x2C], edi
mov rsi, qword ptr [rbp-0x10]
mov qword ptr [rbp-0x28], rsi
lea rdi, [rbp-0x20]
lea rsi, [rbp-0x30]
mov rax, 0xD1FFAB1E ; code for System.Decimal+DecCalc:VarDecMul(byref,byref)
call [rax]System.Decimal+DecCalc:VarDecMul(byref,byref)
mov rdi, 0xD1FFAB1E ; System.Decimal
call CORINFO_HELP_NEWSFAST
vmovups xmm0, xmmword ptr [rbp-0x20]
vmovups xmmword ptr [rax+0x08], xmm0
mov gword ptr [rbp-0x38], rax
;; size=60 bbWeight=0 PerfScore 0.00
G_M41291_IG08:
mov rax, gword ptr [rbp-0x38]
;; size=4 bbWeight=1 PerfScore 1.00
G_M41291_IG09:
add rsp, 64
pop rbp
ret
;; size=6 bbWeight=1 PerfScore 1.75
G_M41291_IG10:
nop
jmp SHORT G_M41291_IG04
;; size=3 bbWeight=0 PerfScore 0.00
G_M41291_IG11:
push rbp
sub rsp, 16
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x40]
;; size=16 bbWeight=0 PerfScore 0.00
G_M41291_IG12:
lea rax, G_M41291_IG10
;; size=7 bbWeight=0 PerfScore 0.00
G_M41291_IG13:
add rsp, 16
pop rbp
ret
;; size=6 bbWeight=0 PerfScore 0.00
G_M41291_IG14:
push rbp
sub rsp, 16
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x40]
;; size=16 bbWeight=0 PerfScore 0.00
G_M41291_IG15:
mov rdi, 0xD1FFAB1E ; System.Double
call CORINFO_HELP_NEWSFAST
mov rcx, qword ptr [rbp-0x08]
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rcx
mov rsi, qword ptr [rbp-0x10]
+ vxorps xmm1, xmm1, xmm1
vcvtusi2sd xmm1, rsi
vmulsd xmm0, xmm0, xmm1
vmovsd qword ptr [rax+0x08], xmm0
mov gword ptr [rbp-0x38], rax
lea rax, G_M41291_IG08
- ;; size=55 bbWeight=0 PerfScore 0.00
+ ;; size=63 bbWeight=0 PerfScore 0.00
G_M41291_IG16:
add rsp, 16
pop rbp
ret
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 267, prolog size 22, PerfScore 20.25, instruction count 69, allocated bytes for code 267 (MethodHash=9ae05eb4) for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
+; Total bytes of code 275, prolog size 22, PerfScore 20.25, instruction count 71, allocated bytes for code 275 (MethodHash=9ae05eb4) for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
; ============================================================ 8 (21.05 % of base) - System.Half:op_Explicit(ulong):System.Half ; Assembly listing for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; fully interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M50674_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M50674_IG02:
+ vxorps xmm0, xmm0, xmm0
vcvtusi2ss xmm0, rdi
mov rax, 0xD1FFAB1E ; code for System.Half:op_Explicit(float):System.Half
- ;; size=16 bbWeight=1 PerfScore 6.25
+ ;; size=20 bbWeight=1 PerfScore 6.58
G_M50674_IG03:
tail.jmp [rax]System.Half:op_Explicit(float):System.Half
;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 19, prolog size 0, PerfScore 8.25, instruction count 3, allocated bytes for code 19 (MethodHash=130a3a0d) for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
+; Total bytes of code 23, prolog size 0, PerfScore 8.58, instruction count 4, allocated bytes for code 23 (MethodHash=130a3a0d) for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
; ============================================================ 8 (1.44 % of base) - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this ; Assembly listing for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object: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; 6 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T03] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked>
; V01 arg1 [V01,T00] ( 14, 8 ) long -> rbx single-def
; V02 loc0 [V02,T01] ( 13, 7 ) ref -> rax class-hnd <System.Object>
;* V03 loc1 [V03 ] ( 0, 0 ) int -> zero-ref
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V05 tmp1 [V05,T04] ( 4, 4 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
; V06 tmp2 [V06,T05] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Double>
; V07 tmp3 [V07,T06] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Single>
; V08 tmp4 [V08,T07] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
; V09 tmp5 [V09,T08] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int64>
; V10 tmp6 [V10,T09] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt32>
; V11 tmp7 [V11,T10] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int32>
; V12 tmp8 [V12,T11] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt16>
; V13 tmp9 [V13,T12] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int16>
; V14 tmp10 [V14,T13] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Byte>
; V15 tmp11 [V15,T14] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.SByte>
; V16 tmp12 [V16,T15] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Char>
;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Decimal>
; V18 tmp14 [V18,T19] ( 4, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.UnreachableException>
; V19 tmp15 [V19,T20] ( 2, 0 ) ref -> r15 class-hnd exact single-def "Inlining Arg" <System.String>
;* V20 tmp16 [V20,T17] ( 0, 0 ) int -> zero-ref "field V17._flags (fldOffset=0x0)" P-INDEP
;* V21 tmp17 [V21,T18] ( 0, 0 ) int -> zero-ref "field V17._hi32 (fldOffset=0x4)" P-INDEP
; V22 tmp18 [V22,T16] ( 2, 1 ) long -> rbx "field V17._lo64 (fldOffset=0x8)" P-INDEP
; V23 rat0 [V23,T02] ( 3, 5.85) int -> rdi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 0
G_M29411_IG01:
push rbp
push r15
push rbx
lea rbp, [rsp+0x10]
mov rbx, rsi
;; size=12 bbWeight=1 PerfScore 3.75
G_M29411_IG02:
mov edi, dword ptr [rdi+0x0C]
add edi, -4
cmp edi, 11
ja G_M29411_IG17
;; size=15 bbWeight=1 PerfScore 3.50
G_M29411_IG03:
mov edi, edi
lea rax, [reloc @RWD00]
mov eax, dword ptr [rax+4*rdi]
lea rcx, G_M29411_IG02
add rax, rcx
jmp rax
;; size=24 bbWeight=0.92 PerfScore 5.54
G_M29411_IG04:
mov rdi, 0xD1FFAB1E ; System.Decimal
call CORINFO_HELP_NEWSFAST
xor edi, edi
mov qword ptr [rax+0x08], rdi
mov qword ptr [rax+0x10], rbx
jmp G_M29411_IG16
;; size=30 bbWeight=0.50 PerfScore 2.75
G_M29411_IG05:
mov rdi, 0xD1FFAB1E ; System.Double
call CORINFO_HELP_NEWSFAST
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rbx
vmovsd qword ptr [rax+0x08], xmm0
jmp G_M29411_IG16
- ;; size=31 bbWeight=0.50 PerfScore 4.62
+ ;; size=35 bbWeight=0.50 PerfScore 4.79
G_M29411_IG06:
mov rdi, 0xD1FFAB1E ; System.Single
call CORINFO_HELP_NEWSFAST
+ vxorps xmm0, xmm0, xmm0
vcvtusi2ss xmm0, rbx
vmovss dword ptr [rax+0x08], xmm0
jmp G_M29411_IG16
- ;; size=31 bbWeight=0.50 PerfScore 5.62
+ ;; size=35 bbWeight=0.50 PerfScore 5.79
G_M29411_IG07:
mov rdi, 0xD1FFAB1E ; System.UInt64
call CORINFO_HELP_NEWSFAST
mov qword ptr [rax+0x08], rbx
jmp G_M29411_IG16
;; size=24 bbWeight=0.50 PerfScore 2.12
G_M29411_IG08:
mov rdi, 0xD1FFAB1E ; System.Int64
call CORINFO_HELP_NEWSFAST
test rbx, rbx
jl G_M29411_IG18
mov rdi, rbx
mov qword ptr [rax+0x08], rdi
jmp G_M29411_IG16
;; size=36 bbWeight=0.50 PerfScore 2.88
G_M29411_IG09:
mov rdi, 0xD1FFAB1E ; System.UInt32
call CORINFO_HELP_NEWSFAST
mov rdi, rbx
shr rdi, 32
jne G_M29411_IG18
mov edi, ebx
mov dword ptr [rax+0x08], edi
jmp G_M29411_IG16
;; size=38 bbWeight=0.50 PerfScore 3.12
G_M29411_IG10:
mov rdi, 0xD1FFAB1E ; System.Int32
call CORINFO_HELP_NEWSFAST
cmp rbx, 0xD1FFAB1E
ja G_M29411_IG18
mov edi, ebx
mov dword ptr [rax+0x08], edi
jmp G_M29411_IG16
;; size=38 bbWeight=0.50 PerfScore 2.88
G_M29411_IG11:
mov rdi, 0xD1FFAB1E ; System.UInt16
call CORINFO_HELP_NEWSFAST
cmp rbx, 0xFFFF
ja G_M29411_IG18
mov edi, ebx
mov word ptr [rax+0x08], di
jmp G_M29411_IG16
;; size=39 bbWeight=0.50 PerfScore 2.88
G_M29411_IG12:
mov rdi, 0xD1FFAB1E ; System.Int16
call CORINFO_HELP_NEWSFAST
cmp rbx, 0x7FFF
ja G_M29411_IG18
mov edi, ebx
mov word ptr [rax+0x08], di
jmp SHORT G_M29411_IG16
;; size=36 bbWeight=0.50 PerfScore 2.88
G_M29411_IG13:
mov rdi, 0xD1FFAB1E ; System.Byte
call CORINFO_HELP_NEWSFAST
cmp rbx, 255
ja G_M29411_IG18
mov edi, ebx
mov byte ptr [rax+0x08], dil
jmp SHORT G_M29411_IG16
;; size=36 bbWeight=0.50 PerfScore 2.88
G_M29411_IG14:
mov rdi, 0xD1FFAB1E ; System.SByte
call CORINFO_HELP_NEWSFAST
cmp rbx, 127
ja G_M29411_IG18
mov edi, ebx
mov byte ptr [rax+0x08], dil
jmp SHORT G_M29411_IG16
;; size=33 bbWeight=0.50 PerfScore 2.88
G_M29411_IG15:
mov rdi, 0xD1FFAB1E ; System.Char
call CORINFO_HELP_NEWSFAST
cmp rbx, 0xFFFF
ja SHORT G_M29411_IG18
mov edi, ebx
mov word ptr [rax+0x08], di
;; size=30 bbWeight=0.50 PerfScore 1.88
G_M29411_IG16:
pop rbx
pop r15
pop rbp
ret
;; size=5 bbWeight=1 PerfScore 2.50
G_M29411_IG17:
mov rdi, 0xD1FFAB1E ; System.Diagnostics.UnreachableException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov edi, 0x4E07
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov r15, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Exception:.ctor():this
call [rax]System.Exception:.ctor():this
lea rdi, bword ptr [rbx+0x10]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=92 bbWeight=0 PerfScore 0.00
G_M29411_IG18:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dd G_M29411_IG15 - G_M29411_IG02
dd G_M29411_IG14 - G_M29411_IG02
dd G_M29411_IG13 - G_M29411_IG02
dd G_M29411_IG12 - G_M29411_IG02
dd G_M29411_IG11 - G_M29411_IG02
dd G_M29411_IG10 - G_M29411_IG02
dd G_M29411_IG09 - G_M29411_IG02
dd G_M29411_IG08 - G_M29411_IG02
dd G_M29411_IG07 - G_M29411_IG02
dd G_M29411_IG06 - G_M29411_IG02
dd G_M29411_IG05 - G_M29411_IG02
dd G_M29411_IG04 - G_M29411_IG02
-; Total bytes of code 556, prolog size 9, PerfScore 52.66, instruction count 116, allocated bytes for code 556 (MethodHash=9b428d1c) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
+; Total bytes of code 564, prolog size 9, PerfScore 53.00, instruction count 118, allocated bytes for code 564 (MethodHash=9b428d1c) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
; ============================================================ 8 (1.86 % of base) - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this ; Assembly listing for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object: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; 6 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T03] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked>
; V01 arg1 [V01,T00] ( 14, 8 ) long -> rbx single-def
; V02 loc0 [V02,T01] ( 13, 7 ) ref -> rax class-hnd <System.Object>
;* V03 loc1 [V03 ] ( 0, 0 ) int -> zero-ref
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V05 tmp1 [V05,T04] ( 4, 4 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
; V06 tmp2 [V06,T05] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Double>
; V07 tmp3 [V07,T06] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Single>
; V08 tmp4 [V08,T07] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
; V09 tmp5 [V09,T08] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int64>
; V10 tmp6 [V10,T09] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt32>
; V11 tmp7 [V11,T10] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int32>
; V12 tmp8 [V12,T11] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.UInt16>
; V13 tmp9 [V13,T12] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Int16>
; V14 tmp10 [V14,T13] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Byte>
; V15 tmp11 [V15,T14] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.SByte>
; V16 tmp12 [V16,T15] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <System.Char>
;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Decimal>
; V18 tmp14 [V18,T19] ( 4, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.UnreachableException>
; V19 tmp15 [V19,T20] ( 2, 0 ) ref -> r15 class-hnd exact single-def "Inlining Arg" <System.String>
;* V20 tmp16 [V20,T17] ( 0, 0 ) int -> zero-ref "field V17._flags (fldOffset=0x0)" P-INDEP
;* V21 tmp17 [V21,T18] ( 0, 0 ) int -> zero-ref "field V17._hi32 (fldOffset=0x4)" P-INDEP
; V22 tmp18 [V22,T16] ( 2, 1 ) long -> rbx "field V17._lo64 (fldOffset=0x8)" P-INDEP
; V23 rat0 [V23,T02] ( 3, 5.85) int -> rdi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 0
G_M42680_IG01:
push rbp
push r15
push rbx
lea rbp, [rsp+0x10]
mov rbx, rsi
;; size=12 bbWeight=1 PerfScore 3.75
G_M42680_IG02:
mov edi, dword ptr [rdi+0x0C]
add edi, -4
cmp edi, 11
ja G_M42680_IG17
;; size=15 bbWeight=1 PerfScore 3.50
G_M42680_IG03:
mov edi, edi
lea rax, [reloc @RWD00]
mov eax, dword ptr [rax+4*rdi]
lea rcx, G_M42680_IG02
add rax, rcx
jmp rax
;; size=24 bbWeight=0.92 PerfScore 5.54
G_M42680_IG04:
mov rdi, 0xD1FFAB1E ; System.Decimal
call CORINFO_HELP_NEWSFAST
xor edi, edi
mov qword ptr [rax+0x08], rdi
mov qword ptr [rax+0x10], rbx
jmp G_M42680_IG16
;; size=30 bbWeight=0.50 PerfScore 2.75
G_M42680_IG05:
mov rdi, 0xD1FFAB1E ; System.Double
call CORINFO_HELP_NEWSFAST
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rbx
vmovsd qword ptr [rax+0x08], xmm0
jmp G_M42680_IG16
- ;; size=31 bbWeight=0.50 PerfScore 4.62
+ ;; size=35 bbWeight=0.50 PerfScore 4.79
G_M42680_IG06:
mov rdi, 0xD1FFAB1E ; System.Single
call CORINFO_HELP_NEWSFAST
+ vxorps xmm0, xmm0, xmm0
vcvtusi2ss xmm0, rbx
vmovss dword ptr [rax+0x08], xmm0
jmp G_M42680_IG16
- ;; size=31 bbWeight=0.50 PerfScore 5.62
+ ;; size=35 bbWeight=0.50 PerfScore 5.79
G_M42680_IG07:
mov rdi, 0xD1FFAB1E ; System.UInt64
call CORINFO_HELP_NEWSFAST
mov qword ptr [rax+0x08], rbx
jmp G_M42680_IG16
;; size=24 bbWeight=0.50 PerfScore 2.12
G_M42680_IG08:
mov rdi, 0xD1FFAB1E ; System.Int64
call CORINFO_HELP_NEWSFAST
mov qword ptr [rax+0x08], rbx
jmp G_M42680_IG16
;; size=24 bbWeight=0.50 PerfScore 2.12
G_M42680_IG09:
mov rdi, 0xD1FFAB1E ; System.UInt32
call CORINFO_HELP_NEWSFAST
mov dword ptr [rax+0x08], ebx
jmp SHORT G_M42680_IG16
;; size=20 bbWeight=0.50 PerfScore 2.12
G_M42680_IG10:
mov rdi, 0xD1FFAB1E ; System.Int32
call CORINFO_HELP_NEWSFAST
mov dword ptr [rax+0x08], ebx
jmp SHORT G_M42680_IG16
;; size=20 bbWeight=0.50 PerfScore 2.12
G_M42680_IG11:
mov rdi, 0xD1FFAB1E ; System.UInt16
call CORINFO_HELP_NEWSFAST
mov word ptr [rax+0x08], bx
jmp SHORT G_M42680_IG16
;; size=21 bbWeight=0.50 PerfScore 2.12
G_M42680_IG12:
mov rdi, 0xD1FFAB1E ; System.Int16
call CORINFO_HELP_NEWSFAST
mov word ptr [rax+0x08], bx
jmp SHORT G_M42680_IG16
;; size=21 bbWeight=0.50 PerfScore 2.12
G_M42680_IG13:
mov rdi, 0xD1FFAB1E ; System.Byte
call CORINFO_HELP_NEWSFAST
mov byte ptr [rax+0x08], bl
jmp SHORT G_M42680_IG16
;; size=20 bbWeight=0.50 PerfScore 2.12
G_M42680_IG14:
mov rdi, 0xD1FFAB1E ; System.SByte
call CORINFO_HELP_NEWSFAST
mov byte ptr [rax+0x08], bl
jmp SHORT G_M42680_IG16
;; size=20 bbWeight=0.50 PerfScore 2.12
G_M42680_IG15:
mov rdi, 0xD1FFAB1E ; System.Char
call CORINFO_HELP_NEWSFAST
mov word ptr [rax+0x08], bx
;; size=19 bbWeight=0.50 PerfScore 1.12
G_M42680_IG16:
pop rbx
pop r15
pop rbp
ret
;; size=5 bbWeight=1 PerfScore 2.50
G_M42680_IG17:
mov rdi, 0xD1FFAB1E ; System.Diagnostics.UnreachableException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov edi, 0x4E07
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov r15, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Exception:.ctor():this
call [rax]System.Exception:.ctor():this
lea rdi, bword ptr [rbx+0x10]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=92 bbWeight=0 PerfScore 0.00
RWD00 dd G_M42680_IG15 - G_M42680_IG02
dd G_M42680_IG14 - G_M42680_IG02
dd G_M42680_IG13 - G_M42680_IG02
dd G_M42680_IG12 - G_M42680_IG02
dd G_M42680_IG11 - G_M42680_IG02
dd G_M42680_IG10 - G_M42680_IG02
dd G_M42680_IG09 - G_M42680_IG02
dd G_M42680_IG08 - G_M42680_IG02
dd G_M42680_IG07 - G_M42680_IG02
dd G_M42680_IG06 - G_M42680_IG02
dd G_M42680_IG05 - G_M42680_IG02
dd G_M42680_IG04 - G_M42680_IG02
-; Total bytes of code 429, prolog size 9, PerfScore 46.41, instruction count 89, allocated bytes for code 429 (MethodHash=52025947) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
+; Total bytes of code 437, prolog size 9, PerfScore 46.75, instruction count 91, allocated bytes for code 437 (MethodHash=52025947) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
; ============================================================ 8 (36.36 % of base) - System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex ; Assembly listing for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp 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 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V02 tmp1 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <System.Numerics.Complex>
;* V03 tmp2 [V03 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
; V04 tmp3 [V04,T01] ( 2, 2 ) double -> mm0 "field V02.m_real (fldOffset=0x0)" P-INDEP
; V05 tmp4 [V05,T02] ( 2, 2 ) double -> mm1 "field V02.m_imaginary (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 0
G_M61227_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M61227_IG02:
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rdi
vxorps xmm1, xmm1, xmm1
- ;; size=10 bbWeight=1 PerfScore 4.33
+ ;; size=14 bbWeight=1 PerfScore 4.67
G_M61227_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=ef0210d4) for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
+; Total bytes of code 15, prolog size 0, PerfScore 5.67, instruction count 4, allocated bytes for code 15 (MethodHash=ef0210d4) for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
; ============================================================ 8 (57.14 % of base) - System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat ; Assembly listing for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp 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 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V02 tmp1 [V02 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.NFloat>
;* V03 tmp2 [V03 ] ( 0, 0 ) double -> zero-ref "Inlining Arg"
; V04 tmp3 [V04,T01] ( 2, 2 ) double -> mm0 "field V02._value (fldOffset=0x0)" P-INDEP
;
; Lcl frame size = 0
G_M5643_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M5643_IG02:
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rdi
- ;; size=6 bbWeight=1 PerfScore 4.00
+ ;; size=10 bbWeight=1 PerfScore 4.33
G_M5643_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 7, prolog size 0, PerfScore 5.00, instruction count 2, allocated bytes for code 7 (MethodHash=0fefe9f4) for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=0fefe9f4) for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
; ============================================================ 6 (0.58 % of base) - Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double ; Assembly listing for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (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; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 28, 15 ) ref -> rbx class-hnd single-def <System.Object>
; V01 arg1 [V01,T02] ( 3, 2.50) ref -> r15 class-hnd single-def <System.Globalization.NumberFormatInfo>
; V02 loc0 [V02,T05] ( 26, 13.50) double -> mm0
; V03 loc1 [V03,T01] ( 16, 8 ) ref -> r14 class-hnd single-def <System.IConvertible>
;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V06 tmp1 [V06,T07] ( 2, 0 ) ref -> r15 class-hnd exact single-def "non-inline candidate call" <System.String>
; V07 tmp2 [V07,T06] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.InvalidCastException>
;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Decimal>
;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V11 tmp6 [V11 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V12 tmp7 [V12 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V17 tmp12 [V17 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V18 tmp13 [V18 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
; V21 tmp16 [V21 ] ( 2, 2 ) struct (16) [rbp-0x28] do-not-enreg[XSR] multireg-ret addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
; V22 tmp17 [V22 ] ( 2, 2 ) int -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V21._flags (fldOffset=0x0)" P-DEP
; V23 tmp18 [V23 ] ( 2, 2 ) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V21._hi32 (fldOffset=0x4)" P-DEP
; V24 tmp19 [V24 ] ( 2, 2 ) long -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V21._lo64 (fldOffset=0x8)" P-DEP
; V25 tmp20 [V25,T04] ( 2, 2 ) ref -> rdi single-def "argument with side effect"
; V26 tmp21 [V26,T08] ( 2, 0 ) ref -> rbx single-def "argument with side effect"
; V27 tmp22 [V27,T09] ( 2, 0 ) ref -> rdx single-def "argument with side effect"
; V28 tmp23 [V28,T10] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
; V29 rat0 [V29,T03] ( 3, 2.94) int -> rax "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 24
G_M32782_IG01:
push rbp
push r15
push r14
push rbx
sub rsp, 24
lea rbp, [rsp+0x30]
mov rbx, rdi
mov r15, rsi
;; size=21 bbWeight=1 PerfScore 5.25
G_M32782_IG02:
test rbx, rbx
je G_M32782_IG29
;; size=9 bbWeight=1 PerfScore 1.25
G_M32782_IG03:
mov rsi, rbx
mov rdi, 0xD1FFAB1E ; System.IConvertible
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFINTERFACE
call [rax]CORINFO_HELP_ISINSTANCEOFINTERFACE
mov r14, rax
test r14, r14
je G_M32782_IG31
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:GetTypeCode():int:this
call [r11]System.IConvertible:GetTypeCode():int:this
add eax, -3
cmp eax, 15
ja G_M32782_IG31
;; size=65 bbWeight=0.50 PerfScore 5.12
G_M32782_IG04:
mov edi, eax
lea r11, [reloc @RWD00]
mov r11d, dword ptr [r11+4*rdi]
lea rsi, G_M32782_IG02
add r11, rsi
jmp r11
;; size=26 bbWeight=0.47 PerfScore 2.82
G_M32782_IG05:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToString(System.IFormatProvider):System.String:this
xor rsi, rsi
call [r11]System.IConvertible:ToString(System.IFormatProvider):System.String:this
mov rdi, rax
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.String,System.Globalization.NumberFormatInfo):double
call [rax]Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.String,System.Globalization.NumberFormatInfo):double
jmp G_M32782_IG30
;; size=41 bbWeight=0.50 PerfScore 4.75
G_M32782_IG06:
mov rdi, 0xD1FFAB1E ; System.Decimal
cmp qword ptr [rbx], rdi
je SHORT G_M32782_IG08
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToDecimal(System.IFormatProvider):System.Decimal:this
xor rsi, rsi
call [r11]System.IConvertible:ToDecimal(System.IFormatProvider):System.Decimal:this
mov qword ptr [rbp-0x28], rax
mov qword ptr [rbp-0x20], rdx
lea rdi, [rbp-0x28]
mov rax, 0xD1FFAB1E ; code for System.Decimal+DecCalc:VarR8FromDec(byref):double
call [rax]System.Decimal+DecCalc:VarR8FromDec(byref):double
jmp G_M32782_IG30
;; size=62 bbWeight=0.50 PerfScore 7.88
G_M32782_IG07:
mov rdi, 0xD1FFAB1E ; System.Double
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG08
vmovsd xmm0, qword ptr [rbx+0x08]
jmp G_M32782_IG30
;; size=25 bbWeight=0.50 PerfScore 5.12
G_M32782_IG08:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToDouble(System.IFormatProvider):double:this
xor rsi, rsi
call [r11]System.IConvertible:ToDouble(System.IFormatProvider):double:this
jmp G_M32782_IG30
;; size=23 bbWeight=0.50 PerfScore 2.88
G_M32782_IG09:
mov rdi, 0xD1FFAB1E ; System.Single
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG10
vcvtss2sd xmm0, xmm0, dword ptr [rbx+0x08]
jmp G_M32782_IG30
;; size=25 bbWeight=0.50 PerfScore 6.62
G_M32782_IG10:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToSingle(System.IFormatProvider):float:this
xor rsi, rsi
call [r11]System.IConvertible:ToSingle(System.IFormatProvider):float:this
vcvtss2sd xmm0, xmm0, xmm0
jmp G_M32782_IG30
;; size=27 bbWeight=0.50 PerfScore 4.88
G_M32782_IG11:
mov rdi, 0xD1FFAB1E ; System.UInt64
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG12
mov rdi, qword ptr [rbx+0x08]
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rdi
jmp G_M32782_IG30
- ;; size=30 bbWeight=0.50 PerfScore 6.12
+ ;; size=34 bbWeight=0.50 PerfScore 6.29
G_M32782_IG12:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToUInt64(System.IFormatProvider):ulong:this
xor rsi, rsi
call [r11]System.IConvertible:ToUInt64(System.IFormatProvider):ulong:this
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rax
jmp G_M32782_IG30
- ;; size=29 bbWeight=0.50 PerfScore 4.88
+ ;; size=33 bbWeight=0.50 PerfScore 5.04
G_M32782_IG13:
mov rdi, 0xD1FFAB1E ; System.Int64
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG14
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, qword ptr [rbx+0x08]
jmp G_M32782_IG30
;; size=30 bbWeight=0.50 PerfScore 7.79
G_M32782_IG14:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToInt64(System.IFormatProvider):long:this
xor rsi, rsi
call [r11]System.IConvertible:ToInt64(System.IFormatProvider):long:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, rax
jmp G_M32782_IG30
;; size=32 bbWeight=0.50 PerfScore 6.04
G_M32782_IG15:
mov rdi, 0xD1FFAB1E ; System.UInt32
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG16
- mov edi, dword ptr [rbx+0x08]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rdi
+ vcvtusi2sd xmm0, dword ptr [rbx+0x08]
jmp G_M32782_IG30
- ;; size=32 bbWeight=0.50 PerfScore 7.29
+ ;; size=31 bbWeight=0.50 PerfScore 6.79
G_M32782_IG16:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToUInt32(System.IFormatProvider):uint:this
xor rsi, rsi
call [r11]System.IConvertible:ToUInt32(System.IFormatProvider):uint:this
- mov edi, eax
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rdi
+ vcvtusi2sd xmm0, eax
jmp G_M32782_IG30
- ;; size=34 bbWeight=0.50 PerfScore 6.17
+ ;; size=33 bbWeight=0.50 PerfScore 5.04
G_M32782_IG17:
mov rdi, 0xD1FFAB1E ; System.Int32
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG18
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, dword ptr [rbx+0x08]
jmp G_M32782_IG30
;; size=29 bbWeight=0.50 PerfScore 7.79
G_M32782_IG18:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToInt32(System.IFormatProvider):int:this
xor rsi, rsi
call [r11]System.IConvertible:ToInt32(System.IFormatProvider):int:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp G_M32782_IG30
;; size=31 bbWeight=0.50 PerfScore 6.04
G_M32782_IG19:
mov rdi, 0xD1FFAB1E ; System.UInt16
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG20
movzx rdi, word ptr [rbx+0x08]
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, edi
jmp G_M32782_IG30
;; size=32 bbWeight=0.50 PerfScore 7.29
G_M32782_IG20:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToUInt16(System.IFormatProvider):ushort:this
xor rsi, rsi
call [r11]System.IConvertible:ToUInt16(System.IFormatProvider):ushort:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp G_M32782_IG30
;; size=31 bbWeight=0.50 PerfScore 6.04
G_M32782_IG21:
mov rdi, 0xD1FFAB1E ; System.Int16
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG22
movsx rdi, word ptr [rbx+0x08]
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, edi
jmp G_M32782_IG30
;; size=33 bbWeight=0.50 PerfScore 8.29
G_M32782_IG22:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToInt16(System.IFormatProvider):short:this
xor rsi, rsi
call [r11]System.IConvertible:ToInt16(System.IFormatProvider):short:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp G_M32782_IG30
;; size=31 bbWeight=0.50 PerfScore 6.04
G_M32782_IG23:
mov rdi, 0xD1FFAB1E ; System.Byte
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG24
movzx rdi, byte ptr [rbx+0x08]
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, edi
jmp G_M32782_IG30
;; size=33 bbWeight=0.50 PerfScore 7.29
G_M32782_IG24:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToByte(System.IFormatProvider):ubyte:this
xor rsi, rsi
call [r11]System.IConvertible:ToByte(System.IFormatProvider):ubyte:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp G_M32782_IG30
;; size=31 bbWeight=0.50 PerfScore 6.04
G_M32782_IG25:
mov rdi, 0xD1FFAB1E ; System.SByte
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG26
movsx rdi, byte ptr [rbx+0x08]
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, edi
jmp SHORT G_M32782_IG30
;; size=30 bbWeight=0.50 PerfScore 8.29
G_M32782_IG26:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToSByte(System.IFormatProvider):byte:this
xor rsi, rsi
call [r11]System.IConvertible:ToSByte(System.IFormatProvider):byte:this
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp SHORT G_M32782_IG30
;; size=28 bbWeight=0.50 PerfScore 6.04
G_M32782_IG27:
mov rdi, 0xD1FFAB1E ; System.Boolean
cmp qword ptr [rbx], rdi
jne SHORT G_M32782_IG28
cmp byte ptr [rbx+0x08], 0
setne dil
movzx rdi, dil
neg edi
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, edi
jmp SHORT G_M32782_IG30
;; size=39 bbWeight=0.50 PerfScore 8.54
G_M32782_IG28:
mov rdi, r14
mov r11, 0xD1FFAB1E ; code for System.IConvertible:ToBoolean(System.IFormatProvider):ubyte:this
xor rsi, rsi
call [r11]System.IConvertible:ToBoolean(System.IFormatProvider):ubyte:this
test eax, eax
setne al
movzx rax, al
neg eax
vxorps xmm0, xmm0, xmm0
vcvtsi2sd xmm0, xmm0, eax
jmp SHORT G_M32782_IG30
;; size=38 bbWeight=0.50 PerfScore 6.92
G_M32782_IG29:
vxorps xmm0, xmm0, xmm0
;; size=4 bbWeight=0.50 PerfScore 0.17
G_M32782_IG30:
add rsp, 24
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
G_M32782_IG31:
mov rax, 0xD1FFAB1E ; code for System.SR:get_InvalidCast_FromTo():System.String
call [rax]System.SR:get_InvalidCast_FromTo():System.String
mov r15, rax
mov rdi, 0xD1FFAB1E ; System.InvalidCastException
call CORINFO_HELP_NEWSFAST
mov r14, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for Microsoft.VisualBasic.CompilerServices.Utils:VBFriendlyName(System.Object):System.String
call [rax]Microsoft.VisualBasic.CompilerServices.Utils:VBFriendlyName(System.Object):System.String
mov rbx, rax
mov edi, 247
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdx, rax
mov rsi, rbx
mov rdi, 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, r14
mov rax, 0xD1FFAB1E ; code for System.InvalidCastException:.ctor(System.String):this
call [rax]System.InvalidCastException:.ctor(System.String):this
mov rdi, r14
call CORINFO_HELP_THROW
int3
;; size=119 bbWeight=0 PerfScore 0.00
RWD00 dd G_M32782_IG27 - G_M32782_IG02
dd G_M32782_IG31 - G_M32782_IG02
dd G_M32782_IG25 - G_M32782_IG02
dd G_M32782_IG23 - G_M32782_IG02
dd G_M32782_IG21 - G_M32782_IG02
dd G_M32782_IG19 - G_M32782_IG02
dd G_M32782_IG17 - G_M32782_IG02
dd G_M32782_IG15 - G_M32782_IG02
dd G_M32782_IG13 - G_M32782_IG02
dd G_M32782_IG11 - G_M32782_IG02
dd G_M32782_IG09 - G_M32782_IG02
dd G_M32782_IG07 - G_M32782_IG02
dd G_M32782_IG06 - G_M32782_IG02
dd G_M32782_IG31 - G_M32782_IG02
dd G_M32782_IG31 - G_M32782_IG02
dd G_M32782_IG05 - G_M32782_IG02
-; Total bytes of code 1031, prolog size 15, PerfScore 172.91, instruction count 234, allocated bytes for code 1031 (MethodHash=67dd7ff1) for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
+; Total bytes of code 1037, prolog size 15, PerfScore 171.62, instruction count 234, allocated bytes for code 1037 (MethodHash=67dd7ff1) for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
; ============================================================ 4 (57.14 % of base) - System.Convert:ToDouble(ulong):double ; Assembly listing for method System.Convert:ToDouble(ulong):double (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M21699_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M21699_IG02:
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rdi
- ;; size=6 bbWeight=1 PerfScore 4.00
+ ;; size=10 bbWeight=1 PerfScore 4.33
G_M21699_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 7, prolog size 0, PerfScore 5.00, instruction count 2, allocated bytes for code 7 (MethodHash=6446ab3c) for method System.Convert:ToDouble(ulong):double (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=6446ab3c) for method System.Convert:ToDouble(ulong):double (FullOpts)
; ============================================================ 4 (57.14 % of base) - System.Convert:ToSingle(ulong):float ; Assembly listing for method System.Convert:ToSingle(ulong):float (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M55401_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M55401_IG02:
+ vxorps xmm0, xmm0, xmm0
vcvtusi2ss xmm0, rdi
- ;; size=6 bbWeight=1 PerfScore 6.00
+ ;; size=10 bbWeight=1 PerfScore 6.33
G_M55401_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 7, prolog size 0, PerfScore 7.00, instruction count 2, allocated bytes for code 7 (MethodHash=86f52796) for method System.Convert:ToSingle(ulong):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=86f52796) for method System.Convert:ToSingle(ulong):float (FullOpts)
; ============================================================ 4 (2.99 % of base) - System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this ; Assembly listing for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan: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; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 4, 3.50) ref -> rbx this class-hnd single-def <System.Diagnostics.Process>
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Environment+ProcessCpuUsage>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V03 tmp1 [V03,T01] ( 2, 2 ) struct (80) [rbp-0x60] do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <Interop+procfs+ParsedStat>
;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
; V05 tmp3 [V05,T03] ( 1, 0.50) long -> rax "field V01.<UserTime>k__BackingField (fldOffset=0x0)" P-INDEP
; V06 tmp4 [V06,T02] ( 2, 1 ) long -> rax "field V01.<PrivilegedTime>k__BackingField (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 80
G_M65406_IG01:
push rbp
push r15
push rbx
sub rsp, 80
lea rbp, [rsp+0x60]
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x60], zmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov rbx, rdi
;; size=36 bbWeight=1 PerfScore 8.33
G_M65406_IG02:
mov r15d, dword ptr [rbx+0xC0]
mov rax, 0xD1FFAB1E ; code for System.Environment:get_ProcessId():int
call [rax]System.Environment:get_ProcessId():int
cmp r15d, eax
jne SHORT G_M65406_IG05
;; size=24 bbWeight=1 PerfScore 6.50
G_M65406_IG03:
mov rax, 0xD1FFAB1E ; code for System.Environment:get_CpuUsage():System.Environment+ProcessCpuUsage
call [rax]System.Environment:get_CpuUsage():System.Environment+ProcessCpuUsage
mov rax, rdx
;; size=15 bbWeight=0.50 PerfScore 1.75
G_M65406_IG04:
add rsp, 80
pop rbx
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.38
G_M65406_IG05:
lea rsi, [rbp-0x60]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Process:GetStat():Interop+procfs+ParsedStat:this
call [rax]System.Diagnostics.Process:GetStat():Interop+procfs+ParsedStat:this
mov rax, qword ptr [rbp-0x50]
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rax
mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
- ;; size=39 bbWeight=0.50 PerfScore 4.62
+ ;; size=43 bbWeight=0.50 PerfScore 4.79
G_M65406_IG06:
add rsp, 80
pop rbx
pop r15
pop rbp
tail.jmp [rax]System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
;; size=11 bbWeight=0.50 PerfScore 1.88
-; Total bytes of code 134, prolog size 33, PerfScore 24.46, instruction count 34, allocated bytes for code 134 (MethodHash=43ad0081) for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
+; Total bytes of code 138, prolog size 33, PerfScore 24.63, instruction count 35, allocated bytes for code 138 (MethodHash=43ad0081) for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
; ============================================================ 4 (5.41 % of base) - System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this ; Assembly listing for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Diagnostics.ProcessThread>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V02 tmp1 [V02,T01] ( 2, 4 ) struct (80) [rbp-0x50] do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <Interop+procfs+ParsedStat>
;
; Lcl frame size = 80
G_M52528_IG01:
push rbp
sub rsp, 80
lea rbp, [rsp+0x50]
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x50], zmm8
vmovdqa xmmword ptr [rbp-0x10], xmm8
;; size=30 bbWeight=1 PerfScore 6.08
G_M52528_IG02:
lea rsi, [rbp-0x50]
mov rax, 0xD1FFAB1E ; code for System.Diagnostics.ProcessThread:GetStat():Interop+procfs+ParsedStat:this
call [rax]System.Diagnostics.ProcessThread:GetStat():Interop+procfs+ParsedStat:this
mov rax, qword ptr [rbp-0x40]
+ vxorps xmm0, xmm0, xmm0
vcvtusi2sd xmm0, rax
mov rax, 0xD1FFAB1E ; code for System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
- ;; size=36 bbWeight=1 PerfScore 9.00
+ ;; size=40 bbWeight=1 PerfScore 9.33
G_M52528_IG03:
add rsp, 80
pop rbp
tail.jmp [rax]System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
;; size=8 bbWeight=1 PerfScore 2.75
-; Total bytes of code 74, prolog size 30, PerfScore 17.83, instruction count 15, allocated bytes for code 74 (MethodHash=559b32cf) for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
+; Total bytes of code 78, prolog size 30, PerfScore 18.17, instruction count 16, allocated bytes for code 78 (MethodHash=559b32cf) for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/e75cb52d5ab1f0749b7be5d8c3e5bcdb |
Top method improvements-24 (-3.07 % of base) - System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double ; Assembly listing for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (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; 13 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T06] ( 9, 6.50) ref -> rbx class-hnd single-def <System.Xml.Xsl.XPathConvert+FloatingDecimal>
; V01 loc0 [V01 ] ( 9, 4.50) struct (24) [rbp-0x40] do-not-enreg[XSF] addr-exposed ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
; V02 loc1 [V02,T11] ( 6, 3 ) struct (24) [rbp-0x58] do-not-enreg[SF] ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
; V03 loc2 [V03 ] ( 14, 7 ) struct (24) [rbp-0x70] do-not-enreg[XSF] addr-exposed ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
; V04 loc3 [V04,T05] ( 4, 9 ) int -> rax
; V05 loc4 [V05,T08] ( 8, 4.50) int -> r14
; V06 loc5 [V06,T24] ( 20, 16.75) double -> [rbp-0x78]
;* V07 loc6 [V07 ] ( 0, 0 ) double -> zero-ref
; V08 loc7 [V08,T04] ( 7, 12 ) int -> r15
;* V09 loc8 [V09,T22] ( 0, 0 ) int -> zero-ref
;* V10 loc9 [V10,T23] ( 0, 0 ) int -> zero-ref
;* V11 loc10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[double]>
; V12 OutArgs [V12 ] ( 1, 1 ) struct (24) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V13 tmp1 [V13,T17] ( 2, 2 ) int -> rax "Span.get_Item index"
;* V14 tmp2 [V14 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
;* V15 tmp3 [V15 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
;* V16 tmp4 [V16 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
;* V17 tmp5 [V17 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
; V18 tmp6 [V18,T15] ( 4, 2 ) int -> rdi "Inline stloc first use temp"
; V19 tmp7 [V19,T18] ( 3, 1.50) int -> rdi "Inline stloc first use temp"
; V20 tmp8 [V20,T13] ( 3, 3 ) int -> rdi "Inlining Arg"
;* V21 tmp9 [V21 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V22 tmp10 [V22 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
;* V23 tmp11 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
;* V24 tmp12 [V24 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V25 tmp13 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp14 [V26 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
;* V27 tmp15 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp16 [V28 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V29 tmp17 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp18 [V30 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
; V31 tmp19 [V31,T09] ( 8, 4 ) int -> r15 "V02.[000..004)"
; V32 tmp20 [V32,T14] ( 5, 2.50) int -> r14 "V02.[004..008)"
; V33 tmp21 [V33,T12] ( 6, 3 ) int -> r13 "V02.[008..012)"
; V34 tmp22 [V34,T16] ( 4, 2 ) int -> r12 "V02.[012..016)"
; V35 tmp23 [V35,T21] ( 2, 1 ) int -> rdi "V02.[016..020)"
; V36 tmp24 [V36,T26] ( 2, 2 ) double -> mm0 "argument with side effect"
; V37 tmp25 [V37,T00] ( 3, 24 ) ref -> rdx "arr expr"
; V38 tmp26 [V38,T01] ( 3, 24 ) ref -> rdi "arr expr"
; V39 cse0 [V39,T07] ( 4, 8.50) ref -> rcx hoist multi-def "CSE #02: aggressive"
; V40 cse1 [V40,T10] ( 5, 3.50) int -> rdi "CSE #01: moderate"
; V41 cse2 [V41,T25] ( 2, 4.25) double -> mm1 hoist "CSE #04: moderate"
; V42 cse3 [V42,T19] ( 3, 1.50) int -> r14 "CSE #05: moderate"
; V43 cse4 [V43,T20] ( 3, 1.50) int -> rdi "CSE #07: moderate"
; V44 rat0 [V44,T03] ( 6, 20.25) long -> rax "Widened IV V10"
; V45 rat1 [V45,T02] ( 6, 20.50) long -> rdx "Widened IV V09"
;
; Lcl frame size = 104
G_M21464_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 104
lea rbp, [rsp+0x90]
mov rbx, rdi
;; size=25 bbWeight=1 PerfScore 7.00
G_M21464_IG02:
mov r15d, dword ptr [rbx+0x18]
mov edi, dword ptr [rbx+0x10]
mov r14d, edi
sub r14d, r15d
cmp r15d, 15
jg SHORT G_M21464_IG04
;; size=19 bbWeight=1 PerfScore 5.75
G_M21464_IG03:
cmp r14d, -22
jl SHORT G_M21464_IG04
cmp edi, 37
jle G_M21464_IG12
;; size=15 bbWeight=0.50 PerfScore 1.25
G_M21464_IG04:
cmp edi, 310
jge G_M21464_IG11
cmp edi, -325
jle G_M21464_IG10
lea rdi, [rbp-0x40]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:.ctor(System.Xml.Xsl.XPathConvert+FloatingDecimal):this
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:.ctor(System.Xml.Xsl.XPathConvert+FloatingDecimal):this
mov edi, dword ptr [rbp-0x30]
test edi, edi
je G_M21464_IG09
mov r15d, dword ptr [rbp-0x40]
mov r14d, dword ptr [rbp-0x3C]
mov r13d, dword ptr [rbp-0x38]
mov r12d, dword ptr [rbp-0x34]
inc edi
shr edi, 1
je SHORT G_M21464_IG05
add r15d, edi
cmp r15d, edi
jae SHORT G_M21464_IG05
inc r14d
jne SHORT G_M21464_IG05
inc r13d
jne SHORT G_M21464_IG05
mov r13d, 0xD1FFAB1E
mov edi, r15d
shr edi, 1
and r15d, 1
add r15d, edi
inc r12d
;; size=115 bbWeight=0.50 PerfScore 10.12
G_M21464_IG05:
vmovdqu xmm0, xmmword ptr [rbp-0x40]
vmovdqu xmmword ptr [rbp-0x70], xmm0
mov edi, dword ptr [rbp-0x30]
mov dword ptr [rbp-0x60], edi
mov edi, dword ptr [rbp-0x60]
inc edi
shr edi, 1
je SHORT G_M21464_IG06
neg edi
mov eax, edi
add eax, dword ptr [rbp-0x70]
mov dword ptr [rbp-0x70], eax
cmp dword ptr [rbp-0x70], edi
jb SHORT G_M21464_IG06
mov edi, dword ptr [rbp-0x6C]
dec edi
mov dword ptr [rbp-0x6C], edi
cmp dword ptr [rbp-0x6C], -1
jb SHORT G_M21464_IG06
mov edi, dword ptr [rbp-0x68]
dec edi
mov dword ptr [rbp-0x68], edi
test dword ptr [rbp-0x68], 0xD1FFAB1E
jne SHORT G_M21464_IG06
lea rdi, [rbp-0x70]
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:Normalize():this
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:Normalize():this
;; size=87 bbWeight=0.50 PerfScore 14.75
G_M21464_IG06:
xor eax, eax
mov dword ptr [rbp-0x60], eax
mov dword ptr [rbp-0x58], r15d
mov dword ptr [rbp-0x54], r14d
mov dword ptr [rbp-0x50], r13d
mov dword ptr [rbp-0x4C], r12d
;; size=21 bbWeight=0.50 PerfScore 2.62
G_M21464_IG07:
mov dword ptr [rbp-0x48], eax
vmovdqu xmm0, xmmword ptr [rbp-0x58]
vmovdqu xmmword ptr [rsp], xmm0
mov rax, qword ptr [rbp-0x48]
mov qword ptr [rsp+0x10], rax
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
vmovsd qword ptr [rbp-0x78], xmm0
vmovdqu xmm1, xmmword ptr [rbp-0x70]
vmovdqu xmmword ptr [rsp], xmm1
mov rax, qword ptr [rbp-0x60]
mov qword ptr [rsp+0x10], rax
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
vmovsd xmm1, qword ptr [rbp-0x78]
vucomisd xmm0, xmm1
vmovaps xmm0, xmm1
jp SHORT G_M21464_IG08
je G_M21464_IG22
;; size=91 bbWeight=0.50 PerfScore 13.88
G_M21464_IG08:
vmovdqu xmm0, xmmword ptr [rbp-0x40]
vmovdqu xmmword ptr [rsp], xmm0
mov rax, qword ptr [rbp-0x30]
mov qword ptr [rsp+0x10], rax
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+FloatingDecimal:AdjustDbl(double):double:this
call [rax]System.Xml.Xsl.XPathConvert+FloatingDecimal:AdjustDbl(double):double:this
jmp G_M21464_IG22
align [2 bytes for IG14]
;; size=53 bbWeight=0.50 PerfScore 7.38
G_M21464_IG09:
vmovdqu xmm0, xmmword ptr [rbp-0x40]
vmovdqu xmmword ptr [rsp], xmm0
mov rax, qword ptr [rbp-0x30]
mov qword ptr [rsp+0x10], rax
mov rax, 0xD1FFAB1E ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
call [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
jmp G_M21464_IG22
;; size=36 bbWeight=0.50 PerfScore 5.62
G_M21464_IG10:
vxorps xmm0, xmm0, xmm0
jmp G_M21464_IG22
;; size=9 bbWeight=0.50 PerfScore 1.17
G_M21464_IG11:
vmovsd xmm0, qword ptr [reloc @RWD00]
jmp G_M21464_IG22
;; size=13 bbWeight=0.50 PerfScore 2.50
G_M21464_IG12:
cmp r15d, 9
- jle G_M21464_IG16
+ jle SHORT G_M21464_IG16
+ ;; NOP compensation instructions of 4 bytes.
;; size=10 bbWeight=0.50 PerfScore 0.62
G_M21464_IG13:
vxorps xmm0, xmm0, xmm0
xor eax, eax
mov rcx, gword ptr [rbx+0x08]
vmovsd xmm1, qword ptr [reloc @RWD08]
;; size=18 bbWeight=0.25 PerfScore 1.40
G_M21464_IG14:
mov rdx, rcx
cmp eax, dword ptr [rdx+0x08]
jae G_M21464_IG26
movzx rdx, byte ptr [rdx+rax+0x10]
vxorps xmm2, xmm2, xmm2
vcvtsi2sd xmm2, xmm2, edx
vmulsd xmm0, xmm0, xmm1
vaddsd xmm0, xmm2, xmm0
inc eax
cmp eax, r15d
jl SHORT G_M21464_IG14
;; size=40 bbWeight=4 PerfScore 80.33
G_M21464_IG15:
test r14d, r14d
- jle G_M21464_IG20
+ jle SHORT G_M21464_IG20
cmp r14d, 22
- jle G_M21464_IG21
+ jle SHORT G_M21464_IG21
+ ;; NOP compensation instructions of 4 bytes.
add r14d, -22
cmp r14d, 23
jae G_M21464_IG26
mov eax, r14d
mov rcx, 0xD1FFAB1E ; static handle
vmulsd xmm0, xmm0, qword ptr [rcx+8*rax]
vmulsd xmm0, xmm0, qword ptr [reloc @RWD16]
jmp SHORT G_M21464_IG22
- align [14 bytes for IG18]
- ;; size=75 bbWeight=0.50 PerfScore 8.75
+ align [2 bytes for IG18]
+ ;; size=59 bbWeight=0.50 PerfScore 8.75
G_M21464_IG16:
xor eax, eax
xor edx, edx
test r15d, r15d
jle SHORT G_M21464_IG19
;; size=9 bbWeight=0.50 PerfScore 0.88
G_M21464_IG17:
mov rcx, gword ptr [rbx+0x08]
;; size=4 bbWeight=0.25 PerfScore 0.50
G_M21464_IG18:
mov rdi, rcx
cmp edx, dword ptr [rdi+0x08]
- jae G_M21464_IG26
+ jae SHORT G_M21464_IG26
movzx rdi, byte ptr [rdi+rdx+0x10]
lea eax, [rax+4*rax]
lea eax, [rdi+2*rax]
inc edx
cmp edx, r15d
jl SHORT G_M21464_IG18
- ;; size=31 bbWeight=4 PerfScore 35.00
+ ;; size=27 bbWeight=4 PerfScore 35.00
G_M21464_IG19:
- mov eax, eax
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- jmp G_M21464_IG15
- ;; size=16 bbWeight=0.50 PerfScore 4.29
+ vcvtusi2sd xmm0, eax
+ jmp SHORT G_M21464_IG15
+ ;; size=12 bbWeight=0.50 PerfScore 3.17
G_M21464_IG20:
test r14d, r14d
jge SHORT G_M21464_IG22
mov eax, r14d
neg eax
mov rcx, 0xD1FFAB1E ; static handle
vdivsd xmm0, xmm0, qword ptr [rcx+8*rax]
jmp SHORT G_M21464_IG22
;; size=27 bbWeight=0.50 PerfScore 9.50
G_M21464_IG21:
mov eax, r14d
mov rcx, 0xD1FFAB1E ; static handle
vmulsd xmm0, xmm0, qword ptr [rcx+8*rax]
;; size=18 bbWeight=0.50 PerfScore 3.25
G_M21464_IG22:
cmp dword ptr [rbx+0x14], 0
jge SHORT G_M21464_IG25
;; size=6 bbWeight=1 PerfScore 4.00
G_M21464_IG23:
vxorps xmm0, xmm0, xmmword ptr [reloc @RWD32]
;; size=8 bbWeight=0.50 PerfScore 1.00
G_M21464_IG24:
add rsp, 104
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M21464_IG25:
add rsp, 104
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M21464_IG26:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dq 7FF0000000000000h ; inf
RWD08 dq 4024000000000000h ; 10
RWD16 dq 4480F0CF064DD592h ; 1e+22
RWD24 dd 00000000h, 00000000h
RWD32 dq 8000000000000000h, 8000000000000000h
-; Total bytes of code 782, prolog size 25, PerfScore 225.81, instruction count 203, allocated bytes for code 782 (MethodHash=776aac27) for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
+; Total bytes of code 758, prolog size 25, PerfScore 224.69, instruction count 202, allocated bytes for code 758 (MethodHash=776aac27) for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
; ============================================================ -20 (-17.86 % of base) - System.Runtime.Intrinsics.Vector128:g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] ; Assembly listing for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (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; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 4, 4 ) byref -> rdi single-def
; V01 arg0 [V01 ] ( 4, 4 ) simd16 -> [rbp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Runtime.Intrinsics.Vector128`1[uint]>
; V02 loc0 [V02 ] ( 5, 5 ) simd16 -> [rbp-0x10] do-not-enreg[XS] addr-exposed ld-addr-op <System.Runtime.Intrinsics.Vector128`1[float]>
;* V03 loc1 [V03,T01] ( 0, 0 ) int -> zero-ref
;* V04 loc2 [V04 ] ( 0, 0 ) float -> zero-ref
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 16
G_M5341_IG01:
push rbp
sub rsp, 16
lea rbp, [rsp+0x10]
;; size=10 bbWeight=1 PerfScore 1.75
G_M5341_IG02:
- mov eax, dword ptr [rbp+0x10]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x10]
vmovss dword ptr [rbp-0x10], xmm0
- mov eax, dword ptr [rbp+0x14]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x14]
vmovss dword ptr [rbp-0x0C], xmm0
- mov eax, dword ptr [rbp+0x18]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x18]
vmovss dword ptr [rbp-0x08], xmm0
- mov eax, dword ptr [rbp+0x1C]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x1C]
vmovss dword ptr [rbp-0x04], xmm0
vmovaps xmm0, xmmword ptr [rbp-0x10]
vmovups xmmword ptr [rdi], xmm0
mov rax, rdi
- ;; size=96 bbWeight=1 PerfScore 54.58
+ ;; size=76 bbWeight=1 PerfScore 42.58
G_M5341_IG03:
add rsp, 16
pop rbp
ret
;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 112, prolog size 10, PerfScore 58.08, instruction count 29, allocated bytes for code 112 (MethodHash=e8c5eb22) for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
+; Total bytes of code 92, prolog size 10, PerfScore 46.08, instruction count 21, allocated bytes for code 92 (MethodHash=e8c5eb22) for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
; ============================================================ -10 (-14.71 % of base) - System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] ; Assembly listing for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (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; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 4, 4 ) byref -> rdi single-def
; V01 arg0 [V01 ] ( 2, 2 ) struct ( 8) [rbp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Runtime.Intrinsics.Vector64`1[uint]>
; V02 loc0 [V02 ] ( 3, 3 ) struct ( 8) [rbp-0x08] do-not-enreg[XS] addr-exposed ld-addr-op <System.Runtime.Intrinsics.Vector64`1[float]>
;* V03 loc1 [V03,T01] ( 0, 0 ) int -> zero-ref
;* V04 loc2 [V04 ] ( 0, 0 ) float -> zero-ref
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V06 tmp1 [V06 ] ( 2, 2 ) long -> [rbp+0x10] do-not-enreg[X] addr-exposed single-def "field V01._00 (fldOffset=0x0)" P-DEP
; V07 tmp2 [V07 ] ( 3, 3 ) long -> [rbp-0x08] do-not-enreg[X] addr-exposed "field V02._00 (fldOffset=0x0)" P-DEP
;
; Lcl frame size = 16
G_M48091_IG01:
push rbp
sub rsp, 16
lea rbp, [rsp+0x10]
;; size=10 bbWeight=1 PerfScore 1.75
G_M48091_IG02:
- mov eax, dword ptr [rbp+0x10]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x10]
vmovss dword ptr [rbp-0x08], xmm0
- mov eax, dword ptr [rbp+0x14]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, dword ptr [rbp+0x14]
vmovss dword ptr [rbp-0x04], xmm0
mov rax, qword ptr [rbp-0x08]
mov qword ptr [rdi], rax
mov rax, rdi
- ;; size=52 bbWeight=1 PerfScore 26.92
+ ;; size=42 bbWeight=1 PerfScore 20.92
G_M48091_IG03:
add rsp, 16
pop rbp
ret
;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 68, prolog size 10, PerfScore 30.42, instruction count 19, allocated bytes for code 68 (MethodHash=d2584424) for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
+; Total bytes of code 58, prolog size 10, PerfScore 24.42, instruction count 15, allocated bytes for code 58 (MethodHash=d2584424) for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
; ============================================================ -5 (-31.25 % of base) - System.Convert:ToSingle(uint):float ; Assembly listing for method System.Convert:ToSingle(uint):float (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) int -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M31056_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M31056_IG02:
- mov eax, edi
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
- ;; size=15 bbWeight=1 PerfScore 10.58
+ vcvtusi2ss xmm0, edi
+ ;; size=10 bbWeight=1 PerfScore 6.33
G_M31056_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 16, prolog size 0, PerfScore 11.58, instruction count 5, allocated bytes for code 16 (MethodHash=95e186af) for method System.Convert:ToSingle(uint):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=95e186af) for method System.Convert:ToSingle(uint):float (FullOpts)
; ============================================================ -5 (-17.86 % of base) - System.Half:op_Explicit(uint):System.Half ; Assembly listing for method System.Half:op_Explicit(uint):System.Half (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; fully interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) int -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M14955_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M14955_IG02:
- mov eax, edi
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
+ vcvtusi2ss xmm0, edi
mov rax, 0xD1FFAB1E ; code for System.Half:op_Explicit(float):System.Half
- ;; size=25 bbWeight=1 PerfScore 10.83
+ ;; size=20 bbWeight=1 PerfScore 6.58
G_M14955_IG03:
tail.jmp [rax]System.Half:op_Explicit(float):System.Half
;; size=3 bbWeight=1 PerfScore 2.00
-; Total bytes of code 28, prolog size 0, PerfScore 12.83, instruction count 6, allocated bytes for code 28 (MethodHash=1abbc594) for method System.Half:op_Explicit(uint):System.Half (FullOpts)
+; Total bytes of code 23, prolog size 0, PerfScore 8.58, instruction count 4, allocated bytes for code 23 (MethodHash=1abbc594) for method System.Half:op_Explicit(uint):System.Half (FullOpts)
; ============================================================ -5 (-31.25 % of base) - System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float ; Assembly listing for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) int -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M48117_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M48117_IG02:
- mov eax, edi
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
- ;; size=15 bbWeight=1 PerfScore 10.58
+ vcvtusi2ss xmm0, edi
+ ;; size=10 bbWeight=1 PerfScore 6.33
G_M48117_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 16, prolog size 0, PerfScore 11.58, instruction count 5, allocated bytes for code 16 (MethodHash=11b2440a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=11b2440a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
; ============================================================ -5 (-31.25 % of base) - System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this ; Assembly listing for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp 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] ( 3, 3 ) byref -> rdi this single-def
;* V01 arg1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.IFormatProvider>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;
; Lcl frame size = 0
G_M25283_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M25283_IG02:
- mov eax, dword ptr [rdi]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- vcvtsd2ss xmm0, xmm0, xmm0
- ;; size=15 bbWeight=1 PerfScore 12.33
+ vcvtusi2ss xmm0, dword ptr [rdi]
+ ;; size=10 bbWeight=1 PerfScore 9.33
G_M25283_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 16, prolog size 0, PerfScore 13.33, instruction count 5, allocated bytes for code 16 (MethodHash=73619d3c) for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 10.33, instruction count 3, allocated bytes for code 11 (MethodHash=73619d3c) for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
; ============================================================ -4 (-1.20 % of base) - System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal ; Assembly listing for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (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; 5 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 5, 4 ) byref -> rbx single-def
; V01 arg0 [V01 ] ( 12, 6.50) struct (24) [rbp+0x10] do-not-enreg[XSF] addr-exposed ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
; V02 arg1 [V02,T04] ( 3, 2.50) double -> [rbp-0x20] single-def
; V03 loc0 [V03,T03] ( 2, 1 ) int -> r14
;* V04 loc1 [V04 ] ( 0, 0 ) double -> zero-ref
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V06 tmp1 [V06 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[S] "folding static readonly field empty struct" <System.Data.SqlTypes.SqlDecimal>
;* V07 tmp2 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V08 tmp3 [V08,T08] ( 3, 1.50) double -> mm1 "Inline return value spill temp"
; V09 tmp4 [V09,T05] ( 5, 2.50) double -> [rbp-0x28] "Inline stloc first use temp"
;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V12 tmp7 [V12,T09] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V13 tmp8 [V13,T07] ( 2, 2 ) double -> mm0 "argument with side effect"
; V14 cse0 [V14,T02] ( 3, 1.50) int -> rax "CSE #03: moderate"
; V15 cse1 [V15,T01] ( 3, 2.50) int -> r15 "CSE #04: aggressive"
; V16 cse2 [V16,T06] ( 4, 2 ) double -> mm2 "CSE #02: aggressive"
;
; Lcl frame size = 24
G_M16518_IG01:
push rbp
push r15
push r14
push rbx
sub rsp, 24
lea rbp, [rsp+0x30]
vmovsd qword ptr [rbp-0x20], xmm0
mov rbx, rdi
;; size=23 bbWeight=1 PerfScore 6.00
G_M16518_IG02:
movzx r15, byte ptr [rbp+0x10]
test r15b, 1
je G_M16518_IG06
;; size=15 bbWeight=1 PerfScore 2.25
G_M16518_IG03:
movzx rax, byte ptr [rbp+0x13]
mov r14d, eax
- mov ecx, dword ptr [rbp+0x20]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rcx
+ vcvtusi2sd xmm0, dword ptr [rbp+0x20]
vmovsd xmm2, qword ptr [reloc @RWD00]
vmulsd xmm0, xmm0, xmm2
- mov ecx, dword ptr [rbp+0x1C]
vxorps xmm3, xmm3, xmm3
- vcvtsi2sd xmm3, xmm3, rcx
+ vcvtusi2sd xmm3, dword ptr [rbp+0x1C]
vaddsd xmm0, xmm0, xmm3
vmulsd xmm0, xmm0, xmm2
- mov ecx, dword ptr [rbp+0x18]
vxorps xmm3, xmm3, xmm3
- vcvtsi2sd xmm3, xmm3, rcx
+ vcvtusi2sd xmm3, dword ptr [rbp+0x18]
vaddsd xmm0, xmm0, xmm3
vmulsd xmm0, xmm0, xmm2
- mov ecx, dword ptr [rbp+0x14]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rcx
+ vcvtusi2sd xmm2, dword ptr [rbp+0x14]
vaddsd xmm0, xmm0, xmm2
vmovsd qword ptr [rbp-0x28], xmm0
vxorps xmm1, xmm1, xmm1
vcvtsi2sd xmm1, xmm1, eax
vmovsd xmm0, qword ptr [reloc @RWD08]
call System.Math:Pow(double,double):double
vmovsd xmm1, qword ptr [rbp-0x28]
vdivsd xmm1, xmm1, xmm0
test r15b, 2
jne SHORT G_M16518_IG04
jmp SHORT G_M16518_IG05
- ;; size=130 bbWeight=0.50 PerfScore 40.58
+ ;; size=126 bbWeight=0.50 PerfScore 38.58
G_M16518_IG04:
vxorps xmm1, xmm1, xmmword ptr [reloc @RWD16]
;; size=8 bbWeight=0.50 PerfScore 1.00
G_M16518_IG05:
vmovaps xmm0, xmm1
vmovsd xmm1, qword ptr [rbp-0x20]
call System.Math:Pow(double,double):double
lea rdi, [rbp+0x10]
mov rax, 0xD1FFAB1E ; code for System.Data.SqlTypes.SqlDecimal:.ctor(double):this
call [rax]System.Data.SqlTypes.SqlDecimal:.ctor(double):this
test byte ptr [rbp+0x10], 1
je SHORT G_M16518_IG09
movzx rsi, byte ptr [rbp+0x13]
sub r14d, esi
mov esi, r14d
lea rdi, [rbp+0x10]
mov edx, 1
mov rax, 0xD1FFAB1E ; code for System.Data.SqlTypes.SqlDecimal:AdjustScale(int,ubyte):this
call [rax]System.Data.SqlTypes.SqlDecimal:AdjustScale(int,ubyte):this
mov byte ptr [rbp+0x12], 38
vmovdqu xmm0, xmmword ptr [rbp+0x10]
vmovdqu xmmword ptr [rbx], xmm0
mov edi, dword ptr [rbp+0x20]
mov dword ptr [rbx+0x10], edi
jmp SHORT G_M16518_IG07
;; size=89 bbWeight=0.50 PerfScore 13.25
G_M16518_IG06:
vxorps xmm0, xmm0, xmm0
vmovdqu xmmword ptr [rbx], xmm0
vmovdqu xmmword ptr [rbx+0x04], xmm0
;; size=13 bbWeight=0.50 PerfScore 2.17
G_M16518_IG07:
mov rax, rbx
;; size=3 bbWeight=1 PerfScore 0.25
G_M16518_IG08:
add rsp, 24
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
G_M16518_IG09:
mov rdi, 0xD1FFAB1E ; System.Data.SqlTypes.SqlNullValueException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Data.SqlTypes.SqlNullValueException:.ctor():this
call [rax]System.Data.SqlTypes.SqlNullValueException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
RWD00 dq 41F0000000000000h ; 4.2949673e+09
RWD08 dq 4024000000000000h ; 10
RWD16 dq 8000000000000000h, 8000000000000000h
-; Total bytes of code 334, prolog size 15, PerfScore 68.75, instruction count 83, allocated bytes for code 334 (MethodHash=604fbf79) for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
+; Total bytes of code 330, prolog size 15, PerfScore 66.75, instruction count 79, allocated bytes for code 330 (MethodHash=604fbf79) for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
; ============================================================ -4 (-1.67 % of base) - System.Data.SqlTypes.SqlDecimal:ToDouble():double:this ; Assembly listing for method System.Data.SqlTypes.SqlDecimal:ToDouble():double: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] ( 9, 9 ) byref -> rbx this single-def
; V01 loc0 [V01,T01] ( 5, 4 ) double -> [rbp-0x10]
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V03 tmp1 [V03,T03] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V04 cse0 [V04,T02] ( 4, 4 ) double -> mm0 "CSE #01: aggressive"
; TEMP_01 double -> [rbp-0x18]
;
; Lcl frame size = 24
G_M37767_IG01:
push rbp
push rbx
sub rsp, 24
lea rbp, [rsp+0x20]
mov rbx, rdi
;; size=14 bbWeight=1 PerfScore 3.00
G_M37767_IG02:
test byte ptr [rbx], 1
je G_M37767_IG07
- mov eax, dword ptr [rbx+0x10]
vxorps xmm1, xmm1, xmm1
- vcvtsi2sd xmm1, xmm1, rax
+ vcvtusi2sd xmm1, dword ptr [rbx+0x10]
vmovsd xmm0, qword ptr [reloc @RWD00]
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbx+0x0C]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbx+0x0C]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbx+0x08]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbx+0x08]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbx+0x04]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
+ vcvtusi2sd xmm0, dword ptr [rbx+0x04]
vaddsd xmm2, xmm1, xmm0
vmovsd qword ptr [rbp-0x18], xmm2
movzx rax, byte ptr [rbx+0x03]
vxorps xmm1, xmm1, xmm1
vcvtsi2sd xmm1, xmm1, eax
vmovsd xmm0, qword ptr [reloc @RWD08]
call System.Math:Pow(double,double):double
vmovsd xmm2, qword ptr [rbp-0x18]
vdivsd xmm1, xmm2, xmm0
vmovsd qword ptr [rbp-0x10], xmm1
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Data.SqlTypes.SqlDecimal:get_IsPositive():ubyte:this
call [rax]System.Data.SqlTypes.SqlDecimal:get_IsPositive():ubyte:this
test eax, eax
je SHORT G_M37767_IG05
- ;; size=152 bbWeight=1 PerfScore 92.42
+ ;; size=148 bbWeight=1 PerfScore 88.42
G_M37767_IG03:
vmovsd xmm0, qword ptr [rbp-0x10]
;; size=5 bbWeight=0.50 PerfScore 1.50
G_M37767_IG04:
add rsp, 24
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M37767_IG05:
vmovsd xmm0, qword ptr [rbp-0x10]
vxorps xmm0, xmm0, xmmword ptr [reloc @RWD16]
;; size=13 bbWeight=0.50 PerfScore 2.50
G_M37767_IG06:
add rsp, 24
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M37767_IG07:
mov rdi, 0xD1FFAB1E ; System.Data.SqlTypes.SqlNullValueException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Data.SqlTypes.SqlNullValueException:.ctor():this
call [rax]System.Data.SqlTypes.SqlNullValueException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
RWD00 dq 41F0000000000000h ; 4.2949673e+09
RWD08 dq 4024000000000000h ; 10
RWD16 dq 8000000000000000h, 8000000000000000h
-; Total bytes of code 240, prolog size 11, PerfScore 101.67, instruction count 60, allocated bytes for code 240 (MethodHash=563b6c78) for method System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
+; Total bytes of code 236, prolog size 11, PerfScore 97.67, instruction count 56, allocated bytes for code 236 (MethodHash=563b6c78) for method System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
; ============================================================ -4 (-1.42 % of base) - System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble ; Assembly listing for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (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; 6 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 6, 3.50) struct (24) [rbp+0x10] do-not-enreg[SF] ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V02 tmp1 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "folding static readonly field empty struct" <System.Data.SqlTypes.SqlDouble>
;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <System.Data.SqlTypes.SqlDouble>
; V04 tmp3 [V04,T05] ( 4, 2 ) double -> mm0 "Inline return value spill temp"
; V05 tmp4 [V05,T04] ( 5, 2.50) double -> [rbp-0x10] "Inline stloc first use temp"
;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V08 tmp7 [V08,T09] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
; V09 tmp8 [V09,T02] ( 2, 1 ) ubyte -> rax "field V02.m_fNotNull (fldOffset=0x0)" P-INDEP
; V10 tmp9 [V10,T07] ( 2, 1 ) double -> mm0 "field V02.m_value (fldOffset=0x8)" P-INDEP
; V11 tmp10 [V11,T03] ( 2, 1 ) ubyte -> rax "field V03.m_fNotNull (fldOffset=0x0)" P-INDEP
; V12 tmp11 [V12,T08] ( 2, 1 ) double -> mm0 "field V03.m_value (fldOffset=0x8)" P-INDEP
; V13 tmp12 [V13,T01] ( 3, 2.50) ubyte -> rbx "V00.[000..001)"
; V14 tmp13 [V14,T10] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
; V15 cse0 [V15,T06] ( 4, 2 ) double -> mm0 "CSE #01: aggressive"
;
; Lcl frame size = 8
G_M3439_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M3439_IG02:
movzx rbx, byte ptr [rbp+0x10]
test bl, 1
jne SHORT G_M3439_IG05
;; size=9 bbWeight=1 PerfScore 2.25
G_M3439_IG03:
xor eax, eax
vxorps xmm0, xmm0, xmm0
;; size=6 bbWeight=0.50 PerfScore 0.29
G_M3439_IG04:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M3439_IG05:
- mov eax, dword ptr [rbp+0x20]
vxorps xmm1, xmm1, xmm1
- vcvtsi2sd xmm1, xmm1, rax
+ vcvtusi2sd xmm1, dword ptr [rbp+0x20]
vmovsd xmm0, qword ptr [reloc @RWD00]
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x1C]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbp+0x1C]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x18]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbp+0x18]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x14]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
+ vcvtusi2sd xmm0, dword ptr [rbp+0x14]
vaddsd xmm0, xmm1, xmm0
vmovsd qword ptr [rbp-0x10], xmm0
movzx rax, byte ptr [rbp+0x13]
vxorps xmm1, xmm1, xmm1
vcvtsi2sd xmm1, xmm1, eax
vmovsd xmm0, qword ptr [reloc @RWD08]
call System.Math:Pow(double,double):double
vmovsd xmm1, qword ptr [rbp-0x10]
vdivsd xmm1, xmm1, xmm0
test bl, 2
jne SHORT G_M3439_IG06
vmovaps xmm0, xmm1
jmp SHORT G_M3439_IG07
- ;; size=130 bbWeight=0.50 PerfScore 40.58
+ ;; size=126 bbWeight=0.50 PerfScore 38.58
G_M3439_IG06:
vxorps xmm0, xmm1, xmmword ptr [reloc @RWD16]
;; size=8 bbWeight=0.50 PerfScore 1.00
G_M3439_IG07:
vmovd rax, xmm0
mov rdi, 0xD1FFAB1E
andn rax, rax, rdi
je SHORT G_M3439_IG09
mov eax, 1
;; size=27 bbWeight=0.50 PerfScore 2.00
G_M3439_IG08:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M3439_IG09:
mov rdi, 0xD1FFAB1E ; System.OverflowException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov edi, 0x5E26
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.OverflowException:.ctor(System.String):this
call [rax]System.OverflowException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=80 bbWeight=0 PerfScore 0.00
RWD00 dq 41F0000000000000h ; 4.2949673e+09
RWD08 dq 4024000000000000h ; 10
RWD16 dq 8000000000000000h, 8000000000000000h
-; Total bytes of code 282, prolog size 8, PerfScore 51.88, instruction count 70, allocated bytes for code 282 (MethodHash=7f47f290) for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
+; Total bytes of code 278, prolog size 8, PerfScore 49.88, instruction count 66, allocated bytes for code 278 (MethodHash=7f47f290) for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
; ============================================================ -4 (-1.41 % of base) - System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle ; Assembly listing for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (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; 7 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 6, 3.50) struct (24) [rbp+0x10] do-not-enreg[SF] ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V02 tmp1 [V02 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] "folding static readonly field empty struct" <System.Data.SqlTypes.SqlSingle>
; V03 tmp2 [V03 ] ( 3, 3 ) struct ( 8) [rbp-0x10] do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Data.SqlTypes.SqlSingle>
; V04 tmp3 [V04,T06] ( 3, 1.50) double -> mm1 "Inline return value spill temp"
; V05 tmp4 [V05,T04] ( 5, 2.50) double -> [rbp-0x18] "Inline stloc first use temp"
;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
;* V07 tmp6 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
; V08 tmp7 [V08,T03] ( 3, 3 ) float -> mm0 "Inlining Arg"
; V09 tmp8 [V09,T08] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
;* V10 tmp9 [V10 ] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[] "field V02._fNotNull (fldOffset=0x0)" P-DEP
;* V11 tmp10 [V11 ] ( 0, 0 ) float -> zero-ref do-not-enreg[] "field V02._value (fldOffset=0x4)" P-DEP
; V12 tmp11 [V12,T02] ( 2, 1.50) ubyte -> [rbp-0x10] do-not-enreg[] "field V03._fNotNull (fldOffset=0x0)" P-DEP
; V13 tmp12 [V13,T07] ( 2, 1.50) float -> [rbp-0x0C] do-not-enreg[] "field V03._value (fldOffset=0x4)" P-DEP
; V14 tmp13 [V14,T01] ( 3, 2.50) ubyte -> rbx "V00.[000..001)"
; V15 tmp14 [V15,T09] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
; V16 cse0 [V16,T05] ( 4, 2 ) double -> mm0 "CSE #01: aggressive"
;
; Lcl frame size = 24
G_M19759_IG01:
push rbp
push rbx
sub rsp, 24
lea rbp, [rsp+0x20]
;; size=11 bbWeight=1 PerfScore 2.75
G_M19759_IG02:
movzx rbx, byte ptr [rbp+0x10]
test bl, 1
jne SHORT G_M19759_IG05
;; size=9 bbWeight=1 PerfScore 2.25
G_M19759_IG03:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M19759_IG04:
add rsp, 24
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M19759_IG05:
- mov eax, dword ptr [rbp+0x20]
vxorps xmm1, xmm1, xmm1
- vcvtsi2sd xmm1, xmm1, rax
+ vcvtusi2sd xmm1, dword ptr [rbp+0x20]
vmovsd xmm0, qword ptr [reloc @RWD00]
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x1C]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbp+0x1C]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x18]
vxorps xmm2, xmm2, xmm2
- vcvtsi2sd xmm2, xmm2, rax
+ vcvtusi2sd xmm2, dword ptr [rbp+0x18]
vaddsd xmm1, xmm1, xmm2
vmulsd xmm1, xmm1, xmm0
- mov eax, dword ptr [rbp+0x14]
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
+ vcvtusi2sd xmm0, dword ptr [rbp+0x14]
vaddsd xmm1, xmm1, xmm0
vmovsd qword ptr [rbp-0x18], xmm1
movzx rax, byte ptr [rbp+0x13]
vxorps xmm1, xmm1, xmm1
vcvtsi2sd xmm1, xmm1, eax
vmovsd xmm0, qword ptr [reloc @RWD08]
call System.Math:Pow(double,double):double
vmovsd xmm1, qword ptr [rbp-0x18]
vdivsd xmm1, xmm1, xmm0
test bl, 2
jne SHORT G_M19759_IG06
jmp SHORT G_M19759_IG07
- ;; size=126 bbWeight=0.50 PerfScore 40.46
+ ;; size=122 bbWeight=0.50 PerfScore 38.46
G_M19759_IG06:
vxorps xmm1, xmm1, xmmword ptr [reloc @RWD16]
;; size=8 bbWeight=0.50 PerfScore 1.00
G_M19759_IG07:
vcvtsd2ss xmm0, xmm0, xmm1
vmovd eax, xmm0
mov edi, 0xD1FFAB1E
andn eax, eax, edi
je SHORT G_M19759_IG09
mov byte ptr [rbp-0x10], 1
vmovss dword ptr [rbp-0x0C], xmm0
mov rax, qword ptr [rbp-0x10]
;; size=33 bbWeight=0.50 PerfScore 5.38
G_M19759_IG08:
add rsp, 24
pop rbx
pop rbp
ret
;; size=7 bbWeight=0.50 PerfScore 1.12
G_M19759_IG09:
mov rdi, 0xD1FFAB1E ; System.OverflowException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov edi, 0x5E26
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.OverflowException:.ctor(System.String):this
call [rax]System.OverflowException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=80 bbWeight=0 PerfScore 0.00
RWD00 dq 41F0000000000000h ; 4.2949673e+09
RWD08 dq 4024000000000000h ; 10
RWD16 dq 8000000000000000h, 8000000000000000h
-; Total bytes of code 283, prolog size 11, PerfScore 54.21, instruction count 71, allocated bytes for code 283 (MethodHash=f549b2d0) for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
+; Total bytes of code 279, prolog size 11, PerfScore 52.21, instruction count 67, allocated bytes for code 279 (MethodHash=f549b2d0) for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
; ============================================================ -1 (-8.33 % of base) - System.Convert:ToDouble(uint):double ; Assembly listing for method System.Convert:ToDouble(uint):double (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 3, 3 ) int -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;
; Lcl frame size = 0
G_M52538_IG01:
;; size=0 bbWeight=1 PerfScore 0.00
G_M52538_IG02:
- mov eax, edi
vxorps xmm0, xmm0, xmm0
- vcvtsi2sd xmm0, xmm0, rax
- ;; size=11 bbWeight=1 PerfScore 6.58
+ vcvtusi2sd xmm0, edi
+ ;; size=10 bbWeight=1 PerfScore 4.33
G_M52538_IG03:
ret
;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 12, prolog size 0, PerfScore 7.58, instruction count 4, allocated bytes for code 12 (MethodHash=656332c5) for method System.Convert:ToDouble(uint):double (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=656332c5) for method System.Convert:ToDouble(uint):double (FullOpts)
; ============================================================ -1 (-0.63 % of base) - System.Convert:ToUInt32(double):uint ; Assembly listing for method System.Convert:ToUInt32(double):uint (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 7, 7 ) double -> mm0 single-def
; V01 loc0 [V01,T00] ( 6, 4.50) int -> rax
; V02 loc1 [V02,T02] ( 3, 2.50) double -> mm0
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V04 tmp1 [V04,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
; V05 tmp2 [V05,T05] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
; V06 cse0 [V06,T03] ( 3, 2.50) double -> mm1 "CSE #01: aggressive"
;
; Lcl frame size = 8
G_M31080_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M31080_IG02:
vucomisd xmm0, qword ptr [reloc @RWD00]
jb SHORT G_M31080_IG06
vmovsd xmm1, qword ptr [reloc @RWD08]
vucomisd xmm1, xmm0
jbe SHORT G_M31080_IG06
vmovaps xmm1, xmm0
vfixupimmsd xmm1, xmm0, qword ptr [reloc @RWD16], 0
vcvttsd2usi eax, xmm1
- mov edi, eax
vxorps xmm1, xmm1, xmm1
- vcvtsi2sd xmm1, xmm1, rdi
+ vcvtusi2sd xmm1, eax
vsubsd xmm0, xmm0, xmm1
vmovsd xmm1, qword ptr [reloc @RWD32]
vucomisd xmm0, xmm1
ja SHORT G_M31080_IG04
- ;; size=74 bbWeight=1 PerfScore 37.83
+ ;; size=73 bbWeight=1 PerfScore 35.58
G_M31080_IG03:
vucomisd xmm0, xmm1
jp SHORT G_M31080_IG05
jne SHORT G_M31080_IG05
test al, 1
je SHORT G_M31080_IG05
;; size=12 bbWeight=0.50 PerfScore 2.62
G_M31080_IG04:
inc eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M31080_IG05:
add rsp, 8
pop rbx
pop rbp
ret
;; size=7 bbWeight=1 PerfScore 2.25
G_M31080_IG06:
mov rdi, 0xD1FFAB1E ; System.OverflowException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_Overflow_UInt32():System.String
call [rax]System.SR:get_Overflow_UInt32():System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.OverflowException:.ctor(System.String):this
call [rax]System.OverflowException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=57 bbWeight=0 PerfScore 0.00
RWD00 dq BFE0000000000000h ; -0.5
RWD08 dq 41EFFFFFFFF00000h ; 4.2949673e+09
RWD16 dq 0000000008080088h, 0000000000000000h
RWD32 dq 3FE0000000000000h ; 0.5
-; Total bytes of code 160, prolog size 8, PerfScore 46.33, instruction count 41, allocated bytes for code 160 (MethodHash=ed1f8697) for method System.Convert:ToUInt32(double):uint (FullOpts)
+; Total bytes of code 159, prolog size 8, PerfScore 44.08, instruction count 40, allocated bytes for code 159 (MethodHash=ed1f8697) for method System.Convert:ToUInt32(double):uint (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/4ada6ad579d1f2a0e742e621107a420b |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 11 seconds.
dotnet/runtime#111595
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: