MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] xtqqczze/dotnet-runtime/Int128BitCast #478

Open MihuBot opened 1 week ago

MihuBot commented 1 week ago

Job completed in 14 minutes.

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41566430
Total bytes of diff: 41566524
Total bytes of delta: 94 (0.00 % of base)
Total relative delta: 0.17
    diff is a regression.
    relative diff is a regression.

Top file regressions (bytes):
         120 : System.Text.Json.dasm (0.01 % of base)

Top file improvements (bytes):
         -26 : System.Private.CoreLib.dasm (-0.00 % of base)

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

Top method regressions (bytes):
         110 (18.55 % of base) : System.Private.CoreLib.dasm - System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts)
          77 (9.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteAsPropertyNameCore(System.Text.Json.Utf8JsonWriter,System.Int128,System.Text.Json.JsonSerializerOptions,ubyte):this (FullOpts)
          49 (7.04 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:Format(System.Span`1[ubyte],System.Int128,byref) (FullOpts)
          40 (2.90 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteNumberWithCustomHandling(System.Text.Json.Utf8JsonWriter,System.Int128,int):this (FullOpts)
           5 (4.10 % of base) : System.Private.CoreLib.dasm - System.Int128:ToString(System.String):System.String:this (FullOpts)
           2 (1.85 % of base) : System.Private.CoreLib.dasm - System.Int128:ToString(System.IFormatProvider):System.String:this (FullOpts)

Top method improvements (bytes):
         -77 (-6.22 % of base) : System.Private.CoreLib.dasm - System.Number:TryFormatInt128[ubyte](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte (FullOpts)
         -55 (-7.54 % of base) : System.Private.CoreLib.dasm - System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts)
         -46 (-5.01 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteCore(System.Text.Json.Utf8JsonWriter,System.Int128) (FullOpts)
          -6 (-3.97 % of base) : System.Private.CoreLib.dasm - System.Int128:BigMul(System.Int128,System.Int128,byref):System.Int128 (FullOpts)
          -3 (-2.05 % of base) : System.Private.CoreLib.dasm - System.Number:FormatInt128(System.Int128,System.String,System.IFormatProvider):System.String (FullOpts)
          -2 (-2.25 % of base) : System.Private.CoreLib.dasm - System.Number:Int128ToDecStr(System.Int128):System.String (FullOpts)

Top method regressions (percentages):
         110 (18.55 % of base) : System.Private.CoreLib.dasm - System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts)
          77 (9.96 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteAsPropertyNameCore(System.Text.Json.Utf8JsonWriter,System.Int128,System.Text.Json.JsonSerializerOptions,ubyte):this (FullOpts)
          49 (7.04 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:Format(System.Span`1[ubyte],System.Int128,byref) (FullOpts)
           5 (4.10 % of base) : System.Private.CoreLib.dasm - System.Int128:ToString(System.String):System.String:this (FullOpts)
          40 (2.90 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteNumberWithCustomHandling(System.Text.Json.Utf8JsonWriter,System.Int128,int):this (FullOpts)
           2 (1.85 % of base) : System.Private.CoreLib.dasm - System.Int128:ToString(System.IFormatProvider):System.String:this (FullOpts)

Top method improvements (percentages):
         -55 (-7.54 % of base) : System.Private.CoreLib.dasm - System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts)
         -77 (-6.22 % of base) : System.Private.CoreLib.dasm - System.Number:TryFormatInt128[ubyte](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte (FullOpts)
         -46 (-5.01 % of base) : System.Text.Json.dasm - System.Text.Json.Serialization.Converters.Int128Converter:WriteCore(System.Text.Json.Utf8JsonWriter,System.Int128) (FullOpts)
          -6 (-3.97 % of base) : System.Private.CoreLib.dasm - System.Int128:BigMul(System.Int128,System.Int128,byref):System.Int128 (FullOpts)
          -2 (-2.25 % of base) : System.Private.CoreLib.dasm - System.Number:Int128ToDecStr(System.Int128):System.String (FullOpts)
          -3 (-2.05 % of base) : System.Private.CoreLib.dasm - System.Number:FormatInt128(System.Int128,System.String,System.IFormatProvider):System.String (FullOpts)

12 total methods with Code Size differences (6 improved, 6 regressed), 252722 unchanged.

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

Artifacts:

MihuBot commented 1 week ago

Top method regressions

110 (18.55 % of base) - System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this ```diff ; Assembly listing for method System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 22 single block inlinees; 12 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T05] ( 4, 4 ) byref -> rdi this single-def +; V00 this [V00,T13] ( 4, 4 ) byref -> rdi this single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def -; V02 arg2 [V02,T04] ( 6, 4 ) byref -> rbx single-def +; V02 arg2 [V02,T12] ( 6, 4 ) byref -> rbx single-def ;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def -; V04 arg4 [V04,T24] ( 3, 1.50) ref -> r8 class-hnd single-def +; V04 arg4 [V04,T30] ( 3, 1.50) ref -> r8 class-hnd single-def ; V05 OutArgs [V05 ] ( 1, 1 ) struct (16) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V06 tmp1 [V06,T18] ( 4, 2.50) ubyte -> rax "Inline return value spill temp" +; V06 tmp1 [V06,T25] ( 4, 2.50) ubyte -> rax "Inline return value spill temp" ;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inlining Arg" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V11 tmp6 [V11,T25] ( 3, 1.50) ref -> rax class-hnd "Inline return value spill temp" +; V11 tmp6 [V11,T31] ( 3, 1.50) ref -> rax class-hnd "Inline return value spill temp" ;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V13 tmp8 [V13 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inline return value spill temp" -; V14 tmp9 [V14,T09] ( 4, 4 ) ref -> rdi class-hnd exact single-def "Inlining Arg" +; V14 tmp9 [V14,T19] ( 4, 4 ) ref -> rdi class-hnd exact single-def "Inlining Arg" ;* V15 tmp10 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V16 tmp11 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" -; V17 tmp12 [V17,T21] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" -; V18 tmp13 [V18,T22] ( 2, 2 ) int -> r8 "Inlining Arg" -;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V20 tmp15 [V20 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V21 tmp16 [V21 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V22 tmp17 [V22,T27] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" -;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V25 tmp20 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V26 tmp21 [V26 ] ( 2, 1 ) byref -> [rbp-0x30] must-init pinned "Inline stloc first use temp" -; V27 tmp22 [V27,T28] ( 3, 1.50) long -> r14 "Inline stloc first use temp" -;* V28 tmp23 [V28 ] ( 0, 0 ) long -> zero-ref -; V29 tmp24 [V29,T16] ( 5, 2.50) int -> rax "Inline return value spill temp" -;* V30 tmp25 [V30 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inlining Arg" -;* V31 tmp26 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V32 tmp27 [V32,T17] ( 5, 2.50) int -> rax "Inline stloc first use temp" -;* V33 tmp28 [V33 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V34 tmp29 [V34 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" -;* V35 tmp30 [V35 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" -;* V36 tmp31 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V37 tmp32 [V37 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V38 tmp33 [V38 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" -; V39 tmp34 [V39,T29] ( 3, 1.50) int -> rax "Inline stloc first use temp" -;* V40 tmp35 [V40 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" -;* V41 tmp36 [V41 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -;* V42 tmp37 [V42 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V43 tmp38 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V44 tmp39 [V44 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +; V17 tmp12 [V17,T27] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" +; V18 tmp13 [V18,T28] ( 2, 2 ) int -> r8 "Inlining Arg" +; V19 tmp14 [V19,T33] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" +;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V21 tmp16 [V21 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V22 tmp17 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V23 tmp18 [V23 ] ( 2, 1 ) byref -> [rbp-0x30] must-init pinned "Inline stloc first use temp" +; V24 tmp19 [V24,T34] ( 3, 1.50) long -> r14 "Inline stloc first use temp" +;* V25 tmp20 [V25 ] ( 0, 0 ) long -> zero-ref +; V26 tmp21 [V26,T23] ( 5, 2.50) int -> rax "Inline return value spill temp" +;* V27 tmp22 [V27 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inlining Arg" +;* V28 tmp23 [V28 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V29 tmp24 [V29,T24] ( 5, 2.50) int -> rax "Inline stloc first use temp" +;* V30 tmp25 [V30 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V31 tmp26 [V31 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" +;* V32 tmp27 [V32 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" +;* V33 tmp28 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V34 tmp29 [V34 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V35 tmp30 [V35 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" +; V36 tmp31 [V36,T35] ( 3, 1.50) int -> rax "Inline stloc first use temp" +;* V37 tmp32 [V37 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" +;* V38 tmp33 [V38 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V39 tmp34 [V39 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V40 tmp35 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V41 tmp36 [V41 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V42 tmp37 [V42 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V43 tmp38 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V44 tmp39 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V45 tmp40 [V45 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V46 tmp41 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V47 tmp42 [V47 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V49 tmp44 [V49 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" -; V50 tmp45 [V50,T30] ( 3, 1.50) int -> rsi "Inline stloc first use temp" -;* V51 tmp46 [V51 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" -;* V52 tmp47 [V52 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -;* V53 tmp48 [V53 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V54 tmp49 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V55 tmp50 [V55 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V56 tmp51 [V56 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V57 tmp52 [V57 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V58 tmp53 [V58,T20] ( 4, 2 ) int -> rsi "Inline return value spill temp" -;* V59 tmp54 [V59 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V60 tmp55 [V60 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inlining Arg" -; V61 tmp56 [V61,T00] ( 4, 18 ) long -> r14 "Inlining Arg" -;* V62 tmp57 [V62 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inline ldloca(s) first use temp" -; V63 tmp58 [V63 ] ( 4, 16 ) struct (32) [rbp-0x50] do-not-enreg[XS] addr-exposed "Inline stloc first use temp" -;* V64 tmp59 [V64 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" -; V65 tmp60 [V65,T06] ( 5, 3 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V66 tmp61 [V66,T07] ( 4, 2.50) int -> r14 single-def "field V01._length (fldOffset=0x8)" P-INDEP -; V67 tmp62 [V67,T14] ( 2, 1.50) byref -> rdx single-def "field V03._reference (fldOffset=0x0)" P-INDEP -; V68 tmp63 [V68,T08] ( 3, 2.50) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP -;* V69 tmp64 [V69 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP -;* V70 tmp65 [V70 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP -; V71 tmp66 [V71,T19] ( 4, 2.50) long -> r13 "field V08._lower (fldOffset=0x0)" P-INDEP -; V72 tmp67 [V72,T15] ( 5, 3 ) long -> r12 "field V08._upper (fldOffset=0x8)" P-INDEP -;* V73 tmp68 [V73 ] ( 0, 0 ) long -> zero-ref "field V09._lower (fldOffset=0x0)" P-INDEP -;* V74 tmp69 [V74 ] ( 0, 0 ) long -> zero-ref "field V09._upper (fldOffset=0x8)" P-INDEP -;* V75 tmp70 [V75 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP -;* V76 tmp71 [V76 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V77 tmp72 [V77 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP -;* V78 tmp73 [V78 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP -; V79 tmp74 [V79,T26] ( 3, 1.50) byref -> rcx "field V13._reference (fldOffset=0x0)" P-INDEP -; V80 tmp75 [V80,T31] ( 3, 1.50) int -> r8 "field V13._length (fldOffset=0x8)" P-INDEP -; V81 tmp76 [V81,T33] ( 2, 1 ) byref -> rcx single-def "field V15._reference (fldOffset=0x0)" P-INDEP -; V82 tmp77 [V82,T34] ( 2, 1 ) int -> r8 "field V15._length (fldOffset=0x8)" P-INDEP -;* V83 tmp78 [V83 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V84 tmp79 [V84 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP -; V85 tmp80 [V85,T12] ( 7, 3.50) long -> r13 "field V19._lower (fldOffset=0x0)" P-INDEP -; V86 tmp81 [V86,T13] ( 7, 3.50) long -> r12 "field V19._upper (fldOffset=0x8)" P-INDEP -;* V87 tmp82 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP -;* V88 tmp83 [V88 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP -; V89 tmp84 [V89,T32] ( 3, 1.50) long -> rax "field V30._lower (fldOffset=0x0)" P-INDEP -; V90 tmp85 [V90,T35] ( 1, 0.50) long -> rdx "field V30._upper (fldOffset=0x8)" P-INDEP -;* V91 tmp86 [V91,T36] ( 0, 0 ) long -> zero-ref "field V33._lower (fldOffset=0x0)" P-INDEP -;* V92 tmp87 [V92,T37] ( 0, 0 ) long -> zero-ref "field V33._upper (fldOffset=0x8)" P-INDEP -;* V93 tmp88 [V93 ] ( 0, 0 ) long -> zero-ref "field V34._lower (fldOffset=0x0)" P-INDEP -;* V94 tmp89 [V94 ] ( 0, 0 ) long -> zero-ref "field V34._upper (fldOffset=0x8)" P-INDEP -;* V95 tmp90 [V95 ] ( 0, 0 ) long -> zero-ref "field V35._lower (fldOffset=0x0)" P-DEP -;* V96 tmp91 [V96 ] ( 0, 0 ) long -> zero-ref "field V35._upper (fldOffset=0x8)" P-DEP -;* V97 tmp92 [V97 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP -;* V98 tmp93 [V98 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP -;* V99 tmp94 [V99 ] ( 0, 0 ) byref -> zero-ref single-def "field V40._reference (fldOffset=0x0)" P-INDEP -;* V100 tmp95 [V100 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP -;* V101 tmp96 [V101 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP -;* V102 tmp97 [V102 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP -;* V103 tmp98 [V103 ] ( 0, 0 ) byref -> zero-ref single-def "field V46._reference (fldOffset=0x0)" P-INDEP -;* V104 tmp99 [V104 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP -;* V105 tmp100 [V105 ] ( 0, 0 ) byref -> zero-ref single-def "field V47._reference (fldOffset=0x0)" P-INDEP -;* V106 tmp101 [V106 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-INDEP -;* V107 tmp102 [V107 ] ( 0, 0 ) byref -> zero-ref single-def "field V51._reference (fldOffset=0x0)" P-INDEP -;* V108 tmp103 [V108 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP -;* V109 tmp104 [V109 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP -;* V110 tmp105 [V110 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP -;* V111 tmp106 [V111 ] ( 0, 0 ) byref -> zero-ref single-def "field V57._reference (fldOffset=0x0)" P-INDEP -;* V112 tmp107 [V112 ] ( 0, 0 ) int -> zero-ref "field V57._length (fldOffset=0x8)" P-INDEP -;* V113 tmp108 [V113 ] ( 0, 0 ) byref -> zero-ref single-def "field V59._reference (fldOffset=0x0)" P-INDEP -;* V114 tmp109 [V114 ] ( 0, 0 ) int -> zero-ref "field V59._length (fldOffset=0x8)" P-INDEP -; V115 tmp110 [V115,T02] ( 4, 9 ) long -> r13 "field V60._lower (fldOffset=0x0)" P-INDEP -; V116 tmp111 [V116,T01] ( 5, 13 ) long -> r12 "field V60._upper (fldOffset=0x8)" P-INDEP -;* V117 tmp112 [V117,T10] ( 0, 0 ) long -> zero-ref "field V62._lower (fldOffset=0x0)" P-INDEP -;* V118 tmp113 [V118,T11] ( 0, 0 ) long -> zero-ref "field V62._upper (fldOffset=0x8)" P-INDEP -; V119 tmp114 [V119,T03] ( 2, 8 ) long -> rsi "field V64._lower (fldOffset=0x0)" P-INDEP -;* V120 tmp115 [V120 ] ( 0, 0 ) long -> zero-ref "field V64._upper (fldOffset=0x8)" P-INDEP -; V121 tmp116 [V121,T23] ( 2, 2 ) long -> r15 "Cast away GC" +;* V46 tmp41 [V46 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" +; V47 tmp42 [V47,T36] ( 3, 1.50) int -> rdi "Inline stloc first use temp" +;* V48 tmp43 [V48 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" +;* V49 tmp44 [V49 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V50 tmp45 [V50 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V51 tmp46 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V52 tmp47 [V52 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V53 tmp48 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V54 tmp49 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V55 tmp50 [V55,T26] ( 4, 2 ) int -> rdi "Inline return value spill temp" +;* V56 tmp51 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V57 tmp52 [V57 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inlining Arg" +; V58 tmp53 [V58,T00] ( 4, 18 ) long -> r14 "Inlining Arg" +;* V59 tmp54 [V59 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inline ldloca(s) first use temp" +;* V60 tmp55 [V60 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[S] "Inline stloc first use temp" +;* V61 tmp56 [V61 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" +;* V62 tmp57 [V62 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" +;* V63 tmp58 [V63 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" +;* V64 tmp59 [V64 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" +;* V65 tmp60 [V65 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret "Inline stloc first use temp" +;* V66 tmp61 [V66 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret "spilled call-like call argument" +; V67 tmp62 [V67 ] ( 5, 40 ) struct (32) [rbp-0x50] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" +;* V68 tmp63 [V68 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret "spilled call-like call argument" +; V69 tmp64 [V69,T16] ( 5, 3 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V70 tmp65 [V70,T17] ( 4, 2.50) int -> r14 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V71 tmp66 [V71,T22] ( 2, 1.50) byref -> rdx single-def "field V03._reference (fldOffset=0x0)" P-INDEP +; V72 tmp67 [V72,T18] ( 3, 2.50) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP +;* V73 tmp68 [V73 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP +;* V74 tmp69 [V74 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V75 tmp70 [V75,T15] ( 9, 5 ) long -> r13 "field V08._lower (fldOffset=0x0)" P-INDEP +; V76 tmp71 [V76,T14] ( 10, 5.50) long -> r12 "field V08._upper (fldOffset=0x8)" P-INDEP +;* V77 tmp72 [V77 ] ( 0, 0 ) long -> zero-ref "field V09._lower (fldOffset=0x0)" P-INDEP +;* V78 tmp73 [V78 ] ( 0, 0 ) long -> zero-ref "field V09._upper (fldOffset=0x8)" P-INDEP +;* V79 tmp74 [V79 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP +;* V80 tmp75 [V80 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V81 tmp76 [V81 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP +;* V82 tmp77 [V82 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP +; V83 tmp78 [V83,T32] ( 3, 1.50) byref -> rcx "field V13._reference (fldOffset=0x0)" P-INDEP +; V84 tmp79 [V84,T37] ( 3, 1.50) int -> r8 "field V13._length (fldOffset=0x8)" P-INDEP +; V85 tmp80 [V85,T39] ( 2, 1 ) byref -> rcx single-def "field V15._reference (fldOffset=0x0)" P-INDEP +; V86 tmp81 [V86,T40] ( 2, 1 ) int -> r8 "field V15._length (fldOffset=0x8)" P-INDEP +;* V87 tmp82 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V88 tmp83 [V88 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +;* V89 tmp84 [V89 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP +;* V90 tmp85 [V90 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP +; V91 tmp86 [V91,T38] ( 3, 1.50) long -> rax "field V27._lower (fldOffset=0x0)" P-INDEP +; V92 tmp87 [V92,T41] ( 1, 0.50) long -> rdx "field V27._upper (fldOffset=0x8)" P-INDEP +;* V93 tmp88 [V93,T42] ( 0, 0 ) long -> zero-ref "field V30._lower (fldOffset=0x0)" P-INDEP +;* V94 tmp89 [V94,T43] ( 0, 0 ) long -> zero-ref "field V30._upper (fldOffset=0x8)" P-INDEP +;* V95 tmp90 [V95 ] ( 0, 0 ) long -> zero-ref "field V31._lower (fldOffset=0x0)" P-INDEP +;* V96 tmp91 [V96 ] ( 0, 0 ) long -> zero-ref "field V31._upper (fldOffset=0x8)" P-INDEP +;* V97 tmp92 [V97 ] ( 0, 0 ) long -> zero-ref "field V32._lower (fldOffset=0x0)" P-DEP +;* V98 tmp93 [V98 ] ( 0, 0 ) long -> zero-ref "field V32._upper (fldOffset=0x8)" P-DEP +;* V99 tmp94 [V99 ] ( 0, 0 ) byref -> zero-ref single-def "field V33._reference (fldOffset=0x0)" P-INDEP +;* V100 tmp95 [V100 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP +;* V101 tmp96 [V101 ] ( 0, 0 ) byref -> zero-ref single-def "field V37._reference (fldOffset=0x0)" P-INDEP +;* V102 tmp97 [V102 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP +;* V103 tmp98 [V103 ] ( 0, 0 ) byref -> zero-ref single-def "field V40._reference (fldOffset=0x0)" P-INDEP +;* V104 tmp99 [V104 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP +;* V105 tmp100 [V105 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP +;* V106 tmp101 [V106 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP +;* V107 tmp102 [V107 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP +;* V108 tmp103 [V108 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP +;* V109 tmp104 [V109 ] ( 0, 0 ) byref -> zero-ref single-def "field V48._reference (fldOffset=0x0)" P-INDEP +;* V110 tmp105 [V110 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP +;* V111 tmp106 [V111 ] ( 0, 0 ) byref -> zero-ref single-def "field V51._reference (fldOffset=0x0)" P-INDEP +;* V112 tmp107 [V112 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP +;* V113 tmp108 [V113 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP +;* V114 tmp109 [V114 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP +;* V115 tmp110 [V115 ] ( 0, 0 ) byref -> zero-ref single-def "field V56._reference (fldOffset=0x0)" P-INDEP +;* V116 tmp111 [V116 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP +; V117 tmp112 [V117,T02] ( 5, 13 ) long -> r13 "field V57._lower (fldOffset=0x0)" P-INDEP +; V118 tmp113 [V118,T01] ( 6, 17 ) long -> r12 "field V57._upper (fldOffset=0x8)" P-INDEP +;* V119 tmp114 [V119,T20] ( 0, 0 ) long -> zero-ref "field V59._lower (fldOffset=0x0)" P-INDEP +;* V120 tmp115 [V120,T21] ( 0, 0 ) long -> zero-ref "field V59._upper (fldOffset=0x8)" P-INDEP +;* V121 tmp116 [V121 ] ( 0, 0 ) long -> zero-ref "field V61._lower (fldOffset=0x0)" P-INDEP +;* V122 tmp117 [V122 ] ( 0, 0 ) long -> zero-ref "field V61._upper (fldOffset=0x8)" P-INDEP +;* V123 tmp118 [V123 ] ( 0, 0 ) long -> zero-ref "field V62._lower (fldOffset=0x0)" P-INDEP +;* V124 tmp119 [V124 ] ( 0, 0 ) long -> zero-ref "field V62._upper (fldOffset=0x8)" P-INDEP +;* V125 tmp120 [V125 ] ( 0, 0 ) long -> zero-ref "field V63._lower (fldOffset=0x0)" P-INDEP +;* V126 tmp121 [V126 ] ( 0, 0 ) long -> zero-ref "field V63._upper (fldOffset=0x8)" P-INDEP +;* V127 tmp122 [V127 ] ( 0, 0 ) long -> zero-ref "field V64._lower (fldOffset=0x0)" P-DEP +;* V128 tmp123 [V128 ] ( 0, 0 ) long -> zero-ref "field V64._upper (fldOffset=0x8)" P-DEP +; V129 tmp124 [V129,T03] ( 3, 12 ) long -> rbx "field V65._lower (fldOffset=0x0)" P-INDEP +; V130 tmp125 [V130,T04] ( 3, 12 ) long -> r15 "field V65._upper (fldOffset=0x8)" P-INDEP +; V131 tmp126 [V131,T05] ( 2, 8 ) long -> rax "field V66._lower (fldOffset=0x0)" P-INDEP +; V132 tmp127 [V132,T06] ( 2, 8 ) long -> rcx "field V66._upper (fldOffset=0x8)" P-INDEP +; V133 tmp128 [V133,T07] ( 2, 8 ) long -> rcx "field V68._lower (fldOffset=0x0)" P-INDEP +; V134 tmp129 [V134,T08] ( 2, 8 ) long -> r8 "field V68._upper (fldOffset=0x8)" P-INDEP +; V135 tmp130 [V135,T09] ( 2, 8 ) long -> r13 "V60.[000..008)" +; V136 tmp131 [V136,T10] ( 2, 8 ) long -> r12 "V60.[008..016)" +; V137 tmp132 [V137,T11] ( 2, 8 ) long -> rsi "V60.[016..024)" +;* V138 tmp133 [V138 ] ( 0, 0 ) long -> zero-ref "V60.[024..032)" +; V139 tmp134 [V139,T29] ( 2, 2 ) long -> r15 "Cast away GC" ; ; Lcl frame size = 56 G_M10567_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 56 lea rbp, [rsp+0x60] xor eax, eax mov qword ptr [rbp-0x30], rax mov r15, rsi mov r14d, edx mov rdx, r8 mov rbx, rcx mov r8, gword ptr [rbp+0x10] ;; size=41 bbWeight=1 PerfScore 10.00 G_M10567_IG02: mov r13, qword ptr [rdi] mov r12, qword ptr [rdi+0x08] test r9d, r9d jne SHORT G_M10567_IG04 ;; size=12 bbWeight=1 PerfScore 5.25 G_M10567_IG03: test r12, r12 jge SHORT G_M10567_IG05 test r8, r8 je G_M10567_IG16 mov rdi, r8 mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo jmp G_M10567_IG17 ;; size=34 bbWeight=0.50 PerfScore 4.00 G_M10567_IG04: mov bword ptr [rsp], r15 mov dword ptr [rsp+0x08], r14d mov rdi, r13 mov rsi, r12 mov ecx, r9d mov r9, rbx mov rax, 0xD1FFAB1E ; code for System.Number:g__TryFormatInt128Slow|27_0[ushort](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ushort],byref):ubyte call [rax]System.Number:g__TryFormatInt128Slow|27_0[ushort](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ushort],byref):ubyte jmp G_M10567_IG20 ;; size=38 bbWeight=0.50 PerfScore 4.12 G_M10567_IG05: test r12, r12 jne SHORT G_M10567_IG06 mov rdi, r13 or rdi, 1 lzcnt rdi, rdi xor edi, 63 movsxd rdi, edi mov rsi, 0xD1FFAB1E ; static handle movzx rax, byte ptr [rdi+rsi] mov edi, eax mov rsi, 0xD1FFAB1E ; static handle cmp r13, qword ptr [rsi+8*rdi] setb dil movzx rdi, dil sub eax, edi jmp G_M10567_IG08 ;; size=68 bbWeight=0.50 PerfScore 6.75 G_M10567_IG06: mov eax, 20 cmp r12, 5 jbe SHORT G_M10567_IG07 mov rdi, r13 mov rsi, r12 mov rdx, 0xD1FFAB1E mov ecx, 5 mov rax, 0xD1FFAB1E ; code for System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 call [rax]System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 - mov rsi, rax - or rsi, 1 - lzcnt rsi, rsi - xor esi, 63 - movsxd rsi, esi + mov rdi, rax + or rdi, 1 + lzcnt rdi, rdi + xor edi, 63 + movsxd rdi, edi + mov rsi, 0xD1FFAB1E ; static handle + movzx rdi, byte ptr [rdi+rsi] + mov esi, edi mov rdx, 0xD1FFAB1E ; static handle - movzx rsi, byte ptr [rsi+rdx] - mov edx, esi - mov rcx, 0xD1FFAB1E ; static handle - cmp rax, qword ptr [rcx+8*rdx] - setb dl - movzx rdx, dl - sub esi, edx - lea eax, [rsi+0x14] + cmp rax, qword ptr [rdx+8*rsi] + setb sil + movzx rsi, sil + sub edi, esi + lea eax, [rdi+0x14] jmp SHORT G_M10567_IG08 - ;; size=106 bbWeight=0.50 PerfScore 9.25 + ;; size=108 bbWeight=0.50 PerfScore 9.25 G_M10567_IG07: cmp r12, 5 jne SHORT G_M10567_IG08 - mov rsi, 0xD1FFAB1E - mov edx, 21 - cmp r13, rsi - cmovae eax, edx + mov rdi, 0xD1FFAB1E + mov esi, 21 + cmp r13, rdi + cmovae eax, esi ;; size=27 bbWeight=0.50 PerfScore 1.12 G_M10567_IG08: - mov esi, -1 + mov edi, -1 test eax, eax - cmovge esi, eax - cmp esi, r14d - jg SHORT G_M10567_IG11 - mov dword ptr [rbx], esi + cmovge edi, eax + cmp edi, r14d + jg G_M10567_IG11 + mov dword ptr [rbx], edi mov bword ptr [rbp-0x30], r15 - movsxd rsi, esi - lea r14, [r15+2*rsi] + movsxd rdi, edi + lea r14, [r15+2*rdi] cmp eax, -1 - jl SHORT G_M10567_IG13 + jl G_M10567_IG13 test r12, r12 - je SHORT G_M10567_IG10 - ;; size=38 bbWeight=0.50 PerfScore 3.62 + je G_M10567_IG10 + ;; size=50 bbWeight=0.50 PerfScore 3.62 G_M10567_IG09: - mov rsi, r13 - mov rdx, r12 - mov rcx, 0xD1FFAB1E - xor r8d, r8d + mov rdi, r13 + mov rsi, r12 + mov rdx, 0xD1FFAB1E + xor ecx, ecx + mov rax, 0xD1FFAB1E ; code for System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 + call [rax]System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 + mov rbx, rax + mov r15, rdx + mov rdi, rbx + mov rsi, r15 + mov rdx, 0xD1FFAB1E + xor ecx, ecx + mov rax, 0xD1FFAB1E ; code for System.UInt128:op_Multiply(System.UInt128,System.UInt128):System.UInt128 + call [rax]System.UInt128:op_Multiply(System.UInt128,System.UInt128):System.UInt128 + mov rcx, rdx + vxorps ymm0, ymm0, ymm0 + vmovdqu ymmword ptr [rbp-0x50], ymm0 + mov rdi, r13 + mov rsi, r12 + mov rdx, rax + mov rax, 0xD1FFAB1E ; code for System.UInt128:op_Subtraction(System.UInt128,System.UInt128):System.UInt128 + call [rax]System.UInt128:op_Subtraction(System.UInt128,System.UInt128):System.UInt128 + mov rcx, rax + mov r8, rdx + mov rsi, rbx + mov rdx, r15 lea rdi, [rbp-0x50] - mov rax, 0xD1FFAB1E ; code for System.UInt128:DivRem(System.UInt128,System.UInt128):System.ValueTuple`2[System.UInt128,System.UInt128] - call [rax]System.UInt128:DivRem(System.UInt128,System.UInt128):System.ValueTuple`2[System.UInt128,System.UInt128] + mov rax, 0xD1FFAB1E ; code for System.ValueTuple`2[System.UInt128,System.UInt128]:.ctor(System.UInt128,System.UInt128):this + call [rax]System.ValueTuple`2[System.UInt128,System.UInt128]:.ctor(System.UInt128,System.UInt128):this mov r13, qword ptr [rbp-0x50] mov r12, qword ptr [rbp-0x48] mov rsi, qword ptr [rbp-0x40] mov rdi, r14 mov edx, 19 mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ushort](ulong,ulong,int):ulong call [rax]System.Number:UInt64ToDecChars[ushort](ulong,ulong,int):ulong mov r14, rax test r12, r12 - jne SHORT G_M10567_IG09 - ;; size=75 bbWeight=4 PerfScore 52.00 + jne G_M10567_IG09 + ;; size=171 bbWeight=4 PerfScore 110.33 G_M10567_IG10: mov rdi, r14 mov rsi, r13 mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ushort](ulong,ulong):ulong call [rax]System.Number:UInt64ToDecChars[ushort](ulong,ulong):ulong jmp SHORT G_M10567_IG14 ;; size=20 bbWeight=0.50 PerfScore 2.88 G_M10567_IG11: xor esi, esi mov dword ptr [rbx], esi ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M10567_IG12: xor eax, eax jmp SHORT G_M10567_IG15 ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M10567_IG13: mov rsi, r13 mov rdx, r12 mov rdi, r14 mov ecx, -1 mov rax, 0xD1FFAB1E ; code for System.Number:UInt128ToDecChars[ushort](ulong,System.UInt128,int):ulong call [rax]System.Number:UInt128ToDecChars[ushort](ulong,System.UInt128,int):ulong ;; size=26 bbWeight=0.50 PerfScore 2.12 G_M10567_IG14: xor eax, eax mov bword ptr [rbp-0x30], rax mov eax, 1 ;; size=11 bbWeight=0.50 PerfScore 0.75 G_M10567_IG15: jmp SHORT G_M10567_IG20 ;; size=2 bbWeight=0.50 PerfScore 1.00 G_M10567_IG16: mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo ;; size=12 bbWeight=0.50 PerfScore 1.62 G_M10567_IG17: mov rdi, gword ptr [rax+0x28] test rdi, rdi jne SHORT G_M10567_IG18 xor rcx, rcx xor r8d, r8d jmp SHORT G_M10567_IG19 ;; size=16 bbWeight=0.50 PerfScore 2.88 G_M10567_IG18: lea rcx, bword ptr [rdi+0x0C] mov r8d, dword ptr [rdi+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 G_M10567_IG19: mov bword ptr [rsp], r15 mov dword ptr [rsp+0x08], r14d mov rdi, r13 mov rsi, r12 mov r9, rbx mov edx, -1 mov rax, 0xD1FFAB1E ; code for System.Number:TryNegativeInt128ToDecStr[ushort](System.Int128,int,System.ReadOnlySpan`1[ushort],System.Span`1[ushort],byref):ubyte call [rax]System.Number:TryNegativeInt128ToDecStr[ushort](System.Int128,int,System.ReadOnlySpan`1[ushort],System.Span`1[ushort],byref):ubyte ;; size=35 bbWeight=0.50 PerfScore 3.12 G_M10567_IG20: nop ;; size=1 bbWeight=1 PerfScore 0.25 G_M10567_IG21: add rsp, 56 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 -; Total bytes of code 593, prolog size 25, PerfScore 118.00, instruction count 158, allocated bytes for code 593 (MethodHash=0694d6b8) for method System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts) +; Total bytes of code 703, prolog size 25, PerfScore 176.33, instruction count 180, allocated bytes for code 703 (MethodHash=0694d6b8) for method System.Int128:TryFormat(System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts) ```

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

MihuBot commented 1 week ago

Top method improvements

-55 (-7.54 % of base) - System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this ```diff ; Assembly listing for method System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 21 single block inlinees; 13 inlinees without PGO data +; 0 inlinees with PGO data; 21 single block inlinees; 12 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T06] ( 4, 4 ) byref -> rdi this single-def +; V00 this [V00,T05] ( 4, 4 ) byref -> rdi this single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def -; V02 arg2 [V02,T05] ( 6, 4 ) byref -> rbx single-def +; V02 arg2 [V02,T04] ( 6, 4 ) byref -> rbx single-def ;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def -; V04 arg4 [V04,T24] ( 3, 1.50) ref -> r8 class-hnd single-def +; V04 arg4 [V04,T23] ( 3, 1.50) ref -> r8 class-hnd single-def ; V05 OutArgs [V05 ] ( 1, 1 ) struct (16) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T19] ( 4, 2.50) ubyte -> rax "Inline return value spill temp" ;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inlining Arg" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ; V11 tmp6 [V11,T16] ( 5, 2.50) ref -> [rbp-0x58] class-hnd "Inline return value spill temp" ;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" -; V13 tmp8 [V13,T22] ( 2, 2 ) ref -> rcx class-hnd single-def "dup spill" -; V14 tmp9 [V14,T13] ( 6, 3 ) ref -> rcx +; V13 tmp8 [V13,T21] ( 2, 2 ) ref -> rcx class-hnd single-def "dup spill" +; V14 tmp9 [V14,T14] ( 6, 3 ) ref -> rcx ; V15 tmp10 [V15,T15] ( 3, 3 ) ref -> [rbp-0x60] class-hnd spill-single-def "dup spill" ;* V16 tmp11 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" ;* V17 tmp12 [V17 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V18 tmp13 [V18 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V19 tmp14 [V19 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V20 tmp15 [V20 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V21 tmp16 [V21,T26] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" -;* V22 tmp17 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V24 tmp19 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V25 tmp20 [V25 ] ( 2, 1 ) byref -> [rbp-0x30] must-init pinned "Inline stloc first use temp" -; V26 tmp21 [V26,T27] ( 3, 1.50) long -> rbx "Inline stloc first use temp" -;* V27 tmp22 [V27 ] ( 0, 0 ) long -> zero-ref -; V28 tmp23 [V28,T17] ( 5, 2.50) int -> rax "Inline return value spill temp" -;* V29 tmp24 [V29 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inlining Arg" -;* V30 tmp25 [V30 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V31 tmp26 [V31,T18] ( 5, 2.50) int -> rax "Inline stloc first use temp" -;* V32 tmp27 [V32 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V33 tmp28 [V33 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" -;* V34 tmp29 [V34 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" -;* V35 tmp30 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V36 tmp31 [V36 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V37 tmp32 [V37 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" -; V38 tmp33 [V38,T28] ( 3, 1.50) int -> rax "Inline stloc first use temp" -;* V39 tmp34 [V39 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" -;* V40 tmp35 [V40 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -;* V41 tmp36 [V41 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V42 tmp37 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V43 tmp38 [V43 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +; V18 tmp13 [V18,T25] ( 3, 1.50) ubyte -> rax "Inline return value spill temp" +;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V21 tmp16 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V22 tmp17 [V22 ] ( 2, 1 ) byref -> [rbp-0x30] must-init pinned "Inline stloc first use temp" +; V23 tmp18 [V23,T26] ( 3, 1.50) long -> rbx "Inline stloc first use temp" +;* V24 tmp19 [V24 ] ( 0, 0 ) long -> zero-ref +; V25 tmp20 [V25,T17] ( 5, 2.50) int -> rax "Inline return value spill temp" +;* V26 tmp21 [V26 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inlining Arg" +;* V27 tmp22 [V27 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V28 tmp23 [V28,T18] ( 5, 2.50) int -> rax "Inline stloc first use temp" +;* V29 tmp24 [V29 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V30 tmp25 [V30 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" +;* V31 tmp26 [V31 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" +;* V32 tmp27 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V33 tmp28 [V33 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V34 tmp29 [V34 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" +; V35 tmp30 [V35,T27] ( 3, 1.50) int -> rax "Inline stloc first use temp" +;* V36 tmp31 [V36 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" +;* V37 tmp32 [V37 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V38 tmp33 [V38 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V39 tmp34 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V40 tmp35 [V40 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V41 tmp36 [V41 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V42 tmp37 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V43 tmp38 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V44 tmp39 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V45 tmp40 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V46 tmp41 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V47 tmp42 [V47 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V48 tmp43 [V48 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" -; V49 tmp44 [V49,T29] ( 3, 1.50) int -> rdi "Inline stloc first use temp" -;* V50 tmp45 [V50 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" -;* V51 tmp46 [V51 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -;* V52 tmp47 [V52 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" -;* V53 tmp48 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V54 tmp49 [V54 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V55 tmp50 [V55 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V56 tmp51 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V57 tmp52 [V57,T21] ( 4, 2 ) int -> rdi "Inline return value spill temp" -;* V58 tmp53 [V58 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V59 tmp54 [V59 ] ( 6, 20 ) struct (16) [rbp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" -; V60 tmp55 [V60,T00] ( 4, 18 ) long -> rbx "Inlining Arg" -; V61 tmp56 [V61 ] ( 6, 20 ) struct (16) [rbp-0x50] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" -; V62 tmp57 [V62,T01] ( 4, 18 ) long -> r14 "Inlining Arg" -; V63 tmp58 [V63,T02] ( 4, 18 ) int -> rbx "Inlining Arg" -; V64 tmp59 [V64,T07] ( 5, 3 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V65 tmp60 [V65,T08] ( 4, 2.50) int -> r14 single-def "field V01._length (fldOffset=0x8)" P-INDEP -; V66 tmp61 [V66,T12] ( 2, 1.50) byref -> rdx single-def "field V03._reference (fldOffset=0x0)" P-INDEP -; V67 tmp62 [V67,T09] ( 3, 2.50) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP -;* V68 tmp63 [V68 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP -;* V69 tmp64 [V69 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP -; V70 tmp65 [V70,T20] ( 4, 2.50) long -> r13 "field V08._lower (fldOffset=0x0)" P-INDEP -; V71 tmp66 [V71,T14] ( 5, 3 ) long -> r12 "field V08._upper (fldOffset=0x8)" P-INDEP -;* V72 tmp67 [V72 ] ( 0, 0 ) long -> zero-ref "field V09._lower (fldOffset=0x0)" P-INDEP -;* V73 tmp68 [V73 ] ( 0, 0 ) long -> zero-ref "field V09._upper (fldOffset=0x8)" P-INDEP -;* V74 tmp69 [V74 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP -;* V75 tmp70 [V75 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V76 tmp71 [V76 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP -;* V77 tmp72 [V77 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP -; V78 tmp73 [V78,T25] ( 3, 1.50) byref -> registers "field V17._reference (fldOffset=0x0)" P-INDEP -; V79 tmp74 [V79,T30] ( 3, 1.50) int -> registers "field V17._length (fldOffset=0x8)" P-INDEP -; V80 tmp75 [V80,T10] ( 7, 3.50) long -> r13 "field V18._lower (fldOffset=0x0)" P-INDEP -; V81 tmp76 [V81,T11] ( 7, 3.50) long -> r12 "field V18._upper (fldOffset=0x8)" P-INDEP -;* V82 tmp77 [V82 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP -;* V83 tmp78 [V83 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP -; V84 tmp79 [V84,T31] ( 3, 1.50) long -> rax "field V29._lower (fldOffset=0x0)" P-INDEP -; V85 tmp80 [V85,T32] ( 1, 0.50) long -> rdx "field V29._upper (fldOffset=0x8)" P-INDEP -;* V86 tmp81 [V86,T33] ( 0, 0 ) long -> zero-ref "field V32._lower (fldOffset=0x0)" P-INDEP -;* V87 tmp82 [V87,T34] ( 0, 0 ) long -> zero-ref "field V32._upper (fldOffset=0x8)" P-INDEP -;* V88 tmp83 [V88 ] ( 0, 0 ) long -> zero-ref "field V33._lower (fldOffset=0x0)" P-INDEP -;* V89 tmp84 [V89 ] ( 0, 0 ) long -> zero-ref "field V33._upper (fldOffset=0x8)" P-INDEP -;* V90 tmp85 [V90 ] ( 0, 0 ) long -> zero-ref "field V34._lower (fldOffset=0x0)" P-DEP -;* V91 tmp86 [V91 ] ( 0, 0 ) long -> zero-ref "field V34._upper (fldOffset=0x8)" P-DEP -;* V92 tmp87 [V92 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP -;* V93 tmp88 [V93 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP -;* V94 tmp89 [V94 ] ( 0, 0 ) byref -> zero-ref single-def "field V39._reference (fldOffset=0x0)" P-INDEP -;* V95 tmp90 [V95 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0x8)" P-INDEP -;* V96 tmp91 [V96 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP -;* V97 tmp92 [V97 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP -;* V98 tmp93 [V98 ] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP -;* V99 tmp94 [V99 ] ( 0, 0 ) int -> zero-ref "field V45._length (fldOffset=0x8)" P-INDEP -;* V100 tmp95 [V100 ] ( 0, 0 ) byref -> zero-ref single-def "field V46._reference (fldOffset=0x0)" P-INDEP -;* V101 tmp96 [V101 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP -;* V102 tmp97 [V102 ] ( 0, 0 ) byref -> zero-ref single-def "field V50._reference (fldOffset=0x0)" P-INDEP -;* V103 tmp98 [V103 ] ( 0, 0 ) int -> zero-ref "field V50._length (fldOffset=0x8)" P-INDEP -;* V104 tmp99 [V104 ] ( 0, 0 ) byref -> zero-ref single-def "field V53._reference (fldOffset=0x0)" P-INDEP -;* V105 tmp100 [V105 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0x8)" P-INDEP -;* V106 tmp101 [V106 ] ( 0, 0 ) byref -> zero-ref single-def "field V56._reference (fldOffset=0x0)" P-INDEP -;* V107 tmp102 [V107 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP -;* V108 tmp103 [V108 ] ( 0, 0 ) byref -> zero-ref single-def "field V58._reference (fldOffset=0x0)" P-INDEP -;* V109 tmp104 [V109 ] ( 0, 0 ) int -> zero-ref "field V58._length (fldOffset=0x8)" P-INDEP -; V110 tmp105 [V110 ] ( 3, 9 ) long -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V59._lower (fldOffset=0x0)" P-DEP -; V111 tmp106 [V111 ] ( 4, 13 ) long -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V59._upper (fldOffset=0x8)" P-DEP -; V112 tmp107 [V112 ] ( 3, 9 ) long -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V61._lower (fldOffset=0x0)" P-DEP -; V113 tmp108 [V113 ] ( 4, 13 ) long -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V61._upper (fldOffset=0x8)" P-DEP -; V114 tmp109 [V114,T23] ( 2, 2 ) long -> r15 "Cast away GC" -; V115 tmp110 [V115,T03] ( 2, 16 ) long -> rsi "argument with side effect" -; V116 tmp111 [V116,T04] ( 2, 16 ) long -> rsi "argument with side effect" +;* V45 tmp40 [V45 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" +; V46 tmp41 [V46,T28] ( 3, 1.50) int -> rsi "Inline stloc first use temp" +;* V47 tmp42 [V47 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" +;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +;* V49 tmp44 [V49 ] ( 0, 0 ) ubyte -> zero-ref ld-addr-op "Inline stloc first use temp" +;* V50 tmp45 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V51 tmp46 [V51 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V52 tmp47 [V52 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V53 tmp48 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V54 tmp49 [V54,T20] ( 4, 2 ) int -> rsi "Inline return value spill temp" +;* V55 tmp50 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V56 tmp51 [V56 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inlining Arg" +; V57 tmp52 [V57,T00] ( 4, 18 ) long -> rbx "Inlining Arg" +;* V58 tmp53 [V58 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inline ldloca(s) first use temp" +; V59 tmp54 [V59 ] ( 4, 16 ) struct (32) [rbp-0x50] do-not-enreg[XS] addr-exposed "Inline stloc first use temp" +;* V60 tmp55 [V60 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" +; V61 tmp56 [V61,T08] ( 5, 3 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V62 tmp57 [V62,T09] ( 4, 2.50) int -> r14 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V63 tmp58 [V63,T13] ( 2, 1.50) byref -> rdx single-def "field V03._reference (fldOffset=0x0)" P-INDEP +; V64 tmp59 [V64,T10] ( 3, 2.50) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP +;* V65 tmp60 [V65 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP +;* V66 tmp61 [V66 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V67 tmp62 [V67,T07] ( 9, 5 ) long -> r13 "field V08._lower (fldOffset=0x0)" P-INDEP +; V68 tmp63 [V68,T06] ( 10, 5.50) long -> r12 "field V08._upper (fldOffset=0x8)" P-INDEP +;* V69 tmp64 [V69 ] ( 0, 0 ) long -> zero-ref "field V09._lower (fldOffset=0x0)" P-INDEP +;* V70 tmp65 [V70 ] ( 0, 0 ) long -> zero-ref "field V09._upper (fldOffset=0x8)" P-INDEP +;* V71 tmp66 [V71 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP +;* V72 tmp67 [V72 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V73 tmp68 [V73 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP +;* V74 tmp69 [V74 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP +; V75 tmp70 [V75,T24] ( 3, 1.50) byref -> registers "field V17._reference (fldOffset=0x0)" P-INDEP +; V76 tmp71 [V76,T29] ( 3, 1.50) int -> registers "field V17._length (fldOffset=0x8)" P-INDEP +;* V77 tmp72 [V77 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP +;* V78 tmp73 [V78 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP +; V79 tmp74 [V79,T30] ( 3, 1.50) long -> rax "field V26._lower (fldOffset=0x0)" P-INDEP +; V80 tmp75 [V80,T31] ( 1, 0.50) long -> rdx "field V26._upper (fldOffset=0x8)" P-INDEP +;* V81 tmp76 [V81,T32] ( 0, 0 ) long -> zero-ref "field V29._lower (fldOffset=0x0)" P-INDEP +;* V82 tmp77 [V82,T33] ( 0, 0 ) long -> zero-ref "field V29._upper (fldOffset=0x8)" P-INDEP +;* V83 tmp78 [V83 ] ( 0, 0 ) long -> zero-ref "field V30._lower (fldOffset=0x0)" P-INDEP +;* V84 tmp79 [V84 ] ( 0, 0 ) long -> zero-ref "field V30._upper (fldOffset=0x8)" P-INDEP +;* V85 tmp80 [V85 ] ( 0, 0 ) long -> zero-ref "field V31._lower (fldOffset=0x0)" P-DEP +;* V86 tmp81 [V86 ] ( 0, 0 ) long -> zero-ref "field V31._upper (fldOffset=0x8)" P-DEP +;* V87 tmp82 [V87 ] ( 0, 0 ) byref -> zero-ref single-def "field V32._reference (fldOffset=0x0)" P-INDEP +;* V88 tmp83 [V88 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP +;* V89 tmp84 [V89 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP +;* V90 tmp85 [V90 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP +;* V91 tmp86 [V91 ] ( 0, 0 ) byref -> zero-ref single-def "field V39._reference (fldOffset=0x0)" P-INDEP +;* V92 tmp87 [V92 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0x8)" P-INDEP +;* V93 tmp88 [V93 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP +;* V94 tmp89 [V94 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP +;* V95 tmp90 [V95 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP +;* V96 tmp91 [V96 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP +;* V97 tmp92 [V97 ] ( 0, 0 ) byref -> zero-ref single-def "field V47._reference (fldOffset=0x0)" P-INDEP +;* V98 tmp93 [V98 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-INDEP +;* V99 tmp94 [V99 ] ( 0, 0 ) byref -> zero-ref single-def "field V50._reference (fldOffset=0x0)" P-INDEP +;* V100 tmp95 [V100 ] ( 0, 0 ) int -> zero-ref "field V50._length (fldOffset=0x8)" P-INDEP +;* V101 tmp96 [V101 ] ( 0, 0 ) byref -> zero-ref single-def "field V53._reference (fldOffset=0x0)" P-INDEP +;* V102 tmp97 [V102 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0x8)" P-INDEP +;* V103 tmp98 [V103 ] ( 0, 0 ) byref -> zero-ref single-def "field V55._reference (fldOffset=0x0)" P-INDEP +;* V104 tmp99 [V104 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP +; V105 tmp100 [V105,T02] ( 4, 9 ) long -> r13 "field V56._lower (fldOffset=0x0)" P-INDEP +; V106 tmp101 [V106,T01] ( 5, 13 ) long -> r12 "field V56._upper (fldOffset=0x8)" P-INDEP +;* V107 tmp102 [V107,T11] ( 0, 0 ) long -> zero-ref "field V58._lower (fldOffset=0x0)" P-INDEP +;* V108 tmp103 [V108,T12] ( 0, 0 ) long -> zero-ref "field V58._upper (fldOffset=0x8)" P-INDEP +; V109 tmp104 [V109,T03] ( 2, 8 ) long -> rsi "field V60._lower (fldOffset=0x0)" P-INDEP +;* V110 tmp105 [V110 ] ( 0, 0 ) long -> zero-ref "field V60._upper (fldOffset=0x8)" P-INDEP +; V111 tmp106 [V111,T22] ( 2, 2 ) long -> r15 "Cast away GC" ; ; Lcl frame size = 72 G_M55295_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 72 lea rbp, [rsp+0x70] xor eax, eax mov qword ptr [rbp-0x30], rax mov r15, rsi mov r14d, edx mov rdx, r8 mov rbx, rcx mov r8, gword ptr [rbp+0x10] ;; size=41 bbWeight=1 PerfScore 10.00 G_M55295_IG02: mov r13, qword ptr [rdi] mov r12, qword ptr [rdi+0x08] test r9d, r9d jne SHORT G_M55295_IG04 ;; size=12 bbWeight=1 PerfScore 5.25 G_M55295_IG03: test r12, r12 jge SHORT G_M55295_IG05 test r8, r8 - je G_M55295_IG18 + je G_M55295_IG16 mov rdi, r8 mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo:g__GetProviderNonNull|58_0(System.IFormatProvider):System.Globalization.NumberFormatInfo - jmp G_M55295_IG19 + jmp G_M55295_IG17 ;; size=34 bbWeight=0.50 PerfScore 4.00 G_M55295_IG04: mov bword ptr [rsp], r15 mov dword ptr [rsp+0x08], r14d mov rdi, r13 mov rsi, r12 mov ecx, r9d mov r9, rbx mov rax, 0xD1FFAB1E ; code for System.Number:g__TryFormatInt128Slow|27_0[ubyte](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte call [rax]System.Number:g__TryFormatInt128Slow|27_0[ubyte](System.Int128,System.ReadOnlySpan`1[ushort],System.IFormatProvider,System.Span`1[ubyte],byref):ubyte - jmp G_M55295_IG23 + jmp G_M55295_IG21 ;; size=38 bbWeight=0.50 PerfScore 4.12 G_M55295_IG05: test r12, r12 jne SHORT G_M55295_IG06 mov rdi, r13 or rdi, 1 lzcnt rdi, rdi xor edi, 63 movsxd rdi, edi mov rsi, 0xD1FFAB1E ; static handle movzx rax, byte ptr [rdi+rsi] mov edi, eax mov rsi, 0xD1FFAB1E ; static handle cmp r13, qword ptr [rsi+8*rdi] setb dil movzx rdi, dil sub eax, edi jmp G_M55295_IG08 ;; size=68 bbWeight=0.50 PerfScore 6.75 G_M55295_IG06: mov eax, 20 cmp r12, 5 jbe SHORT G_M55295_IG07 mov rdi, r13 mov rsi, r12 mov rdx, 0xD1FFAB1E mov ecx, 5 mov rax, 0xD1FFAB1E ; code for System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 call [rax]System.UInt128:op_Division(System.UInt128,System.UInt128):System.UInt128 - mov rdi, rax - or rdi, 1 - lzcnt rdi, rdi - xor edi, 63 - movsxd rdi, edi - mov rcx, 0xD1FFAB1E ; static handle - movzx rdi, byte ptr [rdi+rcx] - mov ecx, edi + mov rsi, rax + or rsi, 1 + lzcnt rsi, rsi + xor esi, 63 + movsxd rsi, esi mov rdx, 0xD1FFAB1E ; static handle - cmp rax, qword ptr [rdx+8*rcx] - setb al - movzx rax, al - sub edi, eax - lea eax, [rdi+0x14] + movzx rsi, byte ptr [rsi+rdx] + mov edx, esi + mov rcx, 0xD1FFAB1E ; static handle + cmp rax, qword ptr [rcx+8*rdx] + setb dl + movzx rdx, dl + sub esi, edx + lea eax, [rsi+0x14] jmp SHORT G_M55295_IG08 ;; size=106 bbWeight=0.50 PerfScore 9.25 G_M55295_IG07: cmp r12, 5 jne SHORT G_M55295_IG08 - mov rdi, 0xD1FFAB1E - mov ecx, 21 - cmp r13, rdi - cmovae eax, ecx + mov rsi, 0xD1FFAB1E + mov edx, 21 + cmp r13, rsi + cmovae eax, edx ;; size=27 bbWeight=0.50 PerfScore 1.12 G_M55295_IG08: - mov edi, -1 + mov esi, -1 test eax, eax - cmovge edi, eax - cmp edi, r14d + cmovge esi, eax + cmp esi, r14d jg SHORT G_M55295_IG11 - mov dword ptr [rbx], edi + mov dword ptr [rbx], esi mov bword ptr [rbp-0x30], r15 - movsxd rbx, edi + movsxd rbx, esi add rbx, r15 cmp eax, -1 jl SHORT G_M55295_IG13 - mov qword ptr [rbp-0x40], r13 - mov qword ptr [rbp-0x38], r12 - cmp qword ptr [rbp-0x38], 0 + test r12, r12 je SHORT G_M55295_IG10 - ;; size=47 bbWeight=0.50 PerfScore 5.38 + ;; size=37 bbWeight=0.50 PerfScore 3.50 G_M55295_IG09: - lea rdi, [rbp-0x40] - mov rax, 0xD1FFAB1E ; code for System.Number:Int128DivMod1E19(byref):ulong - call [rax]System.Number:Int128DivMod1E19(byref):ulong - mov rsi, rax + mov rsi, r13 + mov rdx, r12 + mov rcx, 0xD1FFAB1E + xor r8d, r8d + lea rdi, [rbp-0x50] + mov rax, 0xD1FFAB1E ; code for System.UInt128:DivRem(System.UInt128,System.UInt128):System.ValueTuple`2[System.UInt128,System.UInt128] + call [rax]System.UInt128:DivRem(System.UInt128,System.UInt128):System.ValueTuple`2[System.UInt128,System.UInt128] + mov r13, qword ptr [rbp-0x50] + mov r12, qword ptr [rbp-0x48] + mov rsi, qword ptr [rbp-0x40] mov rdi, rbx mov edx, 19 mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong call [rax]System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong mov rbx, rax - cmp qword ptr [rbp-0x38], 0 + test r12, r12 jne SHORT G_M55295_IG09 - ;; size=49 bbWeight=4 PerfScore 44.00 + ;; size=75 bbWeight=4 PerfScore 52.00 G_M55295_IG10: mov rdi, rbx - mov rsi, qword ptr [rbp-0x40] + mov rsi, r13 mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ubyte](ulong,ulong):ulong call [rax]System.Number:UInt64ToDecChars[ubyte](ulong,ulong):ulong - jmp SHORT G_M55295_IG16 - ;; size=21 bbWeight=0.50 PerfScore 3.25 + jmp SHORT G_M55295_IG14 + ;; size=20 bbWeight=0.50 PerfScore 2.88 G_M55295_IG11: - xor edi, edi - mov dword ptr [rbx], edi + xor esi, esi + mov dword ptr [rbx], esi ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M55295_IG12: xor eax, eax - jmp SHORT G_M55295_IG17 + jmp SHORT G_M55295_IG15 ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M55295_IG13: - mov r14, rbx - mov qword ptr [rbp-0x50], r13 - mov qword ptr [rbp-0x48], r12 - mov ebx, -1 - cmp qword ptr [rbp-0x48], 0 - je SHORT G_M55295_IG15 - ;; size=23 bbWeight=0.50 PerfScore 2.75 + mov rsi, r13 + mov rdx, r12 + mov rdi, rbx + mov ecx, -1 + mov rax, 0xD1FFAB1E ; code for System.Number:UInt128ToDecChars[ubyte](ulong,System.UInt128,int):ulong + call [rax]System.Number:UInt128ToDecChars[ubyte](ulong,System.UInt128,int):ulong + ;; size=26 bbWeight=0.50 PerfScore 2.12 G_M55295_IG14: - lea rdi, [rbp-0x50] - mov rax, 0xD1FFAB1E ; code for System.Number:Int128DivMod1E19(byref):ulong - call [rax]System.Number:Int128DivMod1E19(byref):ulong - mov rsi, rax - mov rdi, r14 - mov edx, 19 - mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong - call [rax]System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong - mov r14, rax - add ebx, -19 - cmp qword ptr [rbp-0x48], 0 - jne SHORT G_M55295_IG14 - ;; size=52 bbWeight=4 PerfScore 45.00 -G_M55295_IG15: - mov rdi, r14 - mov rsi, qword ptr [rbp-0x50] - mov edx, ebx - mov rax, 0xD1FFAB1E ; code for System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong - call [rax]System.Number:UInt64ToDecChars[ubyte](ulong,ulong,int):ulong - ;; size=21 bbWeight=0.50 PerfScore 2.38 -G_M55295_IG16: xor eax, eax mov bword ptr [rbp-0x30], rax mov eax, 1 ;; size=11 bbWeight=0.50 PerfScore 0.75 -G_M55295_IG17: - jmp G_M55295_IG23 +G_M55295_IG15: + jmp G_M55295_IG21 ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M55295_IG18: +G_M55295_IG16: mov rax, 0xD1FFAB1E ; code for System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo call [rax]System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo ;; size=12 bbWeight=0.50 PerfScore 1.62 -G_M55295_IG19: +G_M55295_IG17: mov rcx, gword ptr [rax+0x98] test rcx, rcx - jne SHORT G_M55295_IG20 + jne SHORT G_M55295_IG18 mov gword ptr [rbp-0x58], rax mov rsi, gword ptr [rax+0x28] mov rdi, 0xD1FFAB1E ; const ptr mov rdi, gword ptr [rdi] mov rcx, 0xD1FFAB1E ; code for System.Text.UTF8Encoding+UTF8EncodingSealed:GetBytes(System.String):ubyte[]:this call [rcx]System.Text.UTF8Encoding+UTF8EncodingSealed:GetBytes(System.String):ubyte[]:this mov rcx, rax mov gword ptr [rbp-0x60], rcx mov rdi, gword ptr [rbp-0x58] lea rdi, bword ptr [rdi+0x98] mov rsi, rcx call CORINFO_HELP_ASSIGN_REF mov rcx, gword ptr [rbp-0x60] ;; size=75 bbWeight=0.50 PerfScore 8.38 -G_M55295_IG20: +G_M55295_IG18: test rcx, rcx - jne SHORT G_M55295_IG21 + jne SHORT G_M55295_IG19 xor rcx, rcx xor r8d, r8d - jmp SHORT G_M55295_IG22 + jmp SHORT G_M55295_IG20 ;; size=12 bbWeight=0.50 PerfScore 1.88 -G_M55295_IG21: +G_M55295_IG19: lea r8, bword ptr [rcx+0x10] mov edi, dword ptr [rcx+0x08] mov r9d, edi mov rcx, r8 mov r8d, r9d ;; size=16 bbWeight=0.50 PerfScore 1.62 -G_M55295_IG22: +G_M55295_IG20: mov bword ptr [rsp], r15 mov dword ptr [rsp+0x08], r14d mov rdi, r13 mov rsi, r12 mov r9, rbx mov edx, -1 mov rax, 0xD1FFAB1E ; code for System.Number:TryNegativeInt128ToDecStr[ubyte](System.Int128,int,System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte call [rax]System.Number:TryNegativeInt128ToDecStr[ubyte](System.Int128,int,System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte ;; size=35 bbWeight=0.50 PerfScore 3.12 -G_M55295_IG23: +G_M55295_IG21: nop ;; size=1 bbWeight=1 PerfScore 0.25 -G_M55295_IG24: +G_M55295_IG22: add rsp, 72 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 -; Total bytes of code 729, prolog size 25, PerfScore 167.88, instruction count 189, allocated bytes for code 729 (MethodHash=e2802800) for method System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte:this (FullOpts) +; Total bytes of code 674, prolog size 25, PerfScore 125.62, instruction count 176, allocated bytes for code 674 (MethodHash=e2802800) for method System.Int128:TryFormat(System.Span`1[ubyte],byref,System.ReadOnlySpan`1[ushort],System.IFormatProvider):ubyte: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/d53392d04f8fb69a8f8a9cdd213b449d

MihuBot commented 1 week ago

@xtqqczze