MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] xtqqczze/dotnet-runtime/DivRem #483

Open MihuBot opened 1 week ago

MihuBot commented 1 week ago

Job completed in 14 minutes.

Diffs

Found 278 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41568628
Total bytes of diff: 41568885
Total bytes of delta: 257 (0.00 % of base)
Total relative delta: -0.99
    diff is a regression.
    relative diff is an improvement.

Top file regressions (bytes):
         485 : System.Numerics.Tensors.dasm (0.04 % of base)

Top file improvements (bytes):
        -104 : System.Runtime.Numerics.dasm (-0.09 % of base)
         -59 : System.Net.Sockets.dasm (-0.02 % of base)
         -42 : System.Net.Http.dasm (-0.01 % of base)
         -23 : System.Private.CoreLib.dasm (-0.00 % of base)

5 total files with Code Size differences (4 improved, 1 regressed), 254 unchanged.

Top method regressions (bytes):
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[int](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[int]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[long](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[long]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[short](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[short]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[System.Nullable`1[int]](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[System.Nullable`1[int]]):byref (FullOpts)
          72 (1.76 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[ubyte](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[ubyte]):byref (FullOpts)
          69 (1.68 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[double](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[double]):byref (FullOpts)
          56 (1.35 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[System.Numerics.Vector`1[float]](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[System.Numerics.Vector`1[float]]):byref (FullOpts)

Top method improvements (bytes):
         -59 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine+<>c:<.ctor>b__15_0(System.Object):this (FullOpts)
         -44 (-2.87 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -44 (-2.89 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -42 (-2.27 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.ContentRangeHeaderValue:ToString():System.String:this (FullOpts)
         -16 (-1.02 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:op_RightShift(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -15 (-0.53 % of base) : System.Private.CoreLib.dasm - System.TimeZoneInfo+StringSerializer:SerializeTransitionTime(System.TimeZoneInfo+TransitionTime,byref) (FullOpts)
          -8 (-1.27 % of base) : System.Private.CoreLib.dasm - System.Number:FormatExponent[ubyte](byref,System.Globalization.NumberFormatInfo,int,ushort,int,ubyte) (FullOpts)

Top method regressions (percentages):
          72 (1.76 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[ubyte](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[ubyte]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[int](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[int]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[long](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[long]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[short](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[short]):byref (FullOpts)
          72 (1.75 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[System.Nullable`1[int]](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[System.Nullable`1[int]]):byref (FullOpts)
          69 (1.68 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[double](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[double]):byref (FullOpts)
          56 (1.35 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.Tensor:TensorPrimitivesHelperTwoSpanInSpanOut[System.Numerics.Vector`1[float]](byref,byref,byref,System.Numerics.Tensors.Tensor+PerformCalculationTwoSpanInSpanOut`1[System.Numerics.Vector`1[float]]):byref (FullOpts)

Top method improvements (percentages):
         -59 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine+<>c:<.ctor>b__15_0(System.Object):this (FullOpts)
         -44 (-2.89 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -44 (-2.87 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -42 (-2.27 % of base) : System.Net.Http.dasm - System.Net.Http.Headers.ContentRangeHeaderValue:ToString():System.String:this (FullOpts)
          -8 (-1.27 % of base) : System.Private.CoreLib.dasm - System.Number:FormatExponent[ubyte](byref,System.Globalization.NumberFormatInfo,int,ushort,int,ubyte) (FullOpts)
         -16 (-1.02 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:op_RightShift(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts)
         -15 (-0.53 % of base) : System.Private.CoreLib.dasm - System.TimeZoneInfo+StringSerializer:SerializeTransitionTime(System.TimeZoneInfo+TransitionTime,byref) (FullOpts)

14 total methods with Code Size differences (7 improved, 7 regressed), 252727 unchanged.

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

Artifacts:

MihuBot commented 1 week ago

Top method regressions

Note: some changes were skipped as they were too large to fit into a comment.

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

MihuBot commented 1 week ago

Top method improvements

-44 (-2.87 % of base) - System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger ```diff ; Assembly listing for method System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger (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; 11 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op single-def ; V01 arg1 [V01,T12] ( 10, 7.50) int -> rdx ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref ;* V03 loc1 [V03 ] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T26] ( 4, 2.50) int -> r13 -; V05 loc3 [V05,T16] ( 7, 3.50) ref -> r12 class-hnd +; V04 loc2 [V04,T25] ( 4, 2.50) int -> r13 +; V05 loc3 [V05,T17] ( 7, 3.50) ref -> r12 class-hnd ;* V06 loc4 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc5 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -; V08 loc6 [V08,T23] ( 5, 2.50) ubyte -> [rbp-0x2C] +; V08 loc6 [V08,T24] ( 5, 2.50) ubyte -> [rbp-0x2C] ;* V09 loc7 [V09 ] ( 0, 0 ) int -> zero-ref -; V10 loc8 [V10,T17] ( 7, 3.50) ref -> r15 class-hnd +; V10 loc8 [V10,T18] ( 7, 3.50) ref -> r15 class-hnd ;* V11 loc9 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op ;* V12 loc10 [V12 ] ( 0, 0 ) struct (16) zero-ref ; V13 loc11 [V13,T01] ( 11, 37 ) int -> rdi ; V14 loc12 [V14,T02] ( 11, 37 ) int -> rsi -; V15 loc13 [V15,T39] ( 3, 1.50) int -> rdi +; V15 loc13 [V15,T38] ( 3, 1.50) int -> rdi ; V16 loc14 [V16,T03] ( 11, 37 ) int -> rsi ; V17 loc15 [V17,T00] ( 14, 38.50) int -> rax ; V18 loc16 [V18,T08] ( 6, 17 ) int -> rcx ; V19 loc17 [V19,T09] ( 3, 12 ) int -> r10 ; V20 loc18 [V20,T10] ( 3, 12 ) int -> r10 ;# V21 OutArgs [V21 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V22 tmp1 [V22,T28] ( 3, 2 ) int -> [rbp-0x30] +; V22 tmp1 [V22,T27] ( 3, 2 ) int -> [rbp-0x30] ;* V23 tmp2 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "dup spill" ;* V24 tmp3 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "dup spill" ;* V25 tmp4 [V25 ] ( 0, 0 ) ref -> zero-ref single-def -; V26 tmp5 [V26,T19] ( 6, 3 ) int -> [rbp-0x34] -; V27 tmp6 [V27,T29] ( 2, 2 ) ref -> r12 class-hnd single-def "dup spill" -; V28 tmp7 [V28,T30] ( 2, 2 ) ref -> r15 class-hnd single-def "dup spill" +; V26 tmp5 [V26,T20] ( 6, 3 ) int -> [rbp-0x34] +; V27 tmp6 [V27,T28] ( 2, 2 ) ref -> r12 class-hnd single-def "dup spill" +; V28 tmp7 [V28,T29] ( 2, 2 ) ref -> r15 class-hnd single-def "dup spill" ; V29 tmp8 [V29 ] ( 4, 4 ) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" ;* V30 tmp9 [V30 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V31 tmp10 [V31 ] ( 0, 0 ) struct (16) zero-ref ;* V32 tmp11 [V32 ] ( 0, 0 ) struct (16) zero-ref multireg-ret -; V33 tmp12 [V33,T21] ( 3, 3 ) int -> rdi "Span.get_Item index" -; V34 tmp13 [V34,T22] ( 3, 3 ) int -> rcx "Span.get_Item index" +; V33 tmp12 [V33,T22] ( 3, 3 ) int -> rdi "Span.get_Item index" +; V34 tmp13 [V34,T23] ( 3, 3 ) int -> rcx "Span.get_Item index" ;* V35 tmp14 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V36 tmp15 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V37 tmp16 [V37 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret "Return value temp for multireg return" -; V38 tmp17 [V38,T24] ( 5, 2.50) int -> r14 "Inline stloc first use temp" -;* V39 tmp18 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" -;* V40 tmp19 [V40 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V41 tmp20 [V41,T35] ( 2, 2 ) long -> rdi "Inlining Arg" -;* V42 tmp21 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V43 tmp22 [V43 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V44 tmp23 [V44 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V45 tmp24 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V46 tmp25 [V46 ] ( 0, 0 ) byref -> zero-ref -;* V47 tmp26 [V47 ] ( 0, 0 ) byref -> zero-ref single-def -; V48 tmp27 [V48,T51] ( 2, 1 ) int -> rdx -;* V49 tmp28 [V49 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V50 tmp29 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V51 tmp30 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" -;* V52 tmp31 [V52 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -;* V53 tmp32 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V54 tmp33 [V54 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +; V38 tmp17 [V38,T16] ( 5, 5 ) int -> r14 "dup spill" +; V39 tmp18 [V39,T50] ( 2, 1 ) int -> rdi "Inline stloc first use temp" +;* V40 tmp19 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" +;* V41 tmp20 [V41 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V42 tmp21 [V42,T34] ( 2, 2 ) long -> rdi "Inlining Arg" +;* V43 tmp22 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V44 tmp23 [V44 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V45 tmp24 [V45 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V46 tmp25 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V47 tmp26 [V47 ] ( 0, 0 ) byref -> zero-ref +;* V48 tmp27 [V48 ] ( 0, 0 ) byref -> zero-ref single-def +; V49 tmp28 [V49,T51] ( 2, 1 ) int -> rdx +;* V50 tmp29 [V50 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" +;* V51 tmp30 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V52 tmp31 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" +;* V53 tmp32 [V53 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" +;* V54 tmp33 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V55 tmp34 [V55 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V56 tmp35 [V56 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V57 tmp36 [V57,T36] ( 2, 2 ) long -> rdi "Inlining Arg" -;* V58 tmp37 [V58 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V56 tmp35 [V56 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V57 tmp36 [V57 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V58 tmp37 [V58,T35] ( 2, 2 ) long -> rdi "Inlining Arg" ;* V59 tmp38 [V59 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V60 tmp39 [V60 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V61 tmp40 [V61 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V62 tmp41 [V62 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" -;* V63 tmp42 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -;* V64 tmp43 [V64 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V65 tmp44 [V65,T14] ( 11, 6.50) ref -> rbx single-def "field V00._bits (fldOffset=0x0)" P-INDEP -; V66 tmp45 [V66,T15] ( 8, 4.50) int -> r15 single-def "field V00._sign (fldOffset=0x8)" P-INDEP -; V67 tmp46 [V67,T07] ( 8, 18 ) byref -> [rbp-0x80] spill-single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V68 tmp47 [V68,T04] ( 19, 30.50) int -> [rbp-0x4C] spill-single-def "field V07._length (fldOffset=0x8)" P-INDEP -; V69 tmp48 [V69,T06] ( 9, 18.50) byref -> [rbp-0x88] spill-single-def "field V11._reference (fldOffset=0x0)" P-INDEP -; V70 tmp49 [V70,T05] ( 11, 26.50) int -> [rbp-0x50] spill-single-def "field V11._length (fldOffset=0x8)" P-INDEP -; V71 tmp50 [V71,T18] ( 6, 3 ) byref -> rdi "field V12._reference (fldOffset=0x0)" P-INDEP -; V72 tmp51 [V72,T20] ( 6, 3 ) int -> rcx "field V12._length (fldOffset=0x8)" P-INDEP -;* V73 tmp52 [V73 ] ( 0, 0 ) int -> zero-ref "field V23.Item1 (fldOffset=0x0)" P-INDEP -;* V74 tmp53 [V74 ] ( 0, 0 ) int -> zero-ref "field V23.Item2 (fldOffset=0x4)" P-INDEP -; V75 tmp54 [V75 ] ( 3, 2.50) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V29._bits (fldOffset=0x0)" P-DEP -; V76 tmp55 [V76 ] ( 3, 2.50) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V29._sign (fldOffset=0x8)" P-DEP -;* V77 tmp56 [V77 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP -;* V78 tmp57 [V78 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP -; V79 tmp58 [V79,T43] ( 2, 1 ) ref -> r14 single-def "field V31._bits (fldOffset=0x0)" P-INDEP -; V80 tmp59 [V80,T52] ( 2, 1 ) int -> r13 "field V31._sign (fldOffset=0x8)" P-INDEP -; V81 tmp60 [V81,T44] ( 2, 1 ) ref -> r14 single-def "field V32._bits (fldOffset=0x0)" P-INDEP -; V82 tmp61 [V82,T53] ( 2, 1 ) int -> r13 "field V32._sign (fldOffset=0x8)" P-INDEP -; V83 tmp62 [V83,T45] ( 2, 1 ) byref -> rdi single-def "field V35._reference (fldOffset=0x0)" P-INDEP -;* V84 tmp63 [V84,T59] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP -; V85 tmp64 [V85,T46] ( 2, 1 ) byref -> rdi single-def "field V36._reference (fldOffset=0x0)" P-INDEP -;* V86 tmp65 [V86,T60] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP -; V87 tmp66 [V87,T47] ( 2, 1 ) ref -> rdi "field V37._bits (fldOffset=0x0)" P-INDEP -; V88 tmp67 [V88,T54] ( 2, 1 ) int -> rsi "field V37._sign (fldOffset=0x8)" P-INDEP -;* V89 tmp68 [V89 ] ( 0, 0 ) int -> zero-ref "field V39.Item1 (fldOffset=0x0)" P-INDEP -; V90 tmp69 [V90,T55] ( 2, 1 ) int -> r13 "field V39.Item2 (fldOffset=0x4)" P-INDEP -; V91 tmp70 [V91,T37] ( 3, 1.50) byref -> rdi "field V42._reference (fldOffset=0x0)" P-INDEP -; V92 tmp71 [V92,T40] ( 3, 1.50) int -> rcx "field V42._length (fldOffset=0x8)" P-INDEP -; V93 tmp72 [V93,T27] ( 4, 2 ) byref -> rdi single-def "field V43._reference (fldOffset=0x0)" P-INDEP -; V94 tmp73 [V94,T25] ( 5, 2.50) int -> [rbp-0x54] spill-single-def "field V43._length (fldOffset=0x8)" P-INDEP -;* V95 tmp74 [V95 ] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP -;* V96 tmp75 [V96 ] ( 0, 0 ) int -> zero-ref "field V45._length (fldOffset=0x8)" P-INDEP -; V97 tmp76 [V97,T48] ( 2, 1 ) byref -> rsi "field V50._reference (fldOffset=0x0)" P-INDEP -; V98 tmp77 [V98,T41] ( 3, 1.50) int -> rdx "field V50._length (fldOffset=0x8)" P-INDEP -;* V99 tmp78 [V99 ] ( 0, 0 ) byref -> zero-ref single-def "field V51._reference (fldOffset=0x0)" P-INDEP -;* V100 tmp79 [V100 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP -;* V101 tmp80 [V101 ] ( 0, 0 ) byref -> zero-ref single-def "field V52._reference (fldOffset=0x0)" P-INDEP -;* V102 tmp81 [V102 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP -;* V103 tmp82 [V103 ] ( 0, 0 ) byref -> zero-ref single-def "field V53._reference (fldOffset=0x0)" P-INDEP -;* V104 tmp83 [V104 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0x8)" P-INDEP -; V105 tmp84 [V105,T38] ( 3, 1.50) byref -> rdi "field V58._reference (fldOffset=0x0)" P-INDEP -; V106 tmp85 [V106,T42] ( 3, 1.50) int -> rcx "field V58._length (fldOffset=0x8)" P-INDEP -; V107 tmp86 [V107,T49] ( 2, 1 ) byref -> rax single-def "field V59._reference (fldOffset=0x0)" P-INDEP -;* V108 tmp87 [V108,T61] ( 0, 0 ) int -> zero-ref "field V59._length (fldOffset=0x8)" P-INDEP -;* V109 tmp88 [V109 ] ( 0, 0 ) byref -> zero-ref single-def "field V61._reference (fldOffset=0x0)" P-INDEP -;* V110 tmp89 [V110 ] ( 0, 0 ) int -> zero-ref "field V61._length (fldOffset=0x8)" P-INDEP -; V111 tmp90 [V111,T50] ( 2, 1 ) byref -> rsi single-def "field V62._reference (fldOffset=0x0)" P-INDEP -; V112 tmp91 [V112,T56] ( 2, 1 ) int -> rdx "field V62._length (fldOffset=0x8)" P-INDEP -; V113 tmp92 [V113,T31] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V114 tmp93 [V114,T32] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V115 tmp94 [V115,T33] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V116 tmp95 [V116,T34] ( 2, 2 ) ref -> rdi single-def "argument with side effect" -; V117 tmp96 [V117,T57] ( 2, 1 ) struct (16) [rbp-0x68] do-not-enreg[SR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." -; V118 tmp97 [V118,T58] ( 2, 1 ) struct (16) [rbp-0x78] do-not-enreg[SR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." -; V119 GsCookie [V119 ] ( 1, 1 ) long -> [rbp-0x90] do-not-enreg[X] addr-exposed "GSSecurityCookie" -; V120 cse0 [V120,T13] ( 3, 9 ) int -> r13 hoist "CSE #08: moderate" -; V121 cse1 [V121,T11] ( 6, 10 ) int -> rdi multi-def "CSE #07: moderate" +;* V60 tmp39 [V60 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V61 tmp40 [V61 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V62 tmp41 [V62 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V63 tmp42 [V63 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" +;* V64 tmp43 [V64 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V65 tmp44 [V65 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V66 tmp45 [V66,T14] ( 11, 6.50) ref -> rbx single-def "field V00._bits (fldOffset=0x0)" P-INDEP +; V67 tmp46 [V67,T15] ( 8, 4.50) int -> r15 single-def "field V00._sign (fldOffset=0x8)" P-INDEP +; V68 tmp47 [V68,T07] ( 8, 18 ) byref -> [rbp-0x78] spill-single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V69 tmp48 [V69,T04] ( 22, 32 ) int -> [rbp-0x4C] spill-single-def "field V07._length (fldOffset=0x8)" P-INDEP +; V70 tmp49 [V70,T06] ( 9, 18.50) byref -> [rbp-0x80] spill-single-def "field V11._reference (fldOffset=0x0)" P-INDEP +; V71 tmp50 [V71,T05] ( 11, 26.50) int -> [rbp-0x50] spill-single-def "field V11._length (fldOffset=0x8)" P-INDEP +; V72 tmp51 [V72,T19] ( 6, 3 ) byref -> rdi "field V12._reference (fldOffset=0x0)" P-INDEP +; V73 tmp52 [V73,T21] ( 6, 3 ) int -> rcx "field V12._length (fldOffset=0x8)" P-INDEP +;* V74 tmp53 [V74 ] ( 0, 0 ) int -> zero-ref "field V23.Item1 (fldOffset=0x0)" P-INDEP +;* V75 tmp54 [V75 ] ( 0, 0 ) int -> zero-ref "field V23.Item2 (fldOffset=0x4)" P-INDEP +; V76 tmp55 [V76 ] ( 3, 2.50) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V29._bits (fldOffset=0x0)" P-DEP +; V77 tmp56 [V77 ] ( 3, 2.50) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V29._sign (fldOffset=0x8)" P-DEP +;* V78 tmp57 [V78 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP +;* V79 tmp58 [V79 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP +; V80 tmp59 [V80,T42] ( 2, 1 ) ref -> r14 single-def "field V31._bits (fldOffset=0x0)" P-INDEP +; V81 tmp60 [V81,T52] ( 2, 1 ) int -> r13 "field V31._sign (fldOffset=0x8)" P-INDEP +; V82 tmp61 [V82,T43] ( 2, 1 ) ref -> r14 single-def "field V32._bits (fldOffset=0x0)" P-INDEP +; V83 tmp62 [V83,T53] ( 2, 1 ) int -> r13 "field V32._sign (fldOffset=0x8)" P-INDEP +; V84 tmp63 [V84,T44] ( 2, 1 ) byref -> rdi single-def "field V35._reference (fldOffset=0x0)" P-INDEP +;* V85 tmp64 [V85,T60] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP +; V86 tmp65 [V86,T45] ( 2, 1 ) byref -> rdi single-def "field V36._reference (fldOffset=0x0)" P-INDEP +;* V87 tmp66 [V87,T61] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP +; V88 tmp67 [V88,T46] ( 2, 1 ) ref -> rdi "field V37._bits (fldOffset=0x0)" P-INDEP +; V89 tmp68 [V89,T54] ( 2, 1 ) int -> rsi "field V37._sign (fldOffset=0x8)" P-INDEP +;* V90 tmp69 [V90 ] ( 0, 0 ) int -> zero-ref "field V40.Item1 (fldOffset=0x0)" P-INDEP +; V91 tmp70 [V91,T55] ( 2, 1 ) int -> r13 "field V40.Item2 (fldOffset=0x4)" P-INDEP +; V92 tmp71 [V92,T36] ( 3, 1.50) byref -> rdi "field V43._reference (fldOffset=0x0)" P-INDEP +; V93 tmp72 [V93,T39] ( 3, 1.50) int -> rcx "field V43._length (fldOffset=0x8)" P-INDEP +; V94 tmp73 [V94,T26] ( 4, 2 ) byref -> rdi single-def "field V44._reference (fldOffset=0x0)" P-INDEP +; V95 tmp74 [V95,T56] ( 2, 1 ) int -> r8 "field V44._length (fldOffset=0x8)" P-INDEP +;* V96 tmp75 [V96 ] ( 0, 0 ) byref -> zero-ref single-def "field V46._reference (fldOffset=0x0)" P-INDEP +;* V97 tmp76 [V97 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP +; V98 tmp77 [V98,T47] ( 2, 1 ) byref -> rsi "field V51._reference (fldOffset=0x0)" P-INDEP +; V99 tmp78 [V99,T40] ( 3, 1.50) int -> rdx "field V51._length (fldOffset=0x8)" P-INDEP +;* V100 tmp79 [V100 ] ( 0, 0 ) byref -> zero-ref single-def "field V52._reference (fldOffset=0x0)" P-INDEP +;* V101 tmp80 [V101 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP +;* V102 tmp81 [V102 ] ( 0, 0 ) byref -> zero-ref single-def "field V53._reference (fldOffset=0x0)" P-INDEP +;* V103 tmp82 [V103 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0x8)" P-INDEP +;* V104 tmp83 [V104 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP +;* V105 tmp84 [V105 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP +; V106 tmp85 [V106,T37] ( 3, 1.50) byref -> rdi "field V59._reference (fldOffset=0x0)" P-INDEP +; V107 tmp86 [V107,T41] ( 3, 1.50) int -> rcx "field V59._length (fldOffset=0x8)" P-INDEP +; V108 tmp87 [V108,T48] ( 2, 1 ) byref -> rax single-def "field V60._reference (fldOffset=0x0)" P-INDEP +;* V109 tmp88 [V109,T62] ( 0, 0 ) int -> zero-ref "field V60._length (fldOffset=0x8)" P-INDEP +;* V110 tmp89 [V110 ] ( 0, 0 ) byref -> zero-ref single-def "field V62._reference (fldOffset=0x0)" P-INDEP +;* V111 tmp90 [V111 ] ( 0, 0 ) int -> zero-ref "field V62._length (fldOffset=0x8)" P-INDEP +; V112 tmp91 [V112,T49] ( 2, 1 ) byref -> rsi single-def "field V63._reference (fldOffset=0x0)" P-INDEP +; V113 tmp92 [V113,T57] ( 2, 1 ) int -> rdx "field V63._length (fldOffset=0x8)" P-INDEP +; V114 tmp93 [V114,T30] ( 2, 2 ) ref -> rdi single-def "argument with side effect" +; V115 tmp94 [V115,T31] ( 2, 2 ) ref -> rdi single-def "argument with side effect" +; V116 tmp95 [V116,T32] ( 2, 2 ) ref -> rdi single-def "argument with side effect" +; V117 tmp96 [V117,T33] ( 2, 2 ) ref -> rdi single-def "argument with side effect" +; V118 tmp97 [V118,T58] ( 2, 1 ) struct (16) [rbp-0x60] do-not-enreg[SR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." +; V119 tmp98 [V119,T59] ( 2, 1 ) struct (16) [rbp-0x70] do-not-enreg[SR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." +; V120 GsCookie [V120 ] ( 1, 1 ) long -> [rbp-0x88] do-not-enreg[X] addr-exposed "GSSecurityCookie" +; V121 cse0 [V121,T13] ( 3, 9 ) int -> r13 hoist "CSE #08: moderate" +; V122 cse1 [V122,T11] ( 6, 10 ) int -> rdi multi-def "CSE #07: moderate" ; ; Lcl frame size = 104 G_M13137_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 104 lea rbp, [rsp+0x90] - xor eax, eax - mov qword ptr [rbp-0x78], rax vxorps xmm8, xmm8, xmm8 vmovdqu ymmword ptr [rbp-0x70], ymm8 vmovdqa xmmword ptr [rbp-0x50], xmm8 + xor eax, eax mov qword ptr [rbp-0x40], rax - mov qword ptr [rbp-0x90], 0xD1FFAB1E + mov qword ptr [rbp-0x88], 0xD1FFAB1E mov rbx, rdi mov r15d, esi - ;; size=64 bbWeight=1 PerfScore 14.83 + ;; size=60 bbWeight=1 PerfScore 13.83 G_M13137_IG02: test rbx, rbx je SHORT G_M13137_IG04 ;; size=5 bbWeight=1 PerfScore 1.25 G_M13137_IG03: mov eax, dword ptr [rbx+0x08] shl eax, 2 mov dword ptr [rbp-0x30], eax jmp SHORT G_M13137_IG05 - align [1 bytes for IG31] - ;; size=12 bbWeight=0.50 PerfScore 2.75 + align [0 bytes for IG31] + ;; size=11 bbWeight=0.50 PerfScore 2.75 G_M13137_IG04: mov dword ptr [rbp-0x30], 4 ;; size=7 bbWeight=0.50 PerfScore 0.50 G_M13137_IG05: movsxd rax, edx movsxd rdi, dword ptr [rbp-0x30] shl rdi, 3 cqo idiv rdx:rax, rdi test edx, edx jne SHORT G_M13137_IG09 ;; size=20 bbWeight=1 PerfScore 73.50 G_M13137_IG06: mov rax, rbx mov rdx, r15 - cmp qword ptr [rbp-0x90], 0xD1FFAB1E + cmp qword ptr [rbp-0x88], 0xD1FFAB1E je SHORT G_M13137_IG07 call CORINFO_HELP_FAIL_FAST ;; size=24 bbWeight=0.50 PerfScore 2.25 G_M13137_IG07: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M13137_IG08: lea rsp, [rbp-0x28] pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.25 G_M13137_IG09: cmp edx, 0xD1FFAB1E jne SHORT G_M13137_IG12 mov rdi, rbx mov esi, r15d mov edx, 0xD1FFAB1E mov rax, 0xD1FFAB1E ; code for System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger call [rax]System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger mov rdi, rax mov esi, edx mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger call [rax]System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger - mov gword ptr [rbp-0x78], rax - mov qword ptr [rbp-0x70], rdx - mov rax, gword ptr [rbp-0x78] - mov rdx, qword ptr [rbp-0x70] - cmp qword ptr [rbp-0x90], 0xD1FFAB1E + mov gword ptr [rbp-0x70], rax + mov qword ptr [rbp-0x68], rdx + mov rax, gword ptr [rbp-0x70] + mov rdx, qword ptr [rbp-0x68] + cmp qword ptr [rbp-0x88], 0xD1FFAB1E je SHORT G_M13137_IG10 call CORINFO_HELP_FAIL_FAST ;; size=87 bbWeight=0.50 PerfScore 8.62 G_M13137_IG10: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M13137_IG11: lea rsp, [rbp-0x28] pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.25 G_M13137_IG12: test edx, edx jge SHORT G_M13137_IG15 mov rdi, rbx mov esi, r15d neg edx mov rax, 0xD1FFAB1E ; code for System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger call [rax]System.Numerics.BigInteger:RotateRight(System.Numerics.BigInteger,int):System.Numerics.BigInteger - mov gword ptr [rbp-0x68], rax - mov qword ptr [rbp-0x60], rdx - mov rax, gword ptr [rbp-0x68] - mov rdx, qword ptr [rbp-0x60] - cmp qword ptr [rbp-0x90], 0xD1FFAB1E + mov gword ptr [rbp-0x60], rax + mov qword ptr [rbp-0x58], rdx + mov rax, gword ptr [rbp-0x60] + mov rdx, qword ptr [rbp-0x58] + cmp qword ptr [rbp-0x88], 0xD1FFAB1E je SHORT G_M13137_IG13 call CORINFO_HELP_FAIL_FAST ;; size=58 bbWeight=0.50 PerfScore 6.62 G_M13137_IG13: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M13137_IG14: lea rsp, [rbp-0x28] pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.25 G_M13137_IG15: mov r14d, edx shr r14d, 5 mov edi, r14d shl edi, 5 sub edx, edi mov r13d, edx xor r12, r12 test rbx, rbx jne SHORT G_M13137_IG16 mov eax, 1 jmp SHORT G_M13137_IG17 ;; size=33 bbWeight=0.50 PerfScore 2.88 G_M13137_IG16: mov eax, dword ptr [rbx+0x08] ;; size=3 bbWeight=0.50 PerfScore 1.00 G_M13137_IG17: cmp eax, 64 jg SHORT G_M13137_IG18 test dword ptr [rsp], esp sub rsp, 256 lea rdi, [rsp] mov ecx, 64 jmp SHORT G_M13137_IG22 ;; size=26 bbWeight=0.50 PerfScore 3.62 G_M13137_IG18: mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M13137_IG54 ;; size=19 bbWeight=0.50 PerfScore 2.12 G_M13137_IG19: mov rdi, 0xD1FFAB1E ; data for System.Buffers.ArrayPool`1[uint]:s_shared mov rdi, gword ptr [rdi] mov dword ptr [rbp-0x34], eax mov esi, eax mov rcx, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[uint]:Rent(int):uint[]:this cmp dword ptr [rdi], edi call [rcx]System.Buffers.SharedArrayPool`1[uint]:Rent(int):uint[]:this mov r12, rax test r12, r12 jne SHORT G_M13137_IG20 xor rdi, rdi xor ecx, ecx jmp SHORT G_M13137_IG21 ;; size=46 bbWeight=0.50 PerfScore 6.88 G_M13137_IG20: lea rdi, bword ptr [r12+0x10] mov ecx, dword ptr [r12+0x08] ;; size=10 bbWeight=0.50 PerfScore 1.25 G_M13137_IG21: mov eax, dword ptr [rbp-0x34] ;; size=3 bbWeight=0.50 PerfScore 0.50 G_M13137_IG22: cmp eax, ecx ja G_M13137_IG59 - mov dword ptr [rbp-0x54], eax - mov bword ptr [rbp-0x80], rdi - mov dword ptr [rbp-0x4C], eax + mov r8d, eax + mov bword ptr [rbp-0x78], rdi + mov dword ptr [rbp-0x4C], r8d test rbx, rbx jne SHORT G_M13137_IG23 - mov r9d, dword ptr [rbp-0x4C] - test eax, eax + test r8d, r8d je G_M13137_IG60 mov edx, r15d neg edx test r15d, r15d cmovge edx, r15d mov dword ptr [rdi], edx jmp SHORT G_M13137_IG24 - ;; size=51 bbWeight=0.50 PerfScore 5.88 + ;; size=49 bbWeight=0.50 PerfScore 5.00 G_M13137_IG23: - mov r9d, dword ptr [rbp-0x4C] lea rsi, bword ptr [rbx+0x10] mov edx, dword ptr [rbx+0x08] - cmp edx, eax + cmp edx, r8d ja G_M13137_IG55 shl rdx, 2 - mov rcx, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong) - call [rcx]System.SpanHelpers:Memmove(byref,byref,ulong) - mov eax, dword ptr [rbp-0x54] - mov r9d, dword ptr [rbp-0x4C] - ;; size=42 bbWeight=0.50 PerfScore 5.25 + mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong) + call [rax]System.SpanHelpers:Memmove(byref,byref,ulong) + mov r8d, dword ptr [rbp-0x4C] + ;; size=36 bbWeight=0.50 PerfScore 4.25 G_M13137_IG24: mov ebx, r15d shr ebx, 31 xor r15, r15 - cmp eax, 64 + cmp r8d, 64 jg SHORT G_M13137_IG25 test dword ptr [rsp], esp sub rsp, 256 lea rdi, [rsp] mov ecx, 64 jmp SHORT G_M13137_IG29 - ;; size=35 bbWeight=0.50 PerfScore 4.12 + ;; size=36 bbWeight=0.50 PerfScore 4.12 G_M13137_IG25: mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M13137_IG56 ;; size=19 bbWeight=0.50 PerfScore 2.12 G_M13137_IG26: mov rdi, 0xD1FFAB1E ; data for System.Buffers.ArrayPool`1[uint]:s_shared mov rdi, gword ptr [rdi] - mov esi, r9d + mov esi, r8d mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[uint]:Rent(int):uint[]:this cmp dword ptr [rdi], edi call [rax]System.Buffers.SharedArrayPool`1[uint]:Rent(int):uint[]:this mov r15, rax test r15, r15 jne SHORT G_M13137_IG27 xor rdi, rdi xor ecx, ecx jmp SHORT G_M13137_IG28 ;; size=44 bbWeight=0.50 PerfScore 6.38 G_M13137_IG27: lea rdi, bword ptr [r15+0x10] mov ecx, dword ptr [r15+0x08] ;; size=8 bbWeight=0.50 PerfScore 1.25 G_M13137_IG28: - mov r9d, dword ptr [rbp-0x4C] + mov r8d, dword ptr [rbp-0x4C] ;; size=4 bbWeight=0.50 PerfScore 0.50 G_M13137_IG29: - cmp r9d, ecx + cmp r8d, ecx ja G_M13137_IG59 mov rax, rdi - mov bword ptr [rbp-0x88], rax - mov dword ptr [rbp-0x50], r9d - mov edi, r9d + mov bword ptr [rbp-0x80], rax + mov dword ptr [rbp-0x50], r8d + mov edi, r8d lea rsi, [4*rdi] - mov rdi, bword ptr [rbp-0x88] + mov rdi, bword ptr [rbp-0x80] mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:ClearWithoutReferences(byref,ulong) call [rax]System.SpanHelpers:ClearWithoutReferences(byref,ulong) mov dword ptr [rbp-0x2C], ebx test ebx, ebx je SHORT G_M13137_IG30 - mov rdi, bword ptr [rbp-0x80] + mov rdi, bword ptr [rbp-0x78] mov esi, dword ptr [rbp-0x4C] mov rax, 0xD1FFAB1E ; code for System.Numerics.NumericsHelpers:DangerousMakeTwosComplement(System.Span`1[uint]) call [rax]System.Numerics.NumericsHelpers:DangerousMakeTwosComplement(System.Span`1[uint]) - ;; size=79 bbWeight=0.50 PerfScore 8.00 + ;; size=73 bbWeight=0.50 PerfScore 8.00 G_M13137_IG30: test r13d, r13d jne G_M13137_IG36 xor edi, edi mov r13d, dword ptr [rbp-0x4C] mov esi, r13d sub esi, r14d ;; size=21 bbWeight=0.50 PerfScore 1.50 G_M13137_IG31: cmp edi, r13d jae G_M13137_IG60 mov eax, edi mov r14d, dword ptr [rbp-0x50] cmp esi, r14d jae G_M13137_IG60 mov ecx, esi - mov rdx, bword ptr [rbp-0x80] + mov rdx, bword ptr [rbp-0x78] mov ecx, dword ptr [rdx+4*rcx] - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov dword ptr [r8+4*rax], ecx inc edi inc esi cmp esi, r14d jl SHORT G_M13137_IG31 - ;; size=53 bbWeight=4 PerfScore 43.00 + ;; size=50 bbWeight=4 PerfScore 43.00 G_M13137_IG32: xor esi, esi cmp edi, r13d jge SHORT G_M13137_IG35 - align [4 bytes for IG33] - ;; size=11 bbWeight=0.50 PerfScore 0.88 + align [0 bytes for IG33] + ;; size=7 bbWeight=0.50 PerfScore 0.75 G_M13137_IG33: cmp edi, r13d jae G_M13137_IG60 mov eax, edi mov r14d, dword ptr [rbp-0x50] cmp esi, r14d jae G_M13137_IG60 mov ecx, esi - mov rdx, bword ptr [rbp-0x80] + mov rdx, bword ptr [rbp-0x78] mov ecx, dword ptr [rdx+4*rcx] - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov dword ptr [r8+4*rax], ecx inc edi inc esi cmp edi, r13d jge G_M13137_IG43 - ;; size=57 bbWeight=4 PerfScore 43.00 + ;; size=54 bbWeight=4 PerfScore 43.00 G_M13137_IG34: jmp SHORT G_M13137_IG33 ;; size=2 bbWeight=2 PerfScore 4.00 G_M13137_IG35: - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov r14d, dword ptr [rbp-0x50] jmp G_M13137_IG43 - align [3 bytes for IG39] - ;; size=19 bbWeight=0.25 PerfScore 1.00 + align [2 bytes for IG39] + ;; size=15 bbWeight=0.25 PerfScore 1.00 G_M13137_IG36: mov edi, r13d neg edi add edi, 32 xor esi, esi xor eax, eax test r14d, r14d jne SHORT G_M13137_IG37 mov r14d, dword ptr [rbp-0x4C] lea ecx, [r14-0x01] cmp ecx, r14d jae G_M13137_IG60 - mov rdx, bword ptr [rbp-0x80] + mov rdx, bword ptr [rbp-0x78] mov ecx, dword ptr [rdx+4*rcx] and edi, 31 shrx ecx, ecx, edi jmp SHORT G_M13137_IG38 ;; size=51 bbWeight=0.50 PerfScore 5.50 G_M13137_IG37: mov r9d, dword ptr [rbp-0x4C] mov eax, r9d sub eax, r14d lea ecx, [rax-0x01] cmp ecx, r9d jae G_M13137_IG60 lea ecx, [rax-0x01] - mov rdx, bword ptr [rbp-0x80] + mov rdx, bword ptr [rbp-0x78] mov ecx, dword ptr [rdx+4*rcx] and edi, 31 shrx ecx, ecx, edi mov r14d, r9d ;; size=43 bbWeight=0.50 PerfScore 3.88 G_M13137_IG38: and r13d, 31 ;; size=4 bbWeight=1 PerfScore 0.25 G_M13137_IG39: mov r9d, dword ptr [rbp-0x50] cmp eax, r9d jae G_M13137_IG60 mov r10d, eax mov r10d, dword ptr [rdx+4*r10] cmp esi, r14d jae G_M13137_IG60 mov r11d, esi shlx ebx, r10d, r13d or ecx, ebx - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov dword ptr [r8+4*r11], ecx shrx ecx, r10d, edi inc esi inc eax cmp eax, r9d jl SHORT G_M13137_IG39 - ;; size=64 bbWeight=4 PerfScore 44.00 + ;; size=61 bbWeight=4 PerfScore 44.00 G_M13137_IG40: xor eax, eax cmp esi, r14d jge SHORT G_M13137_IG45 align [0 bytes for IG41] ;; size=7 bbWeight=0.50 PerfScore 0.75 G_M13137_IG41: mov r9d, dword ptr [rbp-0x50] cmp eax, r9d jae G_M13137_IG60 mov r10d, eax mov r10d, dword ptr [rdx+4*r10] cmp esi, r14d jae G_M13137_IG60 mov r11d, esi shlx ebx, r10d, r13d or ebx, ecx - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov dword ptr [r8+4*r11], ebx shrx ecx, r10d, edi inc esi inc eax cmp esi, r14d jl SHORT G_M13137_IG44 - ;; size=64 bbWeight=4 PerfScore 44.00 + ;; size=61 bbWeight=4 PerfScore 44.00 G_M13137_IG42: mov r14d, r9d ;; size=3 bbWeight=2 PerfScore 0.50 G_M13137_IG43: mov ebx, dword ptr [rbp-0x2C] test ebx, ebx je SHORT G_M13137_IG46 lea edi, [r14-0x01] cmp edi, r14d jae G_M13137_IG60 cmp dword ptr [r8+4*rdi], 0 jge SHORT G_M13137_IG46 mov rdi, r8 mov esi, r14d mov rax, 0xD1FFAB1E ; code for System.Numerics.NumericsHelpers:DangerousMakeTwosComplement(System.Span`1[uint]) call [rax]System.Numerics.NumericsHelpers:DangerousMakeTwosComplement(System.Span`1[uint]) jmp SHORT G_M13137_IG47 ;; size=47 bbWeight=0.50 PerfScore 6.88 G_M13137_IG44: jmp SHORT G_M13137_IG41 ;; size=2 bbWeight=2 PerfScore 4.00 G_M13137_IG45: - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov r14d, dword ptr [rbp-0x50] jmp SHORT G_M13137_IG43 - ;; size=13 bbWeight=0.25 PerfScore 1.00 + ;; size=10 bbWeight=0.25 PerfScore 1.00 G_M13137_IG46: xor ebx, ebx ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M13137_IG47: - mov r8, bword ptr [rbp-0x88] + mov r8, bword ptr [rbp-0x80] mov rsi, r8 mov edx, r14d vxorps xmm0, xmm0, xmm0 vmovdqu xmmword ptr [rbp-0x48], xmm0 lea rdi, [rbp-0x48] mov ecx, ebx mov rax, 0xD1FFAB1E ; code for System.Numerics.BigInteger:.ctor(System.ReadOnlySpan`1[uint],ubyte):this call [rax]System.Numerics.BigInteger:.ctor(System.ReadOnlySpan`1[uint],ubyte):this mov r14, gword ptr [rbp-0x48] mov r13d, dword ptr [rbp-0x40] test r12, r12 je SHORT G_M13137_IG49 mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M13137_IG57 - ;; size=72 bbWeight=0.50 PerfScore 7.17 + ;; size=69 bbWeight=0.50 PerfScore 7.17 G_M13137_IG48: mov rdi, 0xD1FFAB1E ; data for System.Buffers.ArrayPool`1[uint]:s_shared mov rdi, gword ptr [rdi] mov rsi, r12 xor edx, edx mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[uint]:Return(uint[],ubyte):this cmp dword ptr [rdi], edi call [rax]System.Buffers.SharedArrayPool`1[uint]:Return(uint[],ubyte):this ;; size=32 bbWeight=0.50 PerfScore 4.50 G_M13137_IG49: test r15, r15 je SHORT G_M13137_IG51 mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 je G_M13137_IG58 ;; size=24 bbWeight=0.50 PerfScore 2.75 G_M13137_IG50: mov rdi, 0xD1FFAB1E ; data for System.Buffers.ArrayPool`1[uint]:s_shared mov rdi, gword ptr [rdi] mov rsi, r15 xor edx, edx mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[uint]:Return(uint[],ubyte):this cmp dword ptr [rdi], edi call [rax]System.Buffers.SharedArrayPool`1[uint]:Return(uint[],ubyte):this ;; size=32 bbWeight=0.50 PerfScore 4.50 G_M13137_IG51: mov rax, r14 mov rdx, r13 - cmp qword ptr [rbp-0x90], 0xD1FFAB1E + cmp qword ptr [rbp-0x88], 0xD1FFAB1E je SHORT G_M13137_IG52 call CORINFO_HELP_FAIL_FAST ;; size=24 bbWeight=0.50 PerfScore 2.25 G_M13137_IG52: nop ;; size=1 bbWeight=0.50 PerfScore 0.12 G_M13137_IG53: lea rsp, [rbp-0x28] pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.25 G_M13137_IG54: mov dword ptr [rbp-0x34], eax mov rdi, 0xD1FFAB1E ; System.Buffers.ArrayPool`1[uint] call CORINFO_HELP_GET_GCSTATIC_BASE mov eax, dword ptr [rbp-0x34] jmp G_M13137_IG19 ;; size=26 bbWeight=0 PerfScore 0.00 G_M13137_IG55: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort() call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M13137_IG56: mov rdi, 0xD1FFAB1E ; System.Buffers.ArrayPool`1[uint] call CORINFO_HELP_GET_GCSTATIC_BASE - mov r9d, dword ptr [rbp-0x4C] + mov r8d, dword ptr [rbp-0x4C] jmp G_M13137_IG26 ;; size=24 bbWeight=0 PerfScore 0.00 G_M13137_IG57: mov rdi, 0xD1FFAB1E ; System.Buffers.ArrayPool`1[uint] call CORINFO_HELP_GET_GCSTATIC_BASE jmp G_M13137_IG48 ;; size=20 bbWeight=0 PerfScore 0.00 G_M13137_IG58: mov rdi, 0xD1FFAB1E ; System.Buffers.ArrayPool`1[uint] call CORINFO_HELP_GET_GCSTATIC_BASE jmp G_M13137_IG50 ;; size=20 bbWeight=0 PerfScore 0.00 G_M13137_IG59: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M13137_IG60: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 1532, prolog size 64, PerfScore 397.00, instruction count 409, allocated bytes for code 1536 (MethodHash=ed26ccae) for method System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts) +; Total bytes of code 1488, prolog size 60, PerfScore 394.00, instruction count 405, allocated bytes for code 1492 (MethodHash=ed26ccae) for method System.Numerics.BigInteger:RotateLeft(System.Numerics.BigInteger,int):System.Numerics.BigInteger (FullOpts) ```

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

MihuBot commented 1 week ago

@xtqqczze