mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-03-11 09:01:08 +00:00
104 lines
2.7 KiB
C#
104 lines
2.7 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace ARMeilleure.Instructions
|
|
{
|
|
static partial class SoftFallback
|
|
{
|
|
[UnmanagedCallersOnly]
|
|
public static int SatF32ToS32(float value)
|
|
{
|
|
if (float.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= int.MaxValue ? int.MaxValue :
|
|
value <= int.MinValue ? int.MinValue : (int)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static long SatF32ToS64(float value)
|
|
{
|
|
if (float.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= long.MaxValue ? long.MaxValue :
|
|
value <= long.MinValue ? long.MinValue : (long)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static uint SatF32ToU32(float value)
|
|
{
|
|
if (float.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= uint.MaxValue ? uint.MaxValue :
|
|
value <= uint.MinValue ? uint.MinValue : (uint)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static ulong SatF32ToU64(float value)
|
|
{
|
|
if (float.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= ulong.MaxValue ? ulong.MaxValue :
|
|
value <= ulong.MinValue ? ulong.MinValue : (ulong)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static int SatF64ToS32(double value)
|
|
{
|
|
if (double.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= int.MaxValue ? int.MaxValue :
|
|
value <= int.MinValue ? int.MinValue : (int)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static long SatF64ToS64(double value)
|
|
{
|
|
if (double.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= long.MaxValue ? long.MaxValue :
|
|
value <= long.MinValue ? long.MinValue : (long)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static uint SatF64ToU32(double value)
|
|
{
|
|
if (double.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= uint.MaxValue ? uint.MaxValue :
|
|
value <= uint.MinValue ? uint.MinValue : (uint)value;
|
|
}
|
|
|
|
[UnmanagedCallersOnly]
|
|
public static ulong SatF64ToU64(double value)
|
|
{
|
|
if (double.IsNaN(value))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return value >= ulong.MaxValue ? ulong.MaxValue :
|
|
value <= ulong.MinValue ? ulong.MinValue : (ulong)value;
|
|
}
|
|
}
|
|
}
|