[mono][mini] Fix conversion from r4/r8 to native u (#85964)
authorVlad Brezae <brezaevlad@gmail.com>
Tue, 20 Jun 2023 06:08:35 +0000 (09:08 +0300)
committerGitHub <noreply@github.com>
Tue, 20 Jun 2023 06:08:35 +0000 (09:08 +0300)
commit6352c39f666676b87246f650fe5163068c9c7de6
treec87b58ea85c5651d5c00fd79c88c71bd3a0ed10d
parent0c77cbef02e1713d2b7cd01969b92e552acbdb6b
[mono][mini] Fix conversion from r4/r8 to native u (#85964)

* [mono][mini] Fix conversion from r4/r8 to native u

When converting from float point to unsigned integer, we always do a conversion to u8, then do a simple integer conversion with range checks. The problem is that the first conversion to u8 pushes a STACK_I8 and doing a further conversion to u8 is not actually a nop since it will throw if the result of the previous conversion is negative.

* Enable tests

* [mono][jit] Reuse conv ovf methods used by interpreter

These follow CoreCLR implementation and don't rely on undefined behavior from out of range conversions.
src/libraries/System.Runtime/tests/System/UIntPtrTests.GenericMath.cs
src/mono/mono/mini/jit-icalls.c
src/mono/mono/mini/method-to-ir.c