fix fmin/fmax PR
This commit is contained in:
parent
8601db307d
commit
0bf364585c
2 changed files with 40 additions and 49 deletions
|
@ -217,11 +217,11 @@ namespace ChocolArm64.Instruction
|
|||
{
|
||||
if (Op.Size == 0)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMaxF));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.MaxF));
|
||||
}
|
||||
else if (Op.Size == 1)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMax));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Max));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -238,11 +238,11 @@ namespace ChocolArm64.Instruction
|
|||
{
|
||||
if (Op.Size == 0)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMaxF));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.MaxF));
|
||||
}
|
||||
else if (Op.Size == 1)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMax));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Max));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -258,11 +258,11 @@ namespace ChocolArm64.Instruction
|
|||
{
|
||||
if (Op.Size == 0)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMinF));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.MinF));
|
||||
}
|
||||
else if (Op.Size == 1)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMin));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Min));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -279,11 +279,11 @@ namespace ChocolArm64.Instruction
|
|||
{
|
||||
if (Op.Size == 2)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMinF));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.MinF));
|
||||
}
|
||||
else if (Op.Size == 3)
|
||||
{
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.CustomMin));
|
||||
ASoftFallback.EmitCall(Context, nameof(ASoftFallback.Min));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -256,104 +256,95 @@ namespace ChocolArm64.Instruction
|
|||
((Value >> 6) & 1) + (Value >> 7);
|
||||
}
|
||||
|
||||
public static float CustomMaxF(float val1, float val2)
|
||||
public static float MaxF(float val1, float val2)
|
||||
{
|
||||
if(val1 == 0.0 && val2 == 0.0)
|
||||
if (val1 == 0.0 && val2 == 0.0)
|
||||
{
|
||||
if (BitConverter.SingleToInt32Bits(val1) < 0 && BitConverter.SingleToInt32Bits(val2) < 0)
|
||||
return -0.0f;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[3] == 0x80 && BitConverter.GetBytes(val2)[3] == 0x80)
|
||||
return (float)-0.0;
|
||||
if (BitConverter.SingleToInt32Bits(val1) < 0 || BitConverter.SingleToInt32Bits(val2) < 0)
|
||||
return 0.0f;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[3] == 0x80 || BitConverter.GetBytes(val2)[3] == 0x80)
|
||||
return (float)0.0;
|
||||
|
||||
return (float)0.0;
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if(val1 > val2)
|
||||
if (val1 > val2)
|
||||
return val1;
|
||||
|
||||
if(Single.IsNaN(val1))
|
||||
if (float.IsNaN(val1))
|
||||
return val1;
|
||||
|
||||
return val2;
|
||||
}
|
||||
|
||||
public static double CustomMax(double val1, double val2)
|
||||
public static double Max(double val1, double val2)
|
||||
{
|
||||
if(val1 == 0.0 && val2 == 0.0)
|
||||
if (val1 == 0.0 && val2 == 0.0)
|
||||
{
|
||||
if(BitConverter.GetBytes(val1)[7] == 0x80 && BitConverter.GetBytes(val2)[7] == 0x80)
|
||||
if (BitConverter.DoubleToInt64Bits(val1) < 0 && BitConverter.DoubleToInt64Bits(val2) < 0)
|
||||
return -0.0;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[7] == 0x80 || BitConverter.GetBytes(val2)[7] == 0x80)
|
||||
if (BitConverter.DoubleToInt64Bits(val1) < 0 || BitConverter.DoubleToInt64Bits(val2) < 0)
|
||||
return 0.0;
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
if(val1 > val2)
|
||||
if (val1 > val2)
|
||||
return val1;
|
||||
|
||||
if(Double.IsNaN(val1))
|
||||
if (double.IsNaN(val1))
|
||||
return val1;
|
||||
|
||||
return val2;
|
||||
}
|
||||
|
||||
public static float CustomMinF(float val1, float val2)
|
||||
public static float MinF(float val1, float val2)
|
||||
{
|
||||
if((val1 == 0.0 && val2 >= 0.0) || (val1 >= 0.0 && val2 == 0.0))
|
||||
if ((val1 == 0.0 && val2 >= 0.0) || (val1 >= 0.0 && val2 == 0.0))
|
||||
{
|
||||
if(BitConverter.GetBytes(val1)[3] == 0x80 || BitConverter.GetBytes(val2)[3] == 0x80)
|
||||
return (float)-0.0;
|
||||
if (BitConverter.SingleToInt32Bits(val1) < 0 || BitConverter.SingleToInt32Bits(val2) < 0)
|
||||
return -0.0f;
|
||||
}
|
||||
|
||||
if(val1 == 0.0 && val2 == 0.0)
|
||||
if (val1 == 0.0 && val2 == 0.0)
|
||||
{
|
||||
if (BitConverter.SingleToInt32Bits(val1) < 0 || BitConverter.SingleToInt32Bits(val2) < 0)
|
||||
return -0.0f;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[3] == 0x80 && BitConverter.GetBytes(val2)[3] == 0x80)
|
||||
return (float)-0.0;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[3] == 0x80 || BitConverter.GetBytes(val2)[3] == 0x80)
|
||||
return (float)-0.0;
|
||||
|
||||
return (float)0.0;
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if(val1 < val2)
|
||||
if (val1 < val2)
|
||||
return val1;
|
||||
|
||||
if(Single.IsNaN(val1))
|
||||
if (float.IsNaN(val1))
|
||||
return val1;
|
||||
|
||||
return val2;
|
||||
}
|
||||
|
||||
public static double CustomMin(double val1, double val2)
|
||||
public static double Min(double val1, double val2)
|
||||
{
|
||||
if((val1 == 0.0 && val2 >= 0.0) || (val1 >= 0.0 && val2 == 0.0))
|
||||
if ((val1 == 0.0 && val2 >= 0.0) || (val1 >= 0.0 && val2 == 0.0))
|
||||
{
|
||||
if(BitConverter.GetBytes(val1)[7] == 0x80 || BitConverter.GetBytes(val2)[7] == 0x80)
|
||||
if (BitConverter.DoubleToInt64Bits(val1) < 0 || BitConverter.DoubleToInt64Bits(val2) < 0)
|
||||
return -0.0;
|
||||
}
|
||||
|
||||
if(val1 == 0.0 && val2 == 0.0)
|
||||
if (val1 == 0.0 && val2 == 0.0)
|
||||
{
|
||||
|
||||
if(BitConverter.GetBytes(val1)[7] == 0x80 && BitConverter.GetBytes(val2)[7] == 0x80)
|
||||
return -0.0;
|
||||
|
||||
if(BitConverter.GetBytes(val1)[7] == 0x80 || BitConverter.GetBytes(val2)[7] == 0x80)
|
||||
if (BitConverter.DoubleToInt64Bits(val1) < 0 || BitConverter.DoubleToInt64Bits(val2) < 0)
|
||||
return -0.0;
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
if(val1 < val2)
|
||||
if (val1 < val2)
|
||||
return val1;
|
||||
|
||||
if(Double.IsNaN(val1))
|
||||
if (double.IsNaN(val1))
|
||||
return val1;
|
||||
|
||||
return val2;
|
||||
|
|
Loading…
Add table
Reference in a new issue