Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JitDiff X64] [saucecontrol] JIT: Improve x86 integral to floating cast codegen #910

Open
MihuBot opened this issue Jan 19, 2025 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jan 19, 2025

Job completed in 14 minutes 11 seconds.
dotnet/runtime#111595

Diffs

Diffs
Found 271 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 40339815
Total bytes of diff: 40339879
Total bytes of delta: 64 (0.00 % of base)
Total relative delta: 3.37
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
          53 : System.Private.CoreLib.dasm (0.00 % of base)
          32 : System.Diagnostics.Process.dasm (0.03 % of base)
          16 : System.Linq.Expressions.dasm (0.00 % of base)
          15 : System.Runtime.Numerics.dasm (0.01 % of base)
          12 : Microsoft.VisualBasic.Core.dasm (0.00 % of base)
           8 : System.Formats.Asn1.dasm (0.01 % of base)
           4 : Microsoft.CSharp.dasm (0.00 % of base)
           4 : System.Data.Common.dasm (0.00 % of base)

Top file improvements (bytes):
         -59 : System.Net.Sockets.dasm (-0.02 % of base)
         -18 : System.Private.Xml.dasm (-0.00 % of base)
          -2 : System.Formats.Tar.dasm (-0.00 % of base)
          -1 : System.Numerics.Tensors.dasm (-0.00 % of base)

12 total files with Code Size differences (4 improved, 8 regressed), 247 unchanged.

Top method regressions (bytes):
          20 (1.45 % of base) : System.Data.Common.dasm - System.Data.Common.UInt64Storage:Aggregate(int[],int):System.Object:this (FullOpts)
           8 (3.00 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
           8 (0.21 % of base) : System.Formats.Asn1.dasm - System.Formats.Asn1.AsnDecoder:ParseGeneralizedTime(int,System.ReadOnlySpan`1[ubyte]):System.DateTimeOffset (FullOpts)
           8 (21.05 % of base) : System.Private.CoreLib.dasm - System.Half:op_Explicit(ulong):System.Half (FullOpts) (2 methods)
           8 (1.44 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
           8 (1.86 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
           8 (36.36 % of base) : System.Runtime.Numerics.dasm - System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts) (2 methods)
           8 (57.14 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts) (2 methods)
           6 (0.58 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
           4 (0.26 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindConstantCast(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,ubyte,byref,ubyte):int:this (FullOpts)
           4 (57.14 % of base) : System.Private.CoreLib.dasm - System.Convert:ToDouble(ulong):double (FullOpts)
           4 (57.14 % of base) : System.Private.CoreLib.dasm - System.Convert:ToSingle(ulong):float (FullOpts)
           4 (2.99 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
           4 (2.96 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_StartTimeCore():System.DateTime:this (FullOpts)
           4 (2.22 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_TotalProcessorTime():System.TimeSpan:this (FullOpts)
           4 (3.03 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_UserProcessorTime():System.TimeSpan:this (FullOpts)
           4 (5.41 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
           4 (5.13 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_TotalProcessorTime():System.TimeSpan:this (FullOpts)
           4 (5.41 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_UserProcessorTime():System.TimeSpan:this (FullOpts)
           4 (2.96 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:GetStartTime():System.DateTime:this (FullOpts)
           4 (21.05 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_17():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_18():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_19():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_20():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_21():double:this (FullOpts)
           4 (1.51 % of base) : System.Private.CoreLib.dasm - System.Number:NumberToFloatingPointBits[double](byref):ulong (FullOpts)
           4 (0.42 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:get_DebuggerDisplay():System.String:this (FullOpts)
           4 (1.16 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:Log(System.Numerics.BigInteger,double):double (FullOpts)
           4 (57.14 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(ulong):double (FullOpts)
           4 (4.49 % of base) : System.Private.CoreLib.dasm - System.Random+XoshiroImpl:NextDouble():double:this (FullOpts)
           4 (4.49 % of base) : System.Private.CoreLib.dasm - System.Random+XoshiroImpl:NextSingle():float:this (FullOpts)
           4 (9.76 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64:ConvertToDouble(System.Runtime.Intrinsics.Vector64`1[ulong]):System.Runtime.Intrinsics.Vector64`1[double] (FullOpts)
           4 (1.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.MemoryFailPoint:.ctor(int):this (FullOpts)
           4 (1.94 % of base) : System.Private.CoreLib.dasm - System.UInt128:op_Explicit(System.UInt128):double (FullOpts)
           4 (40.00 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.IConvertible.ToDouble(System.IFormatProvider):double:this (FullOpts)
           4 (40.00 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToChecked[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToSaturating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToTruncating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToChecked[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToSaturating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToTruncating[double](ulong,byref):ubyte (FullOpts)
           4 (1.05 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:ValueAsDouble():double:this (FullOpts)
           3 (0.33 % of base) : System.Private.Xml.dasm - MS.Internal.Xml.XPath.ExtensionQuery:ProcessResult(System.Object):System.Object:this (FullOpts)
           3 (0.13 % of base) : System.Data.Common.dasm - System.Data.Common.SqlConvert:ConvertToSqlDouble(System.Object):System.Data.SqlTypes.SqlDouble (FullOpts)
           3 (3.41 % of base) : System.Private.CoreLib.dasm - System.Decimal+DecCalc:VarR8FromDec(byref):double (FullOpts)
           2 (0.13 % of base) : System.Private.CoreLib.dasm - System.Array:InternalSetValue(System.Object,long):this (FullOpts)
           2 (0.27 % of base) : System.Private.CoreLib.dasm - System.Reflection.InvokeUtils:PrimitiveWiden(byref,byref,ubyte,ubyte) (FullOpts)
           1 (0.09 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:TryParseFormatO(System.ReadOnlySpan`1[ushort],byref):ubyte (FullOpts)

Top method improvements (bytes):
         -59 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine+<>c:<.ctor>b__16_0(System.Object):this (FullOpts)
         -24 (-3.07 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
         -20 (-17.86 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
         -10 (-14.71 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
          -5 (-31.25 % of base) : System.Private.CoreLib.dasm - System.Convert:ToSingle(uint):float (FullOpts)
          -5 (-17.86 % of base) : System.Private.CoreLib.dasm - System.Half:op_Explicit(uint):System.Half (FullOpts)
          -5 (-31.25 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
          -5 (-31.25 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
          -4 (-1.20 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
          -4 (-1.67 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
          -4 (-1.42 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
          -4 (-1.41 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
          -2 (-0.19 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToSingle(System.Object,System.Globalization.NumberFormatInfo):float (FullOpts)
          -2 (-0.75 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHelpers:ParseOctal[double](System.ReadOnlySpan`1[ubyte]):double (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.Convert:ToDouble(uint):double (FullOpts)
          -1 (-0.63 % of base) : System.Private.CoreLib.dasm - System.Convert:ToUInt32(double):uint (FullOpts)
          -1 (-0.05 % of base) : System.Data.Common.dasm - System.Data.Common.SqlConvert:ConvertToSqlSingle(System.Object):System.Data.SqlTypes.SqlSingle (FullOpts)
          -1 (-0.07 % of base) : System.Data.Common.dasm - System.Data.Common.UInt32Storage:Aggregate(int[],int):System.Object:this (FullOpts)
          -1 (-0.12 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:.ctor(double):this (FullOpts)
          -1 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_14():double:this (FullOpts)
          -1 (-1.85 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_22():double:this (FullOpts)
          -1 (-6.25 % of base) : System.Runtime.Numerics.dasm - System.Numerics.Complex:op_Implicit(uint):System.Numerics.Complex (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.NFloat:op_Implicit(uint):System.Runtime.InteropServices.NFloat (FullOpts)
          -1 (-1.85 % of base) : System.Private.CoreLib.dasm - System.Text.Rune:GetNumericValue(System.Text.Rune):double (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.IConvertible.ToDouble(System.IFormatProvider):double:this (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToChecked[double](uint,byref):ubyte (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToSaturating[double](uint,byref):ubyte (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToTruncating[double](uint,byref):ubyte (FullOpts)
          -1 (-0.65 % of base) : System.Private.Xml.dasm - System.Xml.BinXmlDateTime:SqlDateTimeToDateTime(int,uint):System.DateTime (FullOpts)

Top method regressions (percentages):
           4 (57.14 % of base) : System.Private.CoreLib.dasm - System.Convert:ToDouble(ulong):double (FullOpts)
           4 (57.14 % of base) : System.Private.CoreLib.dasm - System.Convert:ToSingle(ulong):float (FullOpts)
           4 (57.14 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(ulong):double (FullOpts)
           8 (57.14 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts) (2 methods)
           4 (40.00 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.IConvertible.ToDouble(System.IFormatProvider):double:this (FullOpts)
           4 (40.00 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
           8 (36.36 % of base) : System.Runtime.Numerics.dasm - System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts) (2 methods)
           4 (21.05 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_17():double:this (FullOpts)
           8 (21.05 % of base) : System.Private.CoreLib.dasm - System.Half:op_Explicit(ulong):System.Half (FullOpts) (2 methods)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToChecked[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToSaturating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UInt64:System.Numerics.INumberBase<System.UInt64>.TryConvertToTruncating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToChecked[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToSaturating[double](ulong,byref):ubyte (FullOpts)
           4 (19.05 % of base) : System.Private.CoreLib.dasm - System.UIntPtr:System.Numerics.INumberBase<nuint>.TryConvertToTruncating[double](ulong,byref):ubyte (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_18():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_19():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_20():double:this (FullOpts)
           4 (18.18 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_21():double:this (FullOpts)
           4 (9.76 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64:ConvertToDouble(System.Runtime.Intrinsics.Vector64`1[ulong]):System.Runtime.Intrinsics.Vector64`1[double] (FullOpts)
           4 (5.41 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
           4 (5.41 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_UserProcessorTime():System.TimeSpan:this (FullOpts)
           4 (5.13 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:get_TotalProcessorTime():System.TimeSpan:this (FullOpts)
           4 (4.49 % of base) : System.Private.CoreLib.dasm - System.Random+XoshiroImpl:NextDouble():double:this (FullOpts)
           4 (4.49 % of base) : System.Private.CoreLib.dasm - System.Random+XoshiroImpl:NextSingle():float:this (FullOpts)
           3 (3.41 % of base) : System.Private.CoreLib.dasm - System.Decimal+DecCalc:VarR8FromDec(byref):double (FullOpts)
           4 (3.03 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_UserProcessorTime():System.TimeSpan:this (FullOpts)
           8 (3.00 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
           4 (2.99 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
           4 (2.96 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_StartTimeCore():System.DateTime:this (FullOpts)
           4 (2.96 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.ProcessThread:GetStartTime():System.DateTime:this (FullOpts)
           4 (2.22 % of base) : System.Diagnostics.Process.dasm - System.Diagnostics.Process:get_TotalProcessorTime():System.TimeSpan:this (FullOpts)
           4 (1.94 % of base) : System.Private.CoreLib.dasm - System.UInt128:op_Explicit(System.UInt128):double (FullOpts)
           8 (1.86 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
           4 (1.80 % of base) : System.Private.CoreLib.dasm - System.Runtime.MemoryFailPoint:.ctor(int):this (FullOpts)
           4 (1.51 % of base) : System.Private.CoreLib.dasm - System.Number:NumberToFloatingPointBits[double](byref):ulong (FullOpts)
          20 (1.45 % of base) : System.Data.Common.dasm - System.Data.Common.UInt64Storage:Aggregate(int[],int):System.Object:this (FullOpts)
           8 (1.44 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
           4 (1.16 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:Log(System.Numerics.BigInteger,double):double (FullOpts)
           4 (1.05 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:ValueAsDouble():double:this (FullOpts)
           6 (0.58 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
           4 (0.42 % of base) : System.Runtime.Numerics.dasm - System.Numerics.BigInteger:get_DebuggerDisplay():System.String:this (FullOpts)
           3 (0.33 % of base) : System.Private.Xml.dasm - MS.Internal.Xml.XPath.ExtensionQuery:ProcessResult(System.Object):System.Object:this (FullOpts)
           2 (0.27 % of base) : System.Private.CoreLib.dasm - System.Reflection.InvokeUtils:PrimitiveWiden(byref,byref,ubyte,ubyte) (FullOpts)
           4 (0.26 % of base) : Microsoft.CSharp.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder:bindConstantCast(Microsoft.CSharp.RuntimeBinder.Semantics.Expr,Microsoft.CSharp.RuntimeBinder.Semantics.CType,ubyte,byref,ubyte):int:this (FullOpts)
           8 (0.21 % of base) : System.Formats.Asn1.dasm - System.Formats.Asn1.AsnDecoder:ParseGeneralizedTime(int,System.ReadOnlySpan`1[ubyte]):System.DateTimeOffset (FullOpts)
           3 (0.13 % of base) : System.Data.Common.dasm - System.Data.Common.SqlConvert:ConvertToSqlDouble(System.Object):System.Data.SqlTypes.SqlDouble (FullOpts)
           2 (0.13 % of base) : System.Private.CoreLib.dasm - System.Array:InternalSetValue(System.Object,long):this (FullOpts)
           1 (0.09 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:TryParseFormatO(System.ReadOnlySpan`1[ushort],byref):ubyte (FullOpts)

Top method improvements (percentages):
         -59 (-100.00 % of base) : System.Net.Sockets.dasm - System.Net.Sockets.SocketAsyncEngine+<>c:<.ctor>b__16_0(System.Object):this (FullOpts)
          -5 (-31.25 % of base) : System.Private.CoreLib.dasm - System.Convert:ToSingle(uint):float (FullOpts)
          -5 (-31.25 % of base) : System.Numerics.Tensors.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
          -5 (-31.25 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
          -5 (-17.86 % of base) : System.Private.CoreLib.dasm - System.Half:op_Explicit(uint):System.Half (FullOpts)
         -20 (-17.86 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
         -10 (-14.71 % of base) : System.Private.CoreLib.dasm - System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.Convert:ToDouble(uint):double (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.Runtime.InteropServices.NFloat:op_Implicit(uint):System.Runtime.InteropServices.NFloat (FullOpts)
          -1 (-8.33 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.IConvertible.ToDouble(System.IFormatProvider):double:this (FullOpts)
          -1 (-6.25 % of base) : System.Runtime.Numerics.dasm - System.Numerics.Complex:op_Implicit(uint):System.Numerics.Complex (FullOpts)
          -1 (-4.55 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_14():double:this (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToChecked[double](uint,byref):ubyte (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToSaturating[double](uint,byref):ubyte (FullOpts)
          -1 (-3.85 % of base) : System.Private.CoreLib.dasm - System.UInt32:System.Numerics.INumberBase<System.UInt32>.TryConvertToTruncating[double](uint,byref):ubyte (FullOpts)
         -24 (-3.07 % of base) : System.Private.Xml.dasm - System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
          -1 (-1.85 % of base) : System.Private.CoreLib.dasm - System.Diagnostics.Tracing.RuntimeEventSource+<>c:<OnEventCommand>b__37_22():double:this (FullOpts)
          -1 (-1.85 % of base) : System.Private.CoreLib.dasm - System.Text.Rune:GetNumericValue(System.Text.Rune):double (FullOpts)
          -4 (-1.67 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
          -4 (-1.42 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
          -4 (-1.41 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
          -4 (-1.20 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
          -2 (-0.75 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHelpers:ParseOctal[double](System.ReadOnlySpan`1[ubyte]):double (FullOpts)
          -1 (-0.65 % of base) : System.Private.Xml.dasm - System.Xml.BinXmlDateTime:SqlDateTimeToDateTime(int,uint):System.DateTime (FullOpts)
          -1 (-0.63 % of base) : System.Private.CoreLib.dasm - System.Convert:ToUInt32(double):uint (FullOpts)
          -2 (-0.19 % of base) : Microsoft.VisualBasic.Core.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToSingle(System.Object,System.Globalization.NumberFormatInfo):float (FullOpts)
          -1 (-0.12 % of base) : System.Data.Common.dasm - System.Data.SqlTypes.SqlDecimal:.ctor(double):this (FullOpts)
          -1 (-0.07 % of base) : System.Data.Common.dasm - System.Data.Common.UInt32Storage:Aggregate(int[],int):System.Object:this (FullOpts)
          -1 (-0.05 % of base) : System.Data.Common.dasm - System.Data.Common.SqlConvert:ConvertToSqlSingle(System.Object):System.Data.SqlTypes.SqlSingle (FullOpts)

78 total methods with Code Size differences (29 improved, 49 regressed), 235290 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 19, 2025

Top method regressions

8 (3.00 % of base) - Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object
 ; Assembly listing for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T01] (  5,  3   )    long  ->  [rbp-0x08]  EH-live single-def
 ;  V01 arg1         [V01,T02] (  5,  3   )    long  ->  [rbp-0x10]  EH-live single-def
 ;  V02 loc0         [V02,T03] (  4,  2   )     ref  ->  [rbp-0x38]  do-not-enreg[M] class-hnd EH-live <System.Object>
 ;* V03 loc1         [V03    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.OverflowException>
 ;* V04 loc2         [V04    ] (  0,  0   )     ref  ->  zero-ref    class-hnd <System.OverflowException>
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V06 tmp1         [V06,T00] (  3,  6   )     ref  ->  rdi         class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
 ;* V07 tmp2         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.OverflowException>
 ;* V08 tmp3         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Decimal>
 ;* V09 tmp4         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Decimal>
 ;* V10 tmp5         [V10    ] (  0,  0   )  struct (16) zero-ref    "impAppendStmt" <System.Decimal>
 ;  V11 tmp6         [V11,T04] (  3,  0   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
 ;* V12 tmp7         [V12    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.OverflowException>
 ;  V13 tmp8         [V13,T05] (  3,  0   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Double>
 ;  V14 tmp9         [V14    ] (  5,  0   )  struct (16) [rbp-0x20]  do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
 ;  V15 tmp10        [V15    ] (  4,  0   )  struct (16) [rbp-0x30]  do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
 ;* V16 tmp11        [V16    ] (  0,  0   )   byref  ->  zero-ref    "impAppendStmt"
 ;* V17 tmp12        [V17,T06] (  0,  0   )     int  ->  zero-ref    single-def "field V08._flags (fldOffset=0x0)" P-INDEP
 ;* V18 tmp13        [V18,T07] (  0,  0   )     int  ->  zero-ref    single-def "field V08._hi32 (fldOffset=0x4)" P-INDEP
 ;* V19 tmp14        [V19,T08] (  0,  0   )    long  ->  zero-ref    single-def "field V08._lo64 (fldOffset=0x8)" P-INDEP
 ;* V20 tmp15        [V20,T09] (  0,  0   )     int  ->  zero-ref    single-def "field V09._flags (fldOffset=0x0)" P-INDEP
 ;* V21 tmp16        [V21,T10] (  0,  0   )     int  ->  zero-ref    single-def "field V09._hi32 (fldOffset=0x4)" P-INDEP
 ;* V22 tmp17        [V22,T11] (  0,  0   )    long  ->  zero-ref    single-def "field V09._lo64 (fldOffset=0x8)" P-INDEP
 ;* V23 tmp18        [V23    ] (  0,  0   )     int  ->  zero-ref    single-def "field V10._flags (fldOffset=0x0)" P-INDEP
 ;* V24 tmp19        [V24    ] (  0,  0   )     int  ->  zero-ref    single-def "field V10._hi32 (fldOffset=0x4)" P-INDEP
 ;* V25 tmp20        [V25    ] (  0,  0   )    long  ->  zero-ref    single-def "field V10._lo64 (fldOffset=0x8)" P-INDEP
 ;  V26 tmp21        [V26    ] (  3,  0   )     int  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed "field V14._flags (fldOffset=0x0)" P-DEP
 ;  V27 tmp22        [V27    ] (  3,  0   )     int  ->  [rbp-0x1C]  do-not-enreg[X] addr-exposed "field V14._hi32 (fldOffset=0x4)" P-DEP
 ;  V28 tmp23        [V28    ] (  3,  0   )    long  ->  [rbp-0x18]  do-not-enreg[X] addr-exposed "field V14._lo64 (fldOffset=0x8)" P-DEP
 ;  V29 tmp24        [V29    ] (  2,  0   )     int  ->  [rbp-0x30]  do-not-enreg[X] addr-exposed "field V15._flags (fldOffset=0x0)" P-DEP
 ;  V30 tmp25        [V30    ] (  2,  0   )     int  ->  [rbp-0x2C]  do-not-enreg[X] addr-exposed "field V15._hi32 (fldOffset=0x4)" P-DEP
 ;  V31 tmp26        [V31    ] (  2,  0   )    long  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V15._lo64 (fldOffset=0x8)" P-DEP
 ;  V32 rat0         [V32    ] (  1,  1   )    long  ->  [rbp-0x40]  do-not-enreg[V] "PSPSym"
 ;
 ; Lcl frame size = 64
 
 G_M41291_IG01:
        push     rbp
        sub      rsp, 64
        lea      rbp, [rsp+0x40]
        mov      qword ptr [rbp-0x40], rsp
        mov      qword ptr [rbp-0x08], rdi
        mov      qword ptr [rbp-0x10], rsi
 						;; size=22 bbWeight=1 PerfScore 4.75
 G_M41291_IG02:
        mov      rdi, 0xD1FFAB1E      ; System.UInt64
        call     CORINFO_HELP_NEWSFAST
        mov      rdi, rax
        mov      rcx, qword ptr [rbp-0x08]
        mov      rax, rcx
        mul      rdx:rax, qword ptr [rbp-0x10]
        jb       SHORT G_M41291_IG03
        mov      qword ptr [rdi+0x08], rax
        mov      gword ptr [rbp-0x38], rdi
        jmp      SHORT G_M41291_IG08
 						;; size=41 bbWeight=1 PerfScore 12.75
 G_M41291_IG03:
        call     CORINFO_HELP_OVERFLOW
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 G_M41291_IG04:
        xor      edi, edi
        mov      dword ptr [rbp-0x20], edi
 						;; size=5 bbWeight=0 PerfScore 0.00
 G_M41291_IG05:
        mov      dword ptr [rbp-0x1C], edi
        mov      rcx, qword ptr [rbp-0x08]
        mov      qword ptr [rbp-0x18], rcx
 						;; size=11 bbWeight=0 PerfScore 0.00
 G_M41291_IG06:
        mov      dword ptr [rbp-0x30], edi
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M41291_IG07:
        mov      dword ptr [rbp-0x2C], edi
        mov      rsi, qword ptr [rbp-0x10]
        mov      qword ptr [rbp-0x28], rsi
        lea      rdi, [rbp-0x20]
        lea      rsi, [rbp-0x30]
        mov      rax, 0xD1FFAB1E      ; code for System.Decimal+DecCalc:VarDecMul(byref,byref)
        call     [rax]System.Decimal+DecCalc:VarDecMul(byref,byref)
        mov      rdi, 0xD1FFAB1E      ; System.Decimal
        call     CORINFO_HELP_NEWSFAST
        vmovups  xmm0, xmmword ptr [rbp-0x20]
        vmovups  xmmword ptr [rax+0x08], xmm0
        mov      gword ptr [rbp-0x38], rax
 						;; size=60 bbWeight=0 PerfScore 0.00
 G_M41291_IG08:
        mov      rax, gword ptr [rbp-0x38]
 						;; size=4 bbWeight=1 PerfScore 1.00
 G_M41291_IG09:
        add      rsp, 64
        pop      rbp
        ret      
 						;; size=6 bbWeight=1 PerfScore 1.75
 G_M41291_IG10:
        nop      
        jmp      SHORT G_M41291_IG04
 						;; size=3 bbWeight=0 PerfScore 0.00
 G_M41291_IG11:
        push     rbp
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x40]
 						;; size=16 bbWeight=0 PerfScore 0.00
 G_M41291_IG12:
        lea      rax, G_M41291_IG10
 						;; size=7 bbWeight=0 PerfScore 0.00
 G_M41291_IG13:
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=0 PerfScore 0.00
 G_M41291_IG14:
        push     rbp
        sub      rsp, 16
        mov      rbp, qword ptr [rdi]
        mov      qword ptr [rsp], rbp
        lea      rbp, [rbp+0x40]
 						;; size=16 bbWeight=0 PerfScore 0.00
 G_M41291_IG15:
        mov      rdi, 0xD1FFAB1E      ; System.Double
        call     CORINFO_HELP_NEWSFAST
        mov      rcx, qword ptr [rbp-0x08]
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rcx
        mov      rsi, qword ptr [rbp-0x10]
+       vxorps   xmm1, xmm1, xmm1
        vcvtusi2sd xmm1, rsi
        vmulsd   xmm0, xmm0, xmm1
        vmovsd   qword ptr [rax+0x08], xmm0
        mov      gword ptr [rbp-0x38], rax
        lea      rax, G_M41291_IG08
-						;; size=55 bbWeight=0 PerfScore 0.00
+						;; size=63 bbWeight=0 PerfScore 0.00
 G_M41291_IG16:
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 267, prolog size 22, PerfScore 20.25, instruction count 69, allocated bytes for code 267 (MethodHash=9ae05eb4) for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
+; Total bytes of code 275, prolog size 22, PerfScore 20.25, instruction count 71, allocated bytes for code 275 (MethodHash=9ae05eb4) for method Microsoft.VisualBasic.CompilerServices.Operators:MultiplyUInt64(ulong,ulong):System.Object (FullOpts)
 ; ============================================================
8 (21.05 % of base) - System.Half:op_Explicit(ulong):System.Half
 ; Assembly listing for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; fully interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )    long  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M50674_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M50674_IG02:
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2ss xmm0, rdi
        mov      rax, 0xD1FFAB1E      ; code for System.Half:op_Explicit(float):System.Half
-						;; size=16 bbWeight=1 PerfScore 6.25
+						;; size=20 bbWeight=1 PerfScore 6.58
 G_M50674_IG03:
        tail.jmp [rax]System.Half:op_Explicit(float):System.Half
 						;; size=3 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 19, prolog size 0, PerfScore 8.25, instruction count 3, allocated bytes for code 19 (MethodHash=130a3a0d) for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
+; Total bytes of code 23, prolog size 0, PerfScore 8.58, instruction count 4, allocated bytes for code 23 (MethodHash=130a3a0d) for method System.Half:op_Explicit(ulong):System.Half (FullOpts)
 ; ============================================================
8 (1.44 % of base) - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this
 ; Assembly listing for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T03] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked>
 ;  V01 arg1         [V01,T00] ( 14,  8   )    long  ->  rbx         single-def
 ;  V02 loc0         [V02,T01] ( 13,  7   )     ref  ->  rax         class-hnd <System.Object>
 ;* V03 loc1         [V03    ] (  0,  0   )     int  ->  zero-ref   
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V05 tmp1         [V05,T04] (  4,  4   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
 ;  V06 tmp2         [V06,T05] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Double>
 ;  V07 tmp3         [V07,T06] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Single>
 ;  V08 tmp4         [V08,T07] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
 ;  V09 tmp5         [V09,T08] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int64>
 ;  V10 tmp6         [V10,T09] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt32>
 ;  V11 tmp7         [V11,T10] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V12 tmp8         [V12,T11] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt16>
 ;  V13 tmp9         [V13,T12] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int16>
 ;  V14 tmp10        [V14,T13] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Byte>
 ;  V15 tmp11        [V15,T14] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.SByte>
 ;  V16 tmp12        [V16,T15] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Char>
 ;* V17 tmp13        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Decimal>
 ;  V18 tmp14        [V18,T19] (  4,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.UnreachableException>
 ;  V19 tmp15        [V19,T20] (  2,  0   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V20 tmp16        [V20,T17] (  0,  0   )     int  ->  zero-ref    "field V17._flags (fldOffset=0x0)" P-INDEP
 ;* V21 tmp17        [V21,T18] (  0,  0   )     int  ->  zero-ref    "field V17._hi32 (fldOffset=0x4)" P-INDEP
 ;  V22 tmp18        [V22,T16] (  2,  1   )    long  ->  rbx         "field V17._lo64 (fldOffset=0x8)" P-INDEP
 ;  V23 rat0         [V23,T02] (  3,  5.85)     int  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 0
 
 G_M29411_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      rbx, rsi
 						;; size=12 bbWeight=1 PerfScore 3.75
 G_M29411_IG02:
        mov      edi, dword ptr [rdi+0x0C]
        add      edi, -4
        cmp      edi, 11
        ja       G_M29411_IG17
 						;; size=15 bbWeight=1 PerfScore 3.50
 G_M29411_IG03:
        mov      edi, edi
        lea      rax, [reloc @RWD00]
        mov      eax, dword ptr [rax+4*rdi]
        lea      rcx, G_M29411_IG02
        add      rax, rcx
        jmp      rax
 						;; size=24 bbWeight=0.92 PerfScore 5.54
 G_M29411_IG04:
        mov      rdi, 0xD1FFAB1E      ; System.Decimal
        call     CORINFO_HELP_NEWSFAST
        xor      edi, edi
        mov      qword ptr [rax+0x08], rdi
        mov      qword ptr [rax+0x10], rbx
        jmp      G_M29411_IG16
 						;; size=30 bbWeight=0.50 PerfScore 2.75
 G_M29411_IG05:
        mov      rdi, 0xD1FFAB1E      ; System.Double
        call     CORINFO_HELP_NEWSFAST
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rbx
        vmovsd   qword ptr [rax+0x08], xmm0
        jmp      G_M29411_IG16
-						;; size=31 bbWeight=0.50 PerfScore 4.62
+						;; size=35 bbWeight=0.50 PerfScore 4.79
 G_M29411_IG06:
        mov      rdi, 0xD1FFAB1E      ; System.Single
        call     CORINFO_HELP_NEWSFAST
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2ss xmm0, rbx
        vmovss   dword ptr [rax+0x08], xmm0
        jmp      G_M29411_IG16
-						;; size=31 bbWeight=0.50 PerfScore 5.62
+						;; size=35 bbWeight=0.50 PerfScore 5.79
 G_M29411_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.UInt64
        call     CORINFO_HELP_NEWSFAST
        mov      qword ptr [rax+0x08], rbx
        jmp      G_M29411_IG16
 						;; size=24 bbWeight=0.50 PerfScore 2.12
 G_M29411_IG08:
        mov      rdi, 0xD1FFAB1E      ; System.Int64
        call     CORINFO_HELP_NEWSFAST
        test     rbx, rbx
        jl       G_M29411_IG18
        mov      rdi, rbx
        mov      qword ptr [rax+0x08], rdi
        jmp      G_M29411_IG16
 						;; size=36 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.UInt32
        call     CORINFO_HELP_NEWSFAST
        mov      rdi, rbx
        shr      rdi, 32
        jne      G_M29411_IG18
        mov      edi, ebx
        mov      dword ptr [rax+0x08], edi
        jmp      G_M29411_IG16
 						;; size=38 bbWeight=0.50 PerfScore 3.12
 G_M29411_IG10:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 0xD1FFAB1E
        ja       G_M29411_IG18
        mov      edi, ebx
        mov      dword ptr [rax+0x08], edi
        jmp      G_M29411_IG16
 						;; size=38 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG11:
        mov      rdi, 0xD1FFAB1E      ; System.UInt16
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 0xFFFF
        ja       G_M29411_IG18
        mov      edi, ebx
        mov      word  ptr [rax+0x08], di
        jmp      G_M29411_IG16
 						;; size=39 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Int16
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 0x7FFF
        ja       G_M29411_IG18
        mov      edi, ebx
        mov      word  ptr [rax+0x08], di
        jmp      SHORT G_M29411_IG16
 						;; size=36 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.Byte
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 255
        ja       G_M29411_IG18
        mov      edi, ebx
        mov      byte  ptr [rax+0x08], dil
        jmp      SHORT G_M29411_IG16
 						;; size=36 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG14:
        mov      rdi, 0xD1FFAB1E      ; System.SByte
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 127
        ja       G_M29411_IG18
        mov      edi, ebx
        mov      byte  ptr [rax+0x08], dil
        jmp      SHORT G_M29411_IG16
 						;; size=33 bbWeight=0.50 PerfScore 2.88
 G_M29411_IG15:
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        cmp      rbx, 0xFFFF
        ja       SHORT G_M29411_IG18
        mov      edi, ebx
        mov      word  ptr [rax+0x08], di
 						;; size=30 bbWeight=0.50 PerfScore 1.88
 G_M29411_IG16:
        pop      rbx
        pop      r15
        pop      rbp
        ret      
 						;; size=5 bbWeight=1 PerfScore 2.50
 G_M29411_IG17:
        mov      rdi, 0xD1FFAB1E      ; System.Diagnostics.UnreachableException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x4E07
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      r15, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Exception:.ctor():this
        call     [rax]System.Exception:.ctor():this
        lea      rdi, bword ptr [rbx+0x10]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=92 bbWeight=0 PerfScore 0.00
 G_M29411_IG18:
        call     CORINFO_HELP_OVERFLOW
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 RWD00  	dd	G_M29411_IG15 - G_M29411_IG02
        	dd	G_M29411_IG14 - G_M29411_IG02
        	dd	G_M29411_IG13 - G_M29411_IG02
        	dd	G_M29411_IG12 - G_M29411_IG02
        	dd	G_M29411_IG11 - G_M29411_IG02
        	dd	G_M29411_IG10 - G_M29411_IG02
        	dd	G_M29411_IG09 - G_M29411_IG02
        	dd	G_M29411_IG08 - G_M29411_IG02
        	dd	G_M29411_IG07 - G_M29411_IG02
        	dd	G_M29411_IG06 - G_M29411_IG02
        	dd	G_M29411_IG05 - G_M29411_IG02
        	dd	G_M29411_IG04 - G_M29411_IG02
 
 
-; Total bytes of code 556, prolog size 9, PerfScore 52.66, instruction count 116, allocated bytes for code 556 (MethodHash=9b428d1c) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
+; Total bytes of code 564, prolog size 9, PerfScore 53.00, instruction count 118, allocated bytes for code 564 (MethodHash=9b428d1c) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Checked:ConvertUInt64(ulong):System.Object:this (FullOpts)
 ; ============================================================
8 (1.86 % of base) - System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this
 ; Assembly listing for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T03] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked>
 ;  V01 arg1         [V01,T00] ( 14,  8   )    long  ->  rbx         single-def
 ;  V02 loc0         [V02,T01] ( 13,  7   )     ref  ->  rax         class-hnd <System.Object>
 ;* V03 loc1         [V03    ] (  0,  0   )     int  ->  zero-ref   
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V05 tmp1         [V05,T04] (  4,  4   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Decimal>
 ;  V06 tmp2         [V06,T05] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Double>
 ;  V07 tmp3         [V07,T06] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Single>
 ;  V08 tmp4         [V08,T07] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt64>
 ;  V09 tmp5         [V09,T08] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int64>
 ;  V10 tmp6         [V10,T09] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt32>
 ;  V11 tmp7         [V11,T10] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V12 tmp8         [V12,T11] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.UInt16>
 ;  V13 tmp9         [V13,T12] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Int16>
 ;  V14 tmp10        [V14,T13] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Byte>
 ;  V15 tmp11        [V15,T14] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.SByte>
 ;  V16 tmp12        [V16,T15] (  3,  3   )     ref  ->  rax         class-hnd exact single-def "Single-def Box Helper" <System.Char>
 ;* V17 tmp13        [V17    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Decimal>
 ;  V18 tmp14        [V18,T19] (  4,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Diagnostics.UnreachableException>
 ;  V19 tmp15        [V19,T20] (  2,  0   )     ref  ->  r15         class-hnd exact single-def "Inlining Arg" <System.String>
 ;* V20 tmp16        [V20,T17] (  0,  0   )     int  ->  zero-ref    "field V17._flags (fldOffset=0x0)" P-INDEP
 ;* V21 tmp17        [V21,T18] (  0,  0   )     int  ->  zero-ref    "field V17._hi32 (fldOffset=0x4)" P-INDEP
 ;  V22 tmp18        [V22,T16] (  2,  1   )    long  ->  rbx         "field V17._lo64 (fldOffset=0x8)" P-INDEP
 ;  V23 rat0         [V23,T02] (  3,  5.85)     int  ->  rdi         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 0
 
 G_M42680_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      rbx, rsi
 						;; size=12 bbWeight=1 PerfScore 3.75
 G_M42680_IG02:
        mov      edi, dword ptr [rdi+0x0C]
        add      edi, -4
        cmp      edi, 11
        ja       G_M42680_IG17
 						;; size=15 bbWeight=1 PerfScore 3.50
 G_M42680_IG03:
        mov      edi, edi
        lea      rax, [reloc @RWD00]
        mov      eax, dword ptr [rax+4*rdi]
        lea      rcx, G_M42680_IG02
        add      rax, rcx
        jmp      rax
 						;; size=24 bbWeight=0.92 PerfScore 5.54
 G_M42680_IG04:
        mov      rdi, 0xD1FFAB1E      ; System.Decimal
        call     CORINFO_HELP_NEWSFAST
        xor      edi, edi
        mov      qword ptr [rax+0x08], rdi
        mov      qword ptr [rax+0x10], rbx
        jmp      G_M42680_IG16
 						;; size=30 bbWeight=0.50 PerfScore 2.75
 G_M42680_IG05:
        mov      rdi, 0xD1FFAB1E      ; System.Double
        call     CORINFO_HELP_NEWSFAST
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rbx
        vmovsd   qword ptr [rax+0x08], xmm0
        jmp      G_M42680_IG16
-						;; size=31 bbWeight=0.50 PerfScore 4.62
+						;; size=35 bbWeight=0.50 PerfScore 4.79
 G_M42680_IG06:
        mov      rdi, 0xD1FFAB1E      ; System.Single
        call     CORINFO_HELP_NEWSFAST
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2ss xmm0, rbx
        vmovss   dword ptr [rax+0x08], xmm0
        jmp      G_M42680_IG16
-						;; size=31 bbWeight=0.50 PerfScore 5.62
+						;; size=35 bbWeight=0.50 PerfScore 5.79
 G_M42680_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.UInt64
        call     CORINFO_HELP_NEWSFAST
        mov      qword ptr [rax+0x08], rbx
        jmp      G_M42680_IG16
 						;; size=24 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG08:
        mov      rdi, 0xD1FFAB1E      ; System.Int64
        call     CORINFO_HELP_NEWSFAST
        mov      qword ptr [rax+0x08], rbx
        jmp      G_M42680_IG16
 						;; size=24 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.UInt32
        call     CORINFO_HELP_NEWSFAST
        mov      dword ptr [rax+0x08], ebx
        jmp      SHORT G_M42680_IG16
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG10:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      dword ptr [rax+0x08], ebx
        jmp      SHORT G_M42680_IG16
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG11:
        mov      rdi, 0xD1FFAB1E      ; System.UInt16
        call     CORINFO_HELP_NEWSFAST
        mov      word  ptr [rax+0x08], bx
        jmp      SHORT G_M42680_IG16
 						;; size=21 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG12:
        mov      rdi, 0xD1FFAB1E      ; System.Int16
        call     CORINFO_HELP_NEWSFAST
        mov      word  ptr [rax+0x08], bx
        jmp      SHORT G_M42680_IG16
 						;; size=21 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.Byte
        call     CORINFO_HELP_NEWSFAST
        mov      byte  ptr [rax+0x08], bl
        jmp      SHORT G_M42680_IG16
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG14:
        mov      rdi, 0xD1FFAB1E      ; System.SByte
        call     CORINFO_HELP_NEWSFAST
        mov      byte  ptr [rax+0x08], bl
        jmp      SHORT G_M42680_IG16
 						;; size=20 bbWeight=0.50 PerfScore 2.12
 G_M42680_IG15:
        mov      rdi, 0xD1FFAB1E      ; System.Char
        call     CORINFO_HELP_NEWSFAST
        mov      word  ptr [rax+0x08], bx
 						;; size=19 bbWeight=0.50 PerfScore 1.12
 G_M42680_IG16:
        pop      rbx
        pop      r15
        pop      rbp
        ret      
 						;; size=5 bbWeight=1 PerfScore 2.50
 G_M42680_IG17:
        mov      rdi, 0xD1FFAB1E      ; System.Diagnostics.UnreachableException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x4E07
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      r15, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Exception:.ctor():this
        call     [rax]System.Exception:.ctor():this
        lea      rdi, bword ptr [rbx+0x10]
        mov      rsi, r15
        call     CORINFO_HELP_ASSIGN_REF
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=92 bbWeight=0 PerfScore 0.00
 RWD00  	dd	G_M42680_IG15 - G_M42680_IG02
        	dd	G_M42680_IG14 - G_M42680_IG02
        	dd	G_M42680_IG13 - G_M42680_IG02
        	dd	G_M42680_IG12 - G_M42680_IG02
        	dd	G_M42680_IG11 - G_M42680_IG02
        	dd	G_M42680_IG10 - G_M42680_IG02
        	dd	G_M42680_IG09 - G_M42680_IG02
        	dd	G_M42680_IG08 - G_M42680_IG02
        	dd	G_M42680_IG07 - G_M42680_IG02
        	dd	G_M42680_IG06 - G_M42680_IG02
        	dd	G_M42680_IG05 - G_M42680_IG02
        	dd	G_M42680_IG04 - G_M42680_IG02
 
 
-; Total bytes of code 429, prolog size 9, PerfScore 46.41, instruction count 89, allocated bytes for code 429 (MethodHash=52025947) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
+; Total bytes of code 437, prolog size 9, PerfScore 46.75, instruction count 91, allocated bytes for code 437 (MethodHash=52025947) for method System.Linq.Expressions.Interpreter.NumericConvertInstruction+Unchecked:ConvertUInt64(ulong):System.Object:this (FullOpts)
 ; ============================================================
8 (36.36 % of base) - System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex
 ; Assembly listing for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )    long  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op "NewObj constructor temp" <System.Numerics.Complex>
 ;* V03 tmp2         [V03    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;  V04 tmp3         [V04,T01] (  2,  2   )  double  ->  mm0         "field V02.m_real (fldOffset=0x0)" P-INDEP
 ;  V05 tmp4         [V05,T02] (  2,  2   )  double  ->  mm1         "field V02.m_imaginary (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M61227_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M61227_IG02:
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rdi
        vxorps   xmm1, xmm1, xmm1
-						;; size=10 bbWeight=1 PerfScore 4.33
+						;; size=14 bbWeight=1 PerfScore 4.67
 G_M61227_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=ef0210d4) for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
+; Total bytes of code 15, prolog size 0, PerfScore 5.67, instruction count 4, allocated bytes for code 15 (MethodHash=ef0210d4) for method System.Numerics.Complex:op_Implicit(ulong):System.Numerics.Complex (FullOpts)
 ; ============================================================
8 (57.14 % of base) - System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat
 ; Assembly listing for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )    long  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.NFloat>
 ;* V03 tmp2         [V03    ] (  0,  0   )  double  ->  zero-ref    "Inlining Arg"
 ;  V04 tmp3         [V04,T01] (  2,  2   )  double  ->  mm0         "field V02._value (fldOffset=0x0)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M5643_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M5643_IG02:
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rdi
-						;; size=6 bbWeight=1 PerfScore 4.00
+						;; size=10 bbWeight=1 PerfScore 4.33
 G_M5643_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 7, prolog size 0, PerfScore 5.00, instruction count 2, allocated bytes for code 7 (MethodHash=0fefe9f4) for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=0fefe9f4) for method System.Runtime.InteropServices.NFloat:op_Implicit(ulong):System.Runtime.InteropServices.NFloat (FullOpts)
 ; ============================================================
6 (0.58 % of base) - Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double
 ; Assembly listing for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] ( 28, 15   )     ref  ->  rbx         class-hnd single-def <System.Object>
 ;  V01 arg1         [V01,T02] (  3,  2.50)     ref  ->  r15         class-hnd single-def <System.Globalization.NumberFormatInfo>
 ;  V02 loc0         [V02,T05] ( 26, 13.50)  double  ->  mm0        
 ;  V03 loc1         [V03,T01] ( 16,  8   )     ref  ->  r14         class-hnd single-def <System.IConvertible>
 ;* V04 loc2         [V04    ] (  0,  0   )     int  ->  zero-ref   
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V06 tmp1         [V06,T07] (  2,  0   )     ref  ->  r15         class-hnd exact single-def "non-inline candidate call" <System.String>
 ;  V07 tmp2         [V07,T06] (  3,  0   )     ref  ->  r14         class-hnd exact single-def "NewObj constructor temp" <System.InvalidCastException>
 ;* V08 tmp3         [V08    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V09 tmp4         [V09    ] (  0,  0   )  struct (16) zero-ref    do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Decimal>
 ;* V10 tmp5         [V10    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V11 tmp6         [V11    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V12 tmp7         [V12    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V13 tmp8         [V13    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V14 tmp9         [V14    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V15 tmp10        [V15    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V16 tmp11        [V16    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V17 tmp12        [V17    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V18 tmp13        [V18    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V19 tmp14        [V19    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;* V20 tmp15        [V20    ] (  0,  0   )     int  ->  zero-ref    "spilling qmarkNull"
 ;  V21 tmp16        [V21    ] (  2,  2   )  struct (16) [rbp-0x28]  do-not-enreg[XSR] multireg-ret addr-exposed ld-addr-op "Inlining Arg" <System.Decimal>
 ;  V22 tmp17        [V22    ] (  2,  2   )     int  ->  [rbp-0x28]  do-not-enreg[X] addr-exposed "field V21._flags (fldOffset=0x0)" P-DEP
 ;  V23 tmp18        [V23    ] (  2,  2   )     int  ->  [rbp-0x24]  do-not-enreg[X] addr-exposed "field V21._hi32 (fldOffset=0x4)" P-DEP
 ;  V24 tmp19        [V24    ] (  2,  2   )    long  ->  [rbp-0x20]  do-not-enreg[X] addr-exposed "field V21._lo64 (fldOffset=0x8)" P-DEP
 ;  V25 tmp20        [V25,T04] (  2,  2   )     ref  ->  rdi         single-def "argument with side effect"
 ;  V26 tmp21        [V26,T08] (  2,  0   )     ref  ->  rbx         single-def "argument with side effect"
 ;  V27 tmp22        [V27,T09] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V28 tmp23        [V28,T10] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V29 rat0         [V29,T03] (  3,  2.94)     int  ->  rax         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 24
 
 G_M32782_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15, rsi
 						;; size=21 bbWeight=1 PerfScore 5.25
 G_M32782_IG02:
        test     rbx, rbx
        je       G_M32782_IG29
 						;; size=9 bbWeight=1 PerfScore 1.25
 G_M32782_IG03:
        mov      rsi, rbx
        mov      rdi, 0xD1FFAB1E      ; System.IConvertible
        mov      rax, 0xD1FFAB1E      ; code for CORINFO_HELP_ISINSTANCEOFINTERFACE
        call     [rax]CORINFO_HELP_ISINSTANCEOFINTERFACE
        mov      r14, rax
        test     r14, r14
        je       G_M32782_IG31
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:GetTypeCode():int:this
        call     [r11]System.IConvertible:GetTypeCode():int:this
        add      eax, -3
        cmp      eax, 15
        ja       G_M32782_IG31
 						;; size=65 bbWeight=0.50 PerfScore 5.12
 G_M32782_IG04:
        mov      edi, eax
        lea      r11, [reloc @RWD00]
        mov      r11d, dword ptr [r11+4*rdi]
        lea      rsi, G_M32782_IG02
        add      r11, rsi
        jmp      r11
 						;; size=26 bbWeight=0.47 PerfScore 2.82
 G_M32782_IG05:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToString(System.IFormatProvider):System.String:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToString(System.IFormatProvider):System.String:this
        mov      rdi, rax
        mov      rsi, r15
        mov      rax, 0xD1FFAB1E      ; code for Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.String,System.Globalization.NumberFormatInfo):double
        call     [rax]Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.String,System.Globalization.NumberFormatInfo):double
        jmp      G_M32782_IG30
 						;; size=41 bbWeight=0.50 PerfScore 4.75
 G_M32782_IG06:
        mov      rdi, 0xD1FFAB1E      ; System.Decimal
        cmp      qword ptr [rbx], rdi
        je       SHORT G_M32782_IG08
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToDecimal(System.IFormatProvider):System.Decimal:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToDecimal(System.IFormatProvider):System.Decimal:this
        mov      qword ptr [rbp-0x28], rax
        mov      qword ptr [rbp-0x20], rdx
        lea      rdi, [rbp-0x28]
        mov      rax, 0xD1FFAB1E      ; code for System.Decimal+DecCalc:VarR8FromDec(byref):double
        call     [rax]System.Decimal+DecCalc:VarR8FromDec(byref):double
        jmp      G_M32782_IG30
 						;; size=62 bbWeight=0.50 PerfScore 7.88
 G_M32782_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.Double
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG08
        vmovsd   xmm0, qword ptr [rbx+0x08]
        jmp      G_M32782_IG30
 						;; size=25 bbWeight=0.50 PerfScore 5.12
 G_M32782_IG08:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToDouble(System.IFormatProvider):double:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToDouble(System.IFormatProvider):double:this
        jmp      G_M32782_IG30
 						;; size=23 bbWeight=0.50 PerfScore 2.88
 G_M32782_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.Single
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG10
        vcvtss2sd xmm0, xmm0, dword ptr [rbx+0x08]
        jmp      G_M32782_IG30
 						;; size=25 bbWeight=0.50 PerfScore 6.62
 G_M32782_IG10:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToSingle(System.IFormatProvider):float:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToSingle(System.IFormatProvider):float:this
        vcvtss2sd xmm0, xmm0, xmm0
        jmp      G_M32782_IG30
 						;; size=27 bbWeight=0.50 PerfScore 4.88
 G_M32782_IG11:
        mov      rdi, 0xD1FFAB1E      ; System.UInt64
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG12
        mov      rdi, qword ptr [rbx+0x08]
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rdi
        jmp      G_M32782_IG30
-						;; size=30 bbWeight=0.50 PerfScore 6.12
+						;; size=34 bbWeight=0.50 PerfScore 6.29
 G_M32782_IG12:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToUInt64(System.IFormatProvider):ulong:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToUInt64(System.IFormatProvider):ulong:this
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rax
        jmp      G_M32782_IG30
-						;; size=29 bbWeight=0.50 PerfScore 4.88
+						;; size=33 bbWeight=0.50 PerfScore 5.04
 G_M32782_IG13:
        mov      rdi, 0xD1FFAB1E      ; System.Int64
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG14
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, qword ptr [rbx+0x08]
        jmp      G_M32782_IG30
 						;; size=30 bbWeight=0.50 PerfScore 7.79
 G_M32782_IG14:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToInt64(System.IFormatProvider):long:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToInt64(System.IFormatProvider):long:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, rax
        jmp      G_M32782_IG30
 						;; size=32 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG15:
        mov      rdi, 0xD1FFAB1E      ; System.UInt32
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG16
-       mov      edi, dword ptr [rbx+0x08]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rdi
+       vcvtusi2sd xmm0, dword ptr [rbx+0x08]
        jmp      G_M32782_IG30
-						;; size=32 bbWeight=0.50 PerfScore 7.29
+						;; size=31 bbWeight=0.50 PerfScore 6.79
 G_M32782_IG16:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToUInt32(System.IFormatProvider):uint:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToUInt32(System.IFormatProvider):uint:this
-       mov      edi, eax
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rdi
+       vcvtusi2sd xmm0, eax
        jmp      G_M32782_IG30
-						;; size=34 bbWeight=0.50 PerfScore 6.17
+						;; size=33 bbWeight=0.50 PerfScore 5.04
 G_M32782_IG17:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG18
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, dword ptr [rbx+0x08]
        jmp      G_M32782_IG30
 						;; size=29 bbWeight=0.50 PerfScore 7.79
 G_M32782_IG18:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToInt32(System.IFormatProvider):int:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToInt32(System.IFormatProvider):int:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      G_M32782_IG30
 						;; size=31 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG19:
        mov      rdi, 0xD1FFAB1E      ; System.UInt16
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG20
        movzx    rdi, word  ptr [rbx+0x08]
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, edi
        jmp      G_M32782_IG30
 						;; size=32 bbWeight=0.50 PerfScore 7.29
 G_M32782_IG20:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToUInt16(System.IFormatProvider):ushort:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToUInt16(System.IFormatProvider):ushort:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      G_M32782_IG30
 						;; size=31 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG21:
        mov      rdi, 0xD1FFAB1E      ; System.Int16
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG22
        movsx    rdi, word  ptr [rbx+0x08]
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, edi
        jmp      G_M32782_IG30
 						;; size=33 bbWeight=0.50 PerfScore 8.29
 G_M32782_IG22:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToInt16(System.IFormatProvider):short:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToInt16(System.IFormatProvider):short:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      G_M32782_IG30
 						;; size=31 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG23:
        mov      rdi, 0xD1FFAB1E      ; System.Byte
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG24
        movzx    rdi, byte  ptr [rbx+0x08]
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, edi
        jmp      G_M32782_IG30
 						;; size=33 bbWeight=0.50 PerfScore 7.29
 G_M32782_IG24:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToByte(System.IFormatProvider):ubyte:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToByte(System.IFormatProvider):ubyte:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      G_M32782_IG30
 						;; size=31 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG25:
        mov      rdi, 0xD1FFAB1E      ; System.SByte
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG26
        movsx    rdi, byte  ptr [rbx+0x08]
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, edi
        jmp      SHORT G_M32782_IG30
 						;; size=30 bbWeight=0.50 PerfScore 8.29
 G_M32782_IG26:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToSByte(System.IFormatProvider):byte:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToSByte(System.IFormatProvider):byte:this
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      SHORT G_M32782_IG30
 						;; size=28 bbWeight=0.50 PerfScore 6.04
 G_M32782_IG27:
        mov      rdi, 0xD1FFAB1E      ; System.Boolean
        cmp      qword ptr [rbx], rdi
        jne      SHORT G_M32782_IG28
        cmp      byte  ptr [rbx+0x08], 0
        setne    dil
        movzx    rdi, dil
        neg      edi
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, edi
        jmp      SHORT G_M32782_IG30
 						;; size=39 bbWeight=0.50 PerfScore 8.54
 G_M32782_IG28:
        mov      rdi, r14
        mov      r11, 0xD1FFAB1E      ; code for System.IConvertible:ToBoolean(System.IFormatProvider):ubyte:this
        xor      rsi, rsi
        call     [r11]System.IConvertible:ToBoolean(System.IFormatProvider):ubyte:this
        test     eax, eax
        setne    al
        movzx    rax, al
        neg      eax
        vxorps   xmm0, xmm0, xmm0
        vcvtsi2sd xmm0, xmm0, eax
        jmp      SHORT G_M32782_IG30
 						;; size=38 bbWeight=0.50 PerfScore 6.92
 G_M32782_IG29:
        vxorps   xmm0, xmm0, xmm0
 						;; size=4 bbWeight=0.50 PerfScore 0.17
 G_M32782_IG30:
        add      rsp, 24
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
 G_M32782_IG31:
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InvalidCast_FromTo():System.String
        call     [rax]System.SR:get_InvalidCast_FromTo():System.String
        mov      r15, rax
        mov      rdi, 0xD1FFAB1E      ; System.InvalidCastException
        call     CORINFO_HELP_NEWSFAST
        mov      r14, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for Microsoft.VisualBasic.CompilerServices.Utils:VBFriendlyName(System.Object):System.String
        call     [rax]Microsoft.VisualBasic.CompilerServices.Utils:VBFriendlyName(System.Object):System.String
        mov      rbx, rax
        mov      edi, 247
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdx, rax
        mov      rsi, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object,System.Object):System.String
        mov      rsi, rax
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.InvalidCastException:.ctor(System.String):this
        call     [rax]System.InvalidCastException:.ctor(System.String):this
        mov      rdi, r14
        call     CORINFO_HELP_THROW
        int3     
 						;; size=119 bbWeight=0 PerfScore 0.00
 RWD00  	dd	G_M32782_IG27 - G_M32782_IG02
        	dd	G_M32782_IG31 - G_M32782_IG02
        	dd	G_M32782_IG25 - G_M32782_IG02
        	dd	G_M32782_IG23 - G_M32782_IG02
        	dd	G_M32782_IG21 - G_M32782_IG02
        	dd	G_M32782_IG19 - G_M32782_IG02
        	dd	G_M32782_IG17 - G_M32782_IG02
        	dd	G_M32782_IG15 - G_M32782_IG02
        	dd	G_M32782_IG13 - G_M32782_IG02
        	dd	G_M32782_IG11 - G_M32782_IG02
        	dd	G_M32782_IG09 - G_M32782_IG02
        	dd	G_M32782_IG07 - G_M32782_IG02
        	dd	G_M32782_IG06 - G_M32782_IG02
        	dd	G_M32782_IG31 - G_M32782_IG02
        	dd	G_M32782_IG31 - G_M32782_IG02
        	dd	G_M32782_IG05 - G_M32782_IG02
 
 
-; Total bytes of code 1031, prolog size 15, PerfScore 172.91, instruction count 234, allocated bytes for code 1031 (MethodHash=67dd7ff1) for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
+; Total bytes of code 1037, prolog size 15, PerfScore 171.62, instruction count 234, allocated bytes for code 1037 (MethodHash=67dd7ff1) for method Microsoft.VisualBasic.CompilerServices.Conversions:ToDouble(System.Object,System.Globalization.NumberFormatInfo):double (FullOpts)
 ; ============================================================
4 (57.14 % of base) - System.Convert:ToDouble(ulong):double
 ; Assembly listing for method System.Convert:ToDouble(ulong):double (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )    long  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M21699_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M21699_IG02:
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rdi
-						;; size=6 bbWeight=1 PerfScore 4.00
+						;; size=10 bbWeight=1 PerfScore 4.33
 G_M21699_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 7, prolog size 0, PerfScore 5.00, instruction count 2, allocated bytes for code 7 (MethodHash=6446ab3c) for method System.Convert:ToDouble(ulong):double (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=6446ab3c) for method System.Convert:ToDouble(ulong):double (FullOpts)
 ; ============================================================
4 (57.14 % of base) - System.Convert:ToSingle(ulong):float
 ; Assembly listing for method System.Convert:ToSingle(ulong):float (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )    long  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M55401_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M55401_IG02:
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2ss xmm0, rdi
-						;; size=6 bbWeight=1 PerfScore 6.00
+						;; size=10 bbWeight=1 PerfScore 6.33
 G_M55401_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 7, prolog size 0, PerfScore 7.00, instruction count 2, allocated bytes for code 7 (MethodHash=86f52796) for method System.Convert:ToSingle(ulong):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=86f52796) for method System.Convert:ToSingle(ulong):float (FullOpts)
 ; ============================================================
4 (2.99 % of base) - System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this
 ; Assembly listing for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  4,  3.50)     ref  ->  rbx         this class-hnd single-def <System.Diagnostics.Process>
 ;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op <System.Environment+ProcessCpuUsage>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T01] (  2,  2   )  struct (80) [rbp-0x60]  do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <Interop+procfs+ParsedStat>
 ;* V04 tmp2         [V04    ] (  0,  0   )     int  ->  zero-ref    "impAppendStmt"
 ;  V05 tmp3         [V05,T03] (  1,  0.50)    long  ->  rax         "field V01.<UserTime>k__BackingField (fldOffset=0x0)" P-INDEP
 ;  V06 tmp4         [V06,T02] (  2,  1   )    long  ->  rax         "field V01.<PrivilegedTime>k__BackingField (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 80
 
 G_M65406_IG01:
        push     rbp
        push     r15
        push     rbx
        sub      rsp, 80
        lea      rbp, [rsp+0x60]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu32 zmmword ptr [rbp-0x60], zmm8
        vmovdqa  xmmword ptr [rbp-0x20], xmm8
        mov      rbx, rdi
 						;; size=36 bbWeight=1 PerfScore 8.33
 G_M65406_IG02:
        mov      r15d, dword ptr [rbx+0xC0]
        mov      rax, 0xD1FFAB1E      ; code for System.Environment:get_ProcessId():int
        call     [rax]System.Environment:get_ProcessId():int
        cmp      r15d, eax
        jne      SHORT G_M65406_IG05
 						;; size=24 bbWeight=1 PerfScore 6.50
 G_M65406_IG03:
        mov      rax, 0xD1FFAB1E      ; code for System.Environment:get_CpuUsage():System.Environment+ProcessCpuUsage
        call     [rax]System.Environment:get_CpuUsage():System.Environment+ProcessCpuUsage
        mov      rax, rdx
 						;; size=15 bbWeight=0.50 PerfScore 1.75
 G_M65406_IG04:
        add      rsp, 80
        pop      rbx
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.38
 G_M65406_IG05:
        lea      rsi, [rbp-0x60]
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Process:GetStat():Interop+procfs+ParsedStat:this
        call     [rax]System.Diagnostics.Process:GetStat():Interop+procfs+ParsedStat:this
        mov      rax, qword ptr [rbp-0x50]
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
-						;; size=39 bbWeight=0.50 PerfScore 4.62
+						;; size=43 bbWeight=0.50 PerfScore 4.79
 G_M65406_IG06:
        add      rsp, 80
        pop      rbx
        pop      r15
        pop      rbp
        tail.jmp [rax]System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
 						;; size=11 bbWeight=0.50 PerfScore 1.88
 
-; Total bytes of code 134, prolog size 33, PerfScore 24.46, instruction count 34, allocated bytes for code 134 (MethodHash=43ad0081) for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
+; Total bytes of code 138, prolog size 33, PerfScore 24.63, instruction count 35, allocated bytes for code 138 (MethodHash=43ad0081) for method System.Diagnostics.Process:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
 ; ============================================================
4 (5.41 % of base) - System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this
 ; Assembly listing for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Diagnostics.ProcessThread>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V02 tmp1         [V02,T01] (  2,  4   )  struct (80) [rbp-0x50]  do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <Interop+procfs+ParsedStat>
 ;
 ; Lcl frame size = 80
 
 G_M52528_IG01:
        push     rbp
        sub      rsp, 80
        lea      rbp, [rsp+0x50]
        vxorps   xmm8, xmm8, xmm8
        vmovdqu32 zmmword ptr [rbp-0x50], zmm8
        vmovdqa  xmmword ptr [rbp-0x10], xmm8
 						;; size=30 bbWeight=1 PerfScore 6.08
 G_M52528_IG02:
        lea      rsi, [rbp-0x50]
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.ProcessThread:GetStat():Interop+procfs+ParsedStat:this
        call     [rax]System.Diagnostics.ProcessThread:GetStat():Interop+procfs+ParsedStat:this
        mov      rax, qword ptr [rbp-0x40]
+       vxorps   xmm0, xmm0, xmm0
        vcvtusi2sd xmm0, rax
        mov      rax, 0xD1FFAB1E      ; code for System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
-						;; size=36 bbWeight=1 PerfScore 9.00
+						;; size=40 bbWeight=1 PerfScore 9.33
 G_M52528_IG03:
        add      rsp, 80
        pop      rbp
        tail.jmp [rax]System.Diagnostics.Process:TicksToTimeSpan(double):System.TimeSpan
 						;; size=8 bbWeight=1 PerfScore 2.75
 
-; Total bytes of code 74, prolog size 30, PerfScore 17.83, instruction count 15, allocated bytes for code 74 (MethodHash=559b32cf) for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
+; Total bytes of code 78, prolog size 30, PerfScore 18.17, instruction count 16, allocated bytes for code 78 (MethodHash=559b32cf) for method System.Diagnostics.ProcessThread:get_PrivilegedProcessorTime():System.TimeSpan:this (FullOpts)
 ; ============================================================

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

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 19, 2025

Top method improvements

-24 (-3.07 % of base) - System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double
 ; Assembly listing for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 13 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T06] (  9,  6.50)     ref  ->  rbx         class-hnd single-def <System.Xml.Xsl.XPathConvert+FloatingDecimal>
 ;  V01 loc0         [V01    ] (  9,  4.50)  struct (24) [rbp-0x40]  do-not-enreg[XSF] addr-exposed ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
 ;  V02 loc1         [V02,T11] (  6,  3   )  struct (24) [rbp-0x58]  do-not-enreg[SF] ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
 ;  V03 loc2         [V03    ] ( 14,  7   )  struct (24) [rbp-0x70]  do-not-enreg[XSF] addr-exposed ld-addr-op <System.Xml.Xsl.XPathConvert+BigNumber>
 ;  V04 loc3         [V04,T05] (  4,  9   )     int  ->  rax        
 ;  V05 loc4         [V05,T08] (  8,  4.50)     int  ->  r14        
 ;  V06 loc5         [V06,T24] ( 20, 16.75)  double  ->  [rbp-0x78] 
 ;* V07 loc6         [V07    ] (  0,  0   )  double  ->  zero-ref   
 ;  V08 loc7         [V08,T04] (  7, 12   )     int  ->  r15        
 ;* V09 loc8         [V09,T22] (  0,  0   )     int  ->  zero-ref   
 ;* V10 loc9         [V10,T23] (  0,  0   )     int  ->  zero-ref   
 ;* V11 loc10        [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[double]>
 ;  V12 OutArgs      [V12    ] (  1,  1   )  struct (24) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V13 tmp1         [V13,T17] (  2,  2   )     int  ->  rax         "Span.get_Item index"
 ;* V14 tmp2         [V14    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
 ;* V15 tmp3         [V15    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
 ;* V16 tmp4         [V16    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
 ;* V17 tmp5         [V17    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[double]>
 ;  V18 tmp6         [V18,T15] (  4,  2   )     int  ->  rdi         "Inline stloc first use temp"
 ;  V19 tmp7         [V19,T18] (  3,  1.50)     int  ->  rdi         "Inline stloc first use temp"
 ;  V20 tmp8         [V20,T13] (  3,  3   )     int  ->  rdi         "Inlining Arg"
 ;* V21 tmp9         [V21    ] (  0,  0   )   byref  ->  zero-ref    "field V11._reference (fldOffset=0x0)" P-INDEP
 ;* V22 tmp10        [V22    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
 ;* V23 tmp11        [V23    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V14._reference (fldOffset=0x0)" P-INDEP
 ;* V24 tmp12        [V24    ] (  0,  0   )     int  ->  zero-ref    "field V14._length (fldOffset=0x8)" P-INDEP
 ;* V25 tmp13        [V25    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V15._reference (fldOffset=0x0)" P-INDEP
 ;* V26 tmp14        [V26    ] (  0,  0   )     int  ->  zero-ref    "field V15._length (fldOffset=0x8)" P-INDEP
 ;* V27 tmp15        [V27    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V16._reference (fldOffset=0x0)" P-INDEP
 ;* V28 tmp16        [V28    ] (  0,  0   )     int  ->  zero-ref    "field V16._length (fldOffset=0x8)" P-INDEP
 ;* V29 tmp17        [V29    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V17._reference (fldOffset=0x0)" P-INDEP
 ;* V30 tmp18        [V30    ] (  0,  0   )     int  ->  zero-ref    "field V17._length (fldOffset=0x8)" P-INDEP
 ;  V31 tmp19        [V31,T09] (  8,  4   )     int  ->  r15         "V02.[000..004)"
 ;  V32 tmp20        [V32,T14] (  5,  2.50)     int  ->  r14         "V02.[004..008)"
 ;  V33 tmp21        [V33,T12] (  6,  3   )     int  ->  r13         "V02.[008..012)"
 ;  V34 tmp22        [V34,T16] (  4,  2   )     int  ->  r12         "V02.[012..016)"
 ;  V35 tmp23        [V35,T21] (  2,  1   )     int  ->  rdi         "V02.[016..020)"
 ;  V36 tmp24        [V36,T26] (  2,  2   )  double  ->  mm0         "argument with side effect"
 ;  V37 tmp25        [V37,T00] (  3, 24   )     ref  ->  rdx         "arr expr"
 ;  V38 tmp26        [V38,T01] (  3, 24   )     ref  ->  rdi         "arr expr"
 ;  V39 cse0         [V39,T07] (  4,  8.50)     ref  ->  rcx         hoist multi-def "CSE #02: aggressive"
 ;  V40 cse1         [V40,T10] (  5,  3.50)     int  ->  rdi         "CSE #01: moderate"
 ;  V41 cse2         [V41,T25] (  2,  4.25)  double  ->  mm1         hoist "CSE #04: moderate"
 ;  V42 cse3         [V42,T19] (  3,  1.50)     int  ->  r14         "CSE #05: moderate"
 ;  V43 cse4         [V43,T20] (  3,  1.50)     int  ->  rdi         "CSE #07: moderate"
 ;  V44 rat0         [V44,T03] (  6, 20.25)    long  ->  rax         "Widened IV V10"
 ;  V45 rat1         [V45,T02] (  6, 20.50)    long  ->  rdx         "Widened IV V09"
 ;
 ; Lcl frame size = 104
 
 G_M21464_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 104
        lea      rbp, [rsp+0x90]
        mov      rbx, rdi
 						;; size=25 bbWeight=1 PerfScore 7.00
 G_M21464_IG02:
        mov      r15d, dword ptr [rbx+0x18]
        mov      edi, dword ptr [rbx+0x10]
        mov      r14d, edi
        sub      r14d, r15d
        cmp      r15d, 15
        jg       SHORT G_M21464_IG04
 						;; size=19 bbWeight=1 PerfScore 5.75
 G_M21464_IG03:
        cmp      r14d, -22
        jl       SHORT G_M21464_IG04
        cmp      edi, 37
        jle      G_M21464_IG12
 						;; size=15 bbWeight=0.50 PerfScore 1.25
 G_M21464_IG04:
        cmp      edi, 310
        jge      G_M21464_IG11
        cmp      edi, -325
        jle      G_M21464_IG10
        lea      rdi, [rbp-0x40]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:.ctor(System.Xml.Xsl.XPathConvert+FloatingDecimal):this
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:.ctor(System.Xml.Xsl.XPathConvert+FloatingDecimal):this
        mov      edi, dword ptr [rbp-0x30]
        test     edi, edi
        je       G_M21464_IG09
        mov      r15d, dword ptr [rbp-0x40]
        mov      r14d, dword ptr [rbp-0x3C]
        mov      r13d, dword ptr [rbp-0x38]
        mov      r12d, dword ptr [rbp-0x34]
        inc      edi
        shr      edi, 1
        je       SHORT G_M21464_IG05
        add      r15d, edi
        cmp      r15d, edi
        jae      SHORT G_M21464_IG05
        inc      r14d
        jne      SHORT G_M21464_IG05
        inc      r13d
        jne      SHORT G_M21464_IG05
        mov      r13d, 0xD1FFAB1E
        mov      edi, r15d
        shr      edi, 1
        and      r15d, 1
        add      r15d, edi
        inc      r12d
 						;; size=115 bbWeight=0.50 PerfScore 10.12
 G_M21464_IG05:
        vmovdqu  xmm0, xmmword ptr [rbp-0x40]
        vmovdqu  xmmword ptr [rbp-0x70], xmm0
        mov      edi, dword ptr [rbp-0x30]
        mov      dword ptr [rbp-0x60], edi
        mov      edi, dword ptr [rbp-0x60]
        inc      edi
        shr      edi, 1
        je       SHORT G_M21464_IG06
        neg      edi
        mov      eax, edi
        add      eax, dword ptr [rbp-0x70]
        mov      dword ptr [rbp-0x70], eax
        cmp      dword ptr [rbp-0x70], edi
        jb       SHORT G_M21464_IG06
        mov      edi, dword ptr [rbp-0x6C]
        dec      edi
        mov      dword ptr [rbp-0x6C], edi
        cmp      dword ptr [rbp-0x6C], -1
        jb       SHORT G_M21464_IG06
        mov      edi, dword ptr [rbp-0x68]
        dec      edi
        mov      dword ptr [rbp-0x68], edi
        test     dword ptr [rbp-0x68], 0xD1FFAB1E
        jne      SHORT G_M21464_IG06
        lea      rdi, [rbp-0x70]
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:Normalize():this
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:Normalize():this
 						;; size=87 bbWeight=0.50 PerfScore 14.75
 G_M21464_IG06:
        xor      eax, eax
        mov      dword ptr [rbp-0x60], eax
        mov      dword ptr [rbp-0x58], r15d
        mov      dword ptr [rbp-0x54], r14d
        mov      dword ptr [rbp-0x50], r13d
        mov      dword ptr [rbp-0x4C], r12d
 						;; size=21 bbWeight=0.50 PerfScore 2.62
 G_M21464_IG07:
        mov      dword ptr [rbp-0x48], eax
        vmovdqu  xmm0, xmmword ptr [rbp-0x58]
        vmovdqu  xmmword ptr [rsp], xmm0
        mov      rax, qword ptr [rbp-0x48]
        mov      qword ptr [rsp+0x10], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        vmovsd   qword ptr [rbp-0x78], xmm0
        vmovdqu  xmm1, xmmword ptr [rbp-0x70]
        vmovdqu  xmmword ptr [rsp], xmm1
        mov      rax, qword ptr [rbp-0x60]
        mov      qword ptr [rsp+0x10], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        vmovsd   xmm1, qword ptr [rbp-0x78]
        vucomisd xmm0, xmm1
        vmovaps  xmm0, xmm1
        jp       SHORT G_M21464_IG08
        je       G_M21464_IG22
 						;; size=91 bbWeight=0.50 PerfScore 13.88
 G_M21464_IG08:
        vmovdqu  xmm0, xmmword ptr [rbp-0x40]
        vmovdqu  xmmword ptr [rsp], xmm0
        mov      rax, qword ptr [rbp-0x30]
        mov      qword ptr [rsp+0x10], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+FloatingDecimal:AdjustDbl(double):double:this
        call     [rax]System.Xml.Xsl.XPathConvert+FloatingDecimal:AdjustDbl(double):double:this
        jmp      G_M21464_IG22
        align    [2 bytes for IG14]
 						;; size=53 bbWeight=0.50 PerfScore 7.38
 G_M21464_IG09:
        vmovdqu  xmm0, xmmword ptr [rbp-0x40]
        vmovdqu  xmmword ptr [rsp], xmm0
        mov      rax, qword ptr [rbp-0x30]
        mov      qword ptr [rsp+0x10], rax
        mov      rax, 0xD1FFAB1E      ; code for System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        call     [rax]System.Xml.Xsl.XPathConvert+BigNumber:op_Explicit(System.Xml.Xsl.XPathConvert+BigNumber):double
        jmp      G_M21464_IG22
 						;; size=36 bbWeight=0.50 PerfScore 5.62
 G_M21464_IG10:
        vxorps   xmm0, xmm0, xmm0
        jmp      G_M21464_IG22
 						;; size=9 bbWeight=0.50 PerfScore 1.17
 G_M21464_IG11:
        vmovsd   xmm0, qword ptr [reloc @RWD00]
        jmp      G_M21464_IG22
 						;; size=13 bbWeight=0.50 PerfScore 2.50
 G_M21464_IG12:
        cmp      r15d, 9
-       jle      G_M21464_IG16
+       jle      SHORT G_M21464_IG16
+		  ;; NOP compensation instructions of 4 bytes.
 						;; size=10 bbWeight=0.50 PerfScore 0.62
 G_M21464_IG13:
        vxorps   xmm0, xmm0, xmm0
        xor      eax, eax
        mov      rcx, gword ptr [rbx+0x08]
        vmovsd   xmm1, qword ptr [reloc @RWD08]
 						;; size=18 bbWeight=0.25 PerfScore 1.40
 G_M21464_IG14:
        mov      rdx, rcx
        cmp      eax, dword ptr [rdx+0x08]
        jae      G_M21464_IG26
        movzx    rdx, byte  ptr [rdx+rax+0x10]
        vxorps   xmm2, xmm2, xmm2
        vcvtsi2sd xmm2, xmm2, edx
        vmulsd   xmm0, xmm0, xmm1
        vaddsd   xmm0, xmm2, xmm0
        inc      eax
        cmp      eax, r15d
        jl       SHORT G_M21464_IG14
 						;; size=40 bbWeight=4 PerfScore 80.33
 G_M21464_IG15:
        test     r14d, r14d
-       jle      G_M21464_IG20
+       jle      SHORT G_M21464_IG20
        cmp      r14d, 22
-       jle      G_M21464_IG21
+       jle      SHORT G_M21464_IG21
+		  ;; NOP compensation instructions of 4 bytes.
        add      r14d, -22
        cmp      r14d, 23
        jae      G_M21464_IG26
        mov      eax, r14d
        mov      rcx, 0xD1FFAB1E      ; static handle
        vmulsd   xmm0, xmm0, qword ptr [rcx+8*rax]
        vmulsd   xmm0, xmm0, qword ptr [reloc @RWD16]
        jmp      SHORT G_M21464_IG22
-       align    [14 bytes for IG18]
-						;; size=75 bbWeight=0.50 PerfScore 8.75
+       align    [2 bytes for IG18]
+						;; size=59 bbWeight=0.50 PerfScore 8.75
 G_M21464_IG16:
        xor      eax, eax
        xor      edx, edx
        test     r15d, r15d
        jle      SHORT G_M21464_IG19
 						;; size=9 bbWeight=0.50 PerfScore 0.88
 G_M21464_IG17:
        mov      rcx, gword ptr [rbx+0x08]
 						;; size=4 bbWeight=0.25 PerfScore 0.50
 G_M21464_IG18:
        mov      rdi, rcx
        cmp      edx, dword ptr [rdi+0x08]
-       jae      G_M21464_IG26
+       jae      SHORT G_M21464_IG26
        movzx    rdi, byte  ptr [rdi+rdx+0x10]
        lea      eax, [rax+4*rax]
        lea      eax, [rdi+2*rax]
        inc      edx
        cmp      edx, r15d
        jl       SHORT G_M21464_IG18
-						;; size=31 bbWeight=4 PerfScore 35.00
+						;; size=27 bbWeight=4 PerfScore 35.00
 G_M21464_IG19:
-       mov      eax, eax
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       jmp      G_M21464_IG15
-						;; size=16 bbWeight=0.50 PerfScore 4.29
+       vcvtusi2sd xmm0, eax
+       jmp      SHORT G_M21464_IG15
+						;; size=12 bbWeight=0.50 PerfScore 3.17
 G_M21464_IG20:
        test     r14d, r14d
        jge      SHORT G_M21464_IG22
        mov      eax, r14d
        neg      eax
        mov      rcx, 0xD1FFAB1E      ; static handle
        vdivsd   xmm0, xmm0, qword ptr [rcx+8*rax]
        jmp      SHORT G_M21464_IG22
 						;; size=27 bbWeight=0.50 PerfScore 9.50
 G_M21464_IG21:
        mov      eax, r14d
        mov      rcx, 0xD1FFAB1E      ; static handle
        vmulsd   xmm0, xmm0, qword ptr [rcx+8*rax]
 						;; size=18 bbWeight=0.50 PerfScore 3.25
 G_M21464_IG22:
        cmp      dword ptr [rbx+0x14], 0
        jge      SHORT G_M21464_IG25
 						;; size=6 bbWeight=1 PerfScore 4.00
 G_M21464_IG23:
        vxorps   xmm0, xmm0, xmmword ptr [reloc @RWD32]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M21464_IG24:
        add      rsp, 104
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M21464_IG25:
        add      rsp, 104
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M21464_IG26:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 RWD00  	dq	7FF0000000000000h	;          inf
 RWD08  	dq	4024000000000000h	;           10
 RWD16  	dq	4480F0CF064DD592h	;        1e+22
 RWD24  	dd	00000000h, 00000000h
 RWD32  	dq	8000000000000000h, 8000000000000000h
 
 
-; Total bytes of code 782, prolog size 25, PerfScore 225.81, instruction count 203, allocated bytes for code 782 (MethodHash=776aac27) for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
+; Total bytes of code 758, prolog size 25, PerfScore 224.69, instruction count 202, allocated bytes for code 758 (MethodHash=776aac27) for method System.Xml.Xsl.XPathConvert+FloatingDecimal:op_Explicit(System.Xml.Xsl.XPathConvert+FloatingDecimal):double (FullOpts)
 ; ============================================================
-20 (-17.86 % of base) - System.Runtime.Intrinsics.Vector128:g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float]
 ; Assembly listing for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 RetBuf       [V00,T00] (  4,  4   )   byref  ->  rdi         single-def
 ;  V01 arg0         [V01    ] (  4,  4   )  simd16  ->  [rbp+0x10]  do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Runtime.Intrinsics.Vector128`1[uint]>
 ;  V02 loc0         [V02    ] (  5,  5   )  simd16  ->  [rbp-0x10]  do-not-enreg[XS] addr-exposed ld-addr-op <System.Runtime.Intrinsics.Vector128`1[float]>
 ;* V03 loc1         [V03,T01] (  0,  0   )     int  ->  zero-ref   
 ;* V04 loc2         [V04    ] (  0,  0   )   float  ->  zero-ref   
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 16
 
 G_M5341_IG01:
        push     rbp
        sub      rsp, 16
        lea      rbp, [rsp+0x10]
 						;; size=10 bbWeight=1 PerfScore 1.75
 G_M5341_IG02:
-       mov      eax, dword ptr [rbp+0x10]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x10]
        vmovss   dword ptr [rbp-0x10], xmm0
-       mov      eax, dword ptr [rbp+0x14]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x14]
        vmovss   dword ptr [rbp-0x0C], xmm0
-       mov      eax, dword ptr [rbp+0x18]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x18]
        vmovss   dword ptr [rbp-0x08], xmm0
-       mov      eax, dword ptr [rbp+0x1C]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x1C]
        vmovss   dword ptr [rbp-0x04], xmm0
        vmovaps  xmm0, xmmword ptr [rbp-0x10]
        vmovups  xmmword ptr [rdi], xmm0
        mov      rax, rdi
-						;; size=96 bbWeight=1 PerfScore 54.58
+						;; size=76 bbWeight=1 PerfScore 42.58
 G_M5341_IG03:
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=1 PerfScore 1.75
 
-; Total bytes of code 112, prolog size 10, PerfScore 58.08, instruction count 29, allocated bytes for code 112 (MethodHash=e8c5eb22) for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
+; Total bytes of code 92, prolog size 10, PerfScore 46.08, instruction count 21, allocated bytes for code 92 (MethodHash=e8c5eb22) for method System.Runtime.Intrinsics.Vector128:<ConvertToSingle>g__SoftwareFallback|39_0(System.Runtime.Intrinsics.Vector128`1[uint]):System.Runtime.Intrinsics.Vector128`1[float] (FullOpts)
 ; ============================================================
-10 (-14.71 % of base) - System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float]
 ; Assembly listing for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 RetBuf       [V00,T00] (  4,  4   )   byref  ->  rdi         single-def
 ;  V01 arg0         [V01    ] (  2,  2   )  struct ( 8) [rbp+0x10]  do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Runtime.Intrinsics.Vector64`1[uint]>
 ;  V02 loc0         [V02    ] (  3,  3   )  struct ( 8) [rbp-0x08]  do-not-enreg[XS] addr-exposed ld-addr-op <System.Runtime.Intrinsics.Vector64`1[float]>
 ;* V03 loc1         [V03,T01] (  0,  0   )     int  ->  zero-ref   
 ;* V04 loc2         [V04    ] (  0,  0   )   float  ->  zero-ref   
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V06 tmp1         [V06    ] (  2,  2   )    long  ->  [rbp+0x10]  do-not-enreg[X] addr-exposed single-def "field V01._00 (fldOffset=0x0)" P-DEP
 ;  V07 tmp2         [V07    ] (  3,  3   )    long  ->  [rbp-0x08]  do-not-enreg[X] addr-exposed "field V02._00 (fldOffset=0x0)" P-DEP
 ;
 ; Lcl frame size = 16
 
 G_M48091_IG01:
        push     rbp
        sub      rsp, 16
        lea      rbp, [rsp+0x10]
 						;; size=10 bbWeight=1 PerfScore 1.75
 G_M48091_IG02:
-       mov      eax, dword ptr [rbp+0x10]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x10]
        vmovss   dword ptr [rbp-0x08], xmm0
-       mov      eax, dword ptr [rbp+0x14]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, dword ptr [rbp+0x14]
        vmovss   dword ptr [rbp-0x04], xmm0
        mov      rax, qword ptr [rbp-0x08]
        mov      qword ptr [rdi], rax
        mov      rax, rdi
-						;; size=52 bbWeight=1 PerfScore 26.92
+						;; size=42 bbWeight=1 PerfScore 20.92
 G_M48091_IG03:
        add      rsp, 16
        pop      rbp
        ret      
 						;; size=6 bbWeight=1 PerfScore 1.75
 
-; Total bytes of code 68, prolog size 10, PerfScore 30.42, instruction count 19, allocated bytes for code 68 (MethodHash=d2584424) for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
+; Total bytes of code 58, prolog size 10, PerfScore 24.42, instruction count 15, allocated bytes for code 58 (MethodHash=d2584424) for method System.Runtime.Intrinsics.Vector64:ConvertToSingle(System.Runtime.Intrinsics.Vector64`1[uint]):System.Runtime.Intrinsics.Vector64`1[float] (FullOpts)
 ; ============================================================
-5 (-31.25 % of base) - System.Convert:ToSingle(uint):float
 ; Assembly listing for method System.Convert:ToSingle(uint):float (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )     int  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M31056_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M31056_IG02:
-       mov      eax, edi
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
-						;; size=15 bbWeight=1 PerfScore 10.58
+       vcvtusi2ss xmm0, edi
+						;; size=10 bbWeight=1 PerfScore 6.33
 G_M31056_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 16, prolog size 0, PerfScore 11.58, instruction count 5, allocated bytes for code 16 (MethodHash=95e186af) for method System.Convert:ToSingle(uint):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=95e186af) for method System.Convert:ToSingle(uint):float (FullOpts)
 ; ============================================================
-5 (-17.86 % of base) - System.Half:op_Explicit(uint):System.Half
 ; Assembly listing for method System.Half:op_Explicit(uint):System.Half (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; fully interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )     int  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M14955_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M14955_IG02:
-       mov      eax, edi
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
+       vcvtusi2ss xmm0, edi
        mov      rax, 0xD1FFAB1E      ; code for System.Half:op_Explicit(float):System.Half
-						;; size=25 bbWeight=1 PerfScore 10.83
+						;; size=20 bbWeight=1 PerfScore 6.58
 G_M14955_IG03:
        tail.jmp [rax]System.Half:op_Explicit(float):System.Half
 						;; size=3 bbWeight=1 PerfScore 2.00
 
-; Total bytes of code 28, prolog size 0, PerfScore 12.83, instruction count 6, allocated bytes for code 28 (MethodHash=1abbc594) for method System.Half:op_Explicit(uint):System.Half (FullOpts)
+; Total bytes of code 23, prolog size 0, PerfScore 8.58, instruction count 4, allocated bytes for code 23 (MethodHash=1abbc594) for method System.Half:op_Explicit(uint):System.Half (FullOpts)
 ; ============================================================
-5 (-31.25 % of base) - System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float
 ; Assembly listing for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )     int  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M48117_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M48117_IG02:
-       mov      eax, edi
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
-						;; size=15 bbWeight=1 PerfScore 10.58
+       vcvtusi2ss xmm0, edi
+						;; size=10 bbWeight=1 PerfScore 6.33
 G_M48117_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 16, prolog size 0, PerfScore 11.58, instruction count 5, allocated bytes for code 16 (MethodHash=11b2440a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 7.33, instruction count 3, allocated bytes for code 11 (MethodHash=11b2440a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt32ToSingle:Invoke(uint):float (FullOpts)
 ; ============================================================
-5 (-31.25 % of base) - System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this
 ; Assembly listing for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  3,  3   )   byref  ->  rdi         this single-def
 ;* V01 arg1         [V01    ] (  0,  0   )     ref  ->  zero-ref    class-hnd single-def <System.IFormatProvider>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V03 tmp1         [V03    ] (  0,  0   )     int  ->  zero-ref    "Inlining Arg"
 ;
 ; Lcl frame size = 0
 
 G_M25283_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M25283_IG02:
-       mov      eax, dword ptr [rdi]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-       vcvtsd2ss xmm0, xmm0, xmm0
-						;; size=15 bbWeight=1 PerfScore 12.33
+       vcvtusi2ss xmm0, dword ptr [rdi]
+						;; size=10 bbWeight=1 PerfScore 9.33
 G_M25283_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 16, prolog size 0, PerfScore 13.33, instruction count 5, allocated bytes for code 16 (MethodHash=73619d3c) for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 10.33, instruction count 3, allocated bytes for code 11 (MethodHash=73619d3c) for method System.UInt32:System.IConvertible.ToSingle(System.IFormatProvider):float:this (FullOpts)
 ; ============================================================
-4 (-1.20 % of base) - System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal
 ; Assembly listing for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 4 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 RetBuf       [V00,T00] (  5,  4   )   byref  ->  rbx         single-def
 ;  V01 arg0         [V01    ] ( 12,  6.50)  struct (24) [rbp+0x10]  do-not-enreg[XSF] addr-exposed ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
 ;  V02 arg1         [V02,T04] (  3,  2.50)  double  ->  [rbp-0x20]  single-def
 ;  V03 loc0         [V03,T03] (  2,  1   )     int  ->  r14        
 ;* V04 loc1         [V04    ] (  0,  0   )  double  ->  zero-ref   
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V06 tmp1         [V06    ] (  0,  0   )  struct (24) zero-ref    do-not-enreg[S] "folding static readonly field empty struct" <System.Data.SqlTypes.SqlDecimal>
 ;* V07 tmp2         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V08 tmp3         [V08,T08] (  3,  1.50)  double  ->  mm1         "Inline return value spill temp"
 ;  V09 tmp4         [V09,T05] (  5,  2.50)  double  ->  [rbp-0x28]  "Inline stloc first use temp"
 ;* V10 tmp5         [V10    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;* V11 tmp6         [V11    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V12 tmp7         [V12,T09] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V13 tmp8         [V13,T07] (  2,  2   )  double  ->  mm0         "argument with side effect"
 ;  V14 cse0         [V14,T02] (  3,  1.50)     int  ->  rax         "CSE #03: moderate"
 ;  V15 cse1         [V15,T01] (  3,  2.50)     int  ->  r15         "CSE #04: aggressive"
 ;  V16 cse2         [V16,T06] (  4,  2   )  double  ->  mm2         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 24
 
 G_M16518_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x30]
        vmovsd   qword ptr [rbp-0x20], xmm0
        mov      rbx, rdi
 						;; size=23 bbWeight=1 PerfScore 6.00
 G_M16518_IG02:
        movzx    r15, byte  ptr [rbp+0x10]
        test     r15b, 1
        je       G_M16518_IG06
 						;; size=15 bbWeight=1 PerfScore 2.25
 G_M16518_IG03:
        movzx    rax, byte  ptr [rbp+0x13]
        mov      r14d, eax
-       mov      ecx, dword ptr [rbp+0x20]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rcx
+       vcvtusi2sd xmm0, dword ptr [rbp+0x20]
        vmovsd   xmm2, qword ptr [reloc @RWD00]
        vmulsd   xmm0, xmm0, xmm2
-       mov      ecx, dword ptr [rbp+0x1C]
        vxorps   xmm3, xmm3, xmm3
-       vcvtsi2sd xmm3, xmm3, rcx
+       vcvtusi2sd xmm3, dword ptr [rbp+0x1C]
        vaddsd   xmm0, xmm0, xmm3
        vmulsd   xmm0, xmm0, xmm2
-       mov      ecx, dword ptr [rbp+0x18]
        vxorps   xmm3, xmm3, xmm3
-       vcvtsi2sd xmm3, xmm3, rcx
+       vcvtusi2sd xmm3, dword ptr [rbp+0x18]
        vaddsd   xmm0, xmm0, xmm3
        vmulsd   xmm0, xmm0, xmm2
-       mov      ecx, dword ptr [rbp+0x14]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rcx
+       vcvtusi2sd xmm2, dword ptr [rbp+0x14]
        vaddsd   xmm0, xmm0, xmm2
        vmovsd   qword ptr [rbp-0x28], xmm0
        vxorps   xmm1, xmm1, xmm1
        vcvtsi2sd xmm1, xmm1, eax
        vmovsd   xmm0, qword ptr [reloc @RWD08]
        call     System.Math:Pow(double,double):double
        vmovsd   xmm1, qword ptr [rbp-0x28]
        vdivsd   xmm1, xmm1, xmm0
        test     r15b, 2
        jne      SHORT G_M16518_IG04
        jmp      SHORT G_M16518_IG05
-						;; size=130 bbWeight=0.50 PerfScore 40.58
+						;; size=126 bbWeight=0.50 PerfScore 38.58
 G_M16518_IG04:
        vxorps   xmm1, xmm1, xmmword ptr [reloc @RWD16]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M16518_IG05:
        vmovaps  xmm0, xmm1
        vmovsd   xmm1, qword ptr [rbp-0x20]
        call     System.Math:Pow(double,double):double
        lea      rdi, [rbp+0x10]
        mov      rax, 0xD1FFAB1E      ; code for System.Data.SqlTypes.SqlDecimal:.ctor(double):this
        call     [rax]System.Data.SqlTypes.SqlDecimal:.ctor(double):this
        test     byte  ptr [rbp+0x10], 1
        je       SHORT G_M16518_IG09
        movzx    rsi, byte  ptr [rbp+0x13]
        sub      r14d, esi
        mov      esi, r14d
        lea      rdi, [rbp+0x10]
        mov      edx, 1
        mov      rax, 0xD1FFAB1E      ; code for System.Data.SqlTypes.SqlDecimal:AdjustScale(int,ubyte):this
        call     [rax]System.Data.SqlTypes.SqlDecimal:AdjustScale(int,ubyte):this
        mov      byte  ptr [rbp+0x12], 38
        vmovdqu  xmm0, xmmword ptr [rbp+0x10]
        vmovdqu  xmmword ptr [rbx], xmm0
        mov      edi, dword ptr [rbp+0x20]
        mov      dword ptr [rbx+0x10], edi
        jmp      SHORT G_M16518_IG07
 						;; size=89 bbWeight=0.50 PerfScore 13.25
 G_M16518_IG06:
        vxorps   xmm0, xmm0, xmm0
        vmovdqu  xmmword ptr [rbx], xmm0
        vmovdqu  xmmword ptr [rbx+0x04], xmm0
 						;; size=13 bbWeight=0.50 PerfScore 2.17
 G_M16518_IG07:
        mov      rax, rbx
 						;; size=3 bbWeight=1 PerfScore 0.25
 G_M16518_IG08:
        add      rsp, 24
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
 G_M16518_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlNullValueException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Data.SqlTypes.SqlNullValueException:.ctor():this
        call     [rax]System.Data.SqlTypes.SqlNullValueException:.ctor():this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=42 bbWeight=0 PerfScore 0.00
 RWD00  	dq	41F0000000000000h	; 4.2949673e+09
 RWD08  	dq	4024000000000000h	;           10
 RWD16  	dq	8000000000000000h, 8000000000000000h
 
 
-; Total bytes of code 334, prolog size 15, PerfScore 68.75, instruction count 83, allocated bytes for code 334 (MethodHash=604fbf79) for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
+; Total bytes of code 330, prolog size 15, PerfScore 66.75, instruction count 79, allocated bytes for code 330 (MethodHash=604fbf79) for method System.Data.SqlTypes.SqlDecimal:Power(System.Data.SqlTypes.SqlDecimal,double):System.Data.SqlTypes.SqlDecimal (FullOpts)
 ; ============================================================
-4 (-1.67 % of base) - System.Data.SqlTypes.SqlDecimal:ToDouble():double:this
 ; Assembly listing for method System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  9,  9   )   byref  ->  rbx         this single-def
 ;  V01 loc0         [V01,T01] (  5,  4   )  double  ->  [rbp-0x10] 
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V03 tmp1         [V03,T03] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V04 cse0         [V04,T02] (  4,  4   )  double  ->  mm0         "CSE #01: aggressive"
 ;  TEMP_01                                  double  ->  [rbp-0x18]
 ;
 ; Lcl frame size = 24
 
 G_M37767_IG01:
        push     rbp
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
 						;; size=14 bbWeight=1 PerfScore 3.00
 G_M37767_IG02:
        test     byte  ptr [rbx], 1
        je       G_M37767_IG07
-       mov      eax, dword ptr [rbx+0x10]
        vxorps   xmm1, xmm1, xmm1
-       vcvtsi2sd xmm1, xmm1, rax
+       vcvtusi2sd xmm1, dword ptr [rbx+0x10]
        vmovsd   xmm0, qword ptr [reloc @RWD00]
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbx+0x0C]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbx+0x0C]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbx+0x08]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbx+0x08]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbx+0x04]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
+       vcvtusi2sd xmm0, dword ptr [rbx+0x04]
        vaddsd   xmm2, xmm1, xmm0
        vmovsd   qword ptr [rbp-0x18], xmm2
        movzx    rax, byte  ptr [rbx+0x03]
        vxorps   xmm1, xmm1, xmm1
        vcvtsi2sd xmm1, xmm1, eax
        vmovsd   xmm0, qword ptr [reloc @RWD08]
        call     System.Math:Pow(double,double):double
        vmovsd   xmm2, qword ptr [rbp-0x18]
        vdivsd   xmm1, xmm2, xmm0
        vmovsd   qword ptr [rbp-0x10], xmm1
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Data.SqlTypes.SqlDecimal:get_IsPositive():ubyte:this
        call     [rax]System.Data.SqlTypes.SqlDecimal:get_IsPositive():ubyte:this
        test     eax, eax
        je       SHORT G_M37767_IG05
-						;; size=152 bbWeight=1 PerfScore 92.42
+						;; size=148 bbWeight=1 PerfScore 88.42
 G_M37767_IG03:
        vmovsd   xmm0, qword ptr [rbp-0x10]
 						;; size=5 bbWeight=0.50 PerfScore 1.50
 G_M37767_IG04:
        add      rsp, 24
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M37767_IG05:
        vmovsd   xmm0, qword ptr [rbp-0x10]
        vxorps   xmm0, xmm0, xmmword ptr [reloc @RWD16]
 						;; size=13 bbWeight=0.50 PerfScore 2.50
 G_M37767_IG06:
        add      rsp, 24
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M37767_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.Data.SqlTypes.SqlNullValueException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.Data.SqlTypes.SqlNullValueException:.ctor():this
        call     [rax]System.Data.SqlTypes.SqlNullValueException:.ctor():this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=42 bbWeight=0 PerfScore 0.00
 RWD00  	dq	41F0000000000000h	; 4.2949673e+09
 RWD08  	dq	4024000000000000h	;           10
 RWD16  	dq	8000000000000000h, 8000000000000000h
 
 
-; Total bytes of code 240, prolog size 11, PerfScore 101.67, instruction count 60, allocated bytes for code 240 (MethodHash=563b6c78) for method System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
+; Total bytes of code 236, prolog size 11, PerfScore 97.67, instruction count 56, allocated bytes for code 236 (MethodHash=563b6c78) for method System.Data.SqlTypes.SqlDecimal:ToDouble():double:this (FullOpts)
 ; ============================================================
-4 (-1.42 % of base) - System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble
 ; Assembly listing for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  6,  3.50)  struct (24) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-ret "folding static readonly field empty struct" <System.Data.SqlTypes.SqlDouble>
 ;* V03 tmp2         [V03    ] (  0,  0   )  struct (16) zero-ref    multireg-ret ld-addr-op "NewObj constructor temp" <System.Data.SqlTypes.SqlDouble>
 ;  V04 tmp3         [V04,T05] (  4,  2   )  double  ->  mm0         "Inline return value spill temp"
 ;  V05 tmp4         [V05,T04] (  5,  2.50)  double  ->  [rbp-0x10]  "Inline stloc first use temp"
 ;* V06 tmp5         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V08 tmp7         [V08,T09] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
 ;  V09 tmp8         [V09,T02] (  2,  1   )   ubyte  ->  rax         "field V02.m_fNotNull (fldOffset=0x0)" P-INDEP
 ;  V10 tmp9         [V10,T07] (  2,  1   )  double  ->  mm0         "field V02.m_value (fldOffset=0x8)" P-INDEP
 ;  V11 tmp10        [V11,T03] (  2,  1   )   ubyte  ->  rax         "field V03.m_fNotNull (fldOffset=0x0)" P-INDEP
 ;  V12 tmp11        [V12,T08] (  2,  1   )  double  ->  mm0         "field V03.m_value (fldOffset=0x8)" P-INDEP
 ;  V13 tmp12        [V13,T01] (  3,  2.50)   ubyte  ->  rbx         "V00.[000..001)"
 ;  V14 tmp13        [V14,T10] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V15 cse0         [V15,T06] (  4,  2   )  double  ->  mm0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M3439_IG01:
        push     rbp
        push     rbx
        push     rax
        lea      rbp, [rsp+0x10]
 						;; size=8 bbWeight=1 PerfScore 3.50
 G_M3439_IG02:
        movzx    rbx, byte  ptr [rbp+0x10]
        test     bl, 1
        jne      SHORT G_M3439_IG05
 						;; size=9 bbWeight=1 PerfScore 2.25
 G_M3439_IG03:
        xor      eax, eax
        vxorps   xmm0, xmm0, xmm0
 						;; size=6 bbWeight=0.50 PerfScore 0.29
 G_M3439_IG04:
        add      rsp, 8
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M3439_IG05:
-       mov      eax, dword ptr [rbp+0x20]
        vxorps   xmm1, xmm1, xmm1
-       vcvtsi2sd xmm1, xmm1, rax
+       vcvtusi2sd xmm1, dword ptr [rbp+0x20]
        vmovsd   xmm0, qword ptr [reloc @RWD00]
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x1C]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbp+0x1C]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x18]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbp+0x18]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x14]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
+       vcvtusi2sd xmm0, dword ptr [rbp+0x14]
        vaddsd   xmm0, xmm1, xmm0
        vmovsd   qword ptr [rbp-0x10], xmm0
        movzx    rax, byte  ptr [rbp+0x13]
        vxorps   xmm1, xmm1, xmm1
        vcvtsi2sd xmm1, xmm1, eax
        vmovsd   xmm0, qword ptr [reloc @RWD08]
        call     System.Math:Pow(double,double):double
        vmovsd   xmm1, qword ptr [rbp-0x10]
        vdivsd   xmm1, xmm1, xmm0
        test     bl, 2
        jne      SHORT G_M3439_IG06
        vmovaps  xmm0, xmm1
        jmp      SHORT G_M3439_IG07
-						;; size=130 bbWeight=0.50 PerfScore 40.58
+						;; size=126 bbWeight=0.50 PerfScore 38.58
 G_M3439_IG06:
        vxorps   xmm0, xmm1, xmmword ptr [reloc @RWD16]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M3439_IG07:
        vmovd    rax, xmm0
        mov      rdi, 0xD1FFAB1E
        andn     rax, rax, rdi
        je       SHORT G_M3439_IG09
        mov      eax, 1
 						;; size=27 bbWeight=0.50 PerfScore 2.00
 G_M3439_IG08:
        add      rsp, 8
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M3439_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.OverflowException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x5E26
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.OverflowException:.ctor(System.String):this
        call     [rax]System.OverflowException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=80 bbWeight=0 PerfScore 0.00
 RWD00  	dq	41F0000000000000h	; 4.2949673e+09
 RWD08  	dq	4024000000000000h	;           10
 RWD16  	dq	8000000000000000h, 8000000000000000h
 
 
-; Total bytes of code 282, prolog size 8, PerfScore 51.88, instruction count 70, allocated bytes for code 282 (MethodHash=7f47f290) for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
+; Total bytes of code 278, prolog size 8, PerfScore 49.88, instruction count 66, allocated bytes for code 278 (MethodHash=7f47f290) for method System.Data.SqlTypes.SqlDouble:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlDouble (FullOpts)
 ; ============================================================
-4 (-1.41 % of base) - System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle
 ; Assembly listing for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 7 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  6,  3.50)  struct (24) [rbp+0x10]  do-not-enreg[SF] ld-addr-op single-def <System.Data.SqlTypes.SqlDecimal>
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V02 tmp1         [V02    ] (  0,  0   )  struct ( 8) zero-ref    do-not-enreg[S] "folding static readonly field empty struct" <System.Data.SqlTypes.SqlSingle>
 ;  V03 tmp2         [V03    ] (  3,  3   )  struct ( 8) [rbp-0x10]  do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Data.SqlTypes.SqlSingle>
 ;  V04 tmp3         [V04,T06] (  3,  1.50)  double  ->  mm1         "Inline return value spill temp"
 ;  V05 tmp4         [V05,T04] (  5,  2.50)  double  ->  [rbp-0x18]  "Inline stloc first use temp"
 ;* V06 tmp5         [V06    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;* V07 tmp6         [V07    ] (  0,  0   )     ref  ->  zero-ref    class-hnd exact single-def "NewObj constructor temp" <System.Data.SqlTypes.SqlNullValueException>
 ;  V08 tmp7         [V08,T03] (  3,  3   )   float  ->  mm0         "Inlining Arg"
 ;  V09 tmp8         [V09,T08] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
 ;* V10 tmp9         [V10    ] (  0,  0   )   ubyte  ->  zero-ref    do-not-enreg[] "field V02._fNotNull (fldOffset=0x0)" P-DEP
 ;* V11 tmp10        [V11    ] (  0,  0   )   float  ->  zero-ref    do-not-enreg[] "field V02._value (fldOffset=0x4)" P-DEP
 ;  V12 tmp11        [V12,T02] (  2,  1.50)   ubyte  ->  [rbp-0x10]  do-not-enreg[] "field V03._fNotNull (fldOffset=0x0)" P-DEP
 ;  V13 tmp12        [V13,T07] (  2,  1.50)   float  ->  [rbp-0x0C]  do-not-enreg[] "field V03._value (fldOffset=0x4)" P-DEP
 ;  V14 tmp13        [V14,T01] (  3,  2.50)   ubyte  ->  rbx         "V00.[000..001)"
 ;  V15 tmp14        [V15,T09] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V16 cse0         [V16,T05] (  4,  2   )  double  ->  mm0         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 24
 
 G_M19759_IG01:
        push     rbp
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x20]
 						;; size=11 bbWeight=1 PerfScore 2.75
 G_M19759_IG02:
        movzx    rbx, byte  ptr [rbp+0x10]
        test     bl, 1
        jne      SHORT G_M19759_IG05
 						;; size=9 bbWeight=1 PerfScore 2.25
 G_M19759_IG03:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M19759_IG04:
        add      rsp, 24
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M19759_IG05:
-       mov      eax, dword ptr [rbp+0x20]
        vxorps   xmm1, xmm1, xmm1
-       vcvtsi2sd xmm1, xmm1, rax
+       vcvtusi2sd xmm1, dword ptr [rbp+0x20]
        vmovsd   xmm0, qword ptr [reloc @RWD00]
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x1C]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbp+0x1C]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x18]
        vxorps   xmm2, xmm2, xmm2
-       vcvtsi2sd xmm2, xmm2, rax
+       vcvtusi2sd xmm2, dword ptr [rbp+0x18]
        vaddsd   xmm1, xmm1, xmm2
        vmulsd   xmm1, xmm1, xmm0
-       mov      eax, dword ptr [rbp+0x14]
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
+       vcvtusi2sd xmm0, dword ptr [rbp+0x14]
        vaddsd   xmm1, xmm1, xmm0
        vmovsd   qword ptr [rbp-0x18], xmm1
        movzx    rax, byte  ptr [rbp+0x13]
        vxorps   xmm1, xmm1, xmm1
        vcvtsi2sd xmm1, xmm1, eax
        vmovsd   xmm0, qword ptr [reloc @RWD08]
        call     System.Math:Pow(double,double):double
        vmovsd   xmm1, qword ptr [rbp-0x18]
        vdivsd   xmm1, xmm1, xmm0
        test     bl, 2
        jne      SHORT G_M19759_IG06
        jmp      SHORT G_M19759_IG07
-						;; size=126 bbWeight=0.50 PerfScore 40.46
+						;; size=122 bbWeight=0.50 PerfScore 38.46
 G_M19759_IG06:
        vxorps   xmm1, xmm1, xmmword ptr [reloc @RWD16]
 						;; size=8 bbWeight=0.50 PerfScore 1.00
 G_M19759_IG07:
        vcvtsd2ss xmm0, xmm0, xmm1
        vmovd    eax, xmm0
        mov      edi, 0xD1FFAB1E
        andn     eax, eax, edi
        je       SHORT G_M19759_IG09
        mov      byte  ptr [rbp-0x10], 1
        vmovss   dword ptr [rbp-0x0C], xmm0
        mov      rax, qword ptr [rbp-0x10]
 						;; size=33 bbWeight=0.50 PerfScore 5.38
 G_M19759_IG08:
        add      rsp, 24
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=0.50 PerfScore 1.12
 G_M19759_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.OverflowException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x5E26
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      rdi, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:GetResourceString(System.String):System.String
        call     [rax]System.SR:GetResourceString(System.String):System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.OverflowException:.ctor(System.String):this
        call     [rax]System.OverflowException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=80 bbWeight=0 PerfScore 0.00
 RWD00  	dq	41F0000000000000h	; 4.2949673e+09
 RWD08  	dq	4024000000000000h	;           10
 RWD16  	dq	8000000000000000h, 8000000000000000h
 
 
-; Total bytes of code 283, prolog size 11, PerfScore 54.21, instruction count 71, allocated bytes for code 283 (MethodHash=f549b2d0) for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
+; Total bytes of code 279, prolog size 11, PerfScore 52.21, instruction count 67, allocated bytes for code 279 (MethodHash=f549b2d0) for method System.Data.SqlTypes.SqlSingle:op_Implicit(System.Data.SqlTypes.SqlDecimal):System.Data.SqlTypes.SqlSingle (FullOpts)
 ; ============================================================
-1 (-8.33 % of base) - System.Convert:ToDouble(uint):double
 ; Assembly listing for method System.Convert:ToDouble(uint):double (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rsp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  3,  3   )     int  ->  rdi         single-def
 ;# V01 OutArgs      [V01    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M52538_IG01:
 						;; size=0 bbWeight=1 PerfScore 0.00
 G_M52538_IG02:
-       mov      eax, edi
        vxorps   xmm0, xmm0, xmm0
-       vcvtsi2sd xmm0, xmm0, rax
-						;; size=11 bbWeight=1 PerfScore 6.58
+       vcvtusi2sd xmm0, edi
+						;; size=10 bbWeight=1 PerfScore 4.33
 G_M52538_IG03:
        ret      
 						;; size=1 bbWeight=1 PerfScore 1.00
 
-; Total bytes of code 12, prolog size 0, PerfScore 7.58, instruction count 4, allocated bytes for code 12 (MethodHash=656332c5) for method System.Convert:ToDouble(uint):double (FullOpts)
+; Total bytes of code 11, prolog size 0, PerfScore 5.33, instruction count 3, allocated bytes for code 11 (MethodHash=656332c5) for method System.Convert:ToDouble(uint):double (FullOpts)
 ; ============================================================
-1 (-0.63 % of base) - System.Convert:ToUInt32(double):uint
 ; Assembly listing for method System.Convert:ToUInt32(double):uint (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T01] (  7,  7   )  double  ->  mm0         single-def
 ;  V01 loc0         [V01,T00] (  6,  4.50)     int  ->  rax        
 ;  V02 loc1         [V02,T02] (  3,  2.50)  double  ->  mm0        
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V04 tmp1         [V04,T04] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.OverflowException>
 ;  V05 tmp2         [V05,T05] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V06 cse0         [V06,T03] (  3,  2.50)  double  ->  mm1         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M31080_IG01:
        push     rbp
        push     rbx
        push     rax
        lea      rbp, [rsp+0x10]
 						;; size=8 bbWeight=1 PerfScore 3.50
 G_M31080_IG02:
        vucomisd xmm0, qword ptr [reloc @RWD00]
        jb       SHORT G_M31080_IG06
        vmovsd   xmm1, qword ptr [reloc @RWD08]
        vucomisd xmm1, xmm0
        jbe      SHORT G_M31080_IG06
        vmovaps  xmm1, xmm0
        vfixupimmsd xmm1, xmm0, qword ptr [reloc @RWD16], 0
        vcvttsd2usi eax, xmm1
-       mov      edi, eax
        vxorps   xmm1, xmm1, xmm1
-       vcvtsi2sd xmm1, xmm1, rdi
+       vcvtusi2sd xmm1, eax
        vsubsd   xmm0, xmm0, xmm1
        vmovsd   xmm1, qword ptr [reloc @RWD32]
        vucomisd xmm0, xmm1
        ja       SHORT G_M31080_IG04
-						;; size=74 bbWeight=1 PerfScore 37.83
+						;; size=73 bbWeight=1 PerfScore 35.58
 G_M31080_IG03:
        vucomisd xmm0, xmm1
        jp       SHORT G_M31080_IG05
        jne      SHORT G_M31080_IG05
        test     al, 1
        je       SHORT G_M31080_IG05
 						;; size=12 bbWeight=0.50 PerfScore 2.62
 G_M31080_IG04:
        inc      eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M31080_IG05:
        add      rsp, 8
        pop      rbx
        pop      rbp
        ret      
 						;; size=7 bbWeight=1 PerfScore 2.25
 G_M31080_IG06:
        mov      rdi, 0xD1FFAB1E      ; System.OverflowException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_Overflow_UInt32():System.String
        call     [rax]System.SR:get_Overflow_UInt32():System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.OverflowException:.ctor(System.String):this
        call     [rax]System.OverflowException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=57 bbWeight=0 PerfScore 0.00
 RWD00  	dq	BFE0000000000000h	;         -0.5
 RWD08  	dq	41EFFFFFFFF00000h	; 4.2949673e+09
 RWD16  	dq	0000000008080088h, 0000000000000000h
 RWD32  	dq	3FE0000000000000h	;          0.5
 
 
-; Total bytes of code 160, prolog size 8, PerfScore 46.33, instruction count 41, allocated bytes for code 160 (MethodHash=ed1f8697) for method System.Convert:ToUInt32(double):uint (FullOpts)
+; Total bytes of code 159, prolog size 8, PerfScore 44.08, instruction count 40, allocated bytes for code 159 (MethodHash=ed1f8697) for method System.Convert:ToUInt32(double):uint (FullOpts)
 ; ============================================================

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

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

@MihuBot
Copy link
Owner Author

MihuBot commented Jan 19, 2025

@saucecontrol

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant