Change FP enum case

This commit is contained in:
Alex Barney 2018-10-30 11:28:21 -05:00
parent fa3b9e47b0
commit 8c33b43eec
7 changed files with 68 additions and 68 deletions

View file

@ -112,13 +112,13 @@ namespace ChocolArm64.Instruction
if (op > tMaxValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMaxValue;
}
else if (op < tMinValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMinValue;
}
@ -137,13 +137,13 @@ namespace ChocolArm64.Instruction
if (op > (long)tMaxValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMaxValue;
}
else if (op < (long)tMinValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMinValue;
}
@ -161,7 +161,7 @@ namespace ChocolArm64.Instruction
if (op > (ulong)tMaxValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMaxValue;
}
@ -179,7 +179,7 @@ namespace ChocolArm64.Instruction
if (op > tMaxValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return tMaxValue;
}
@ -193,7 +193,7 @@ namespace ChocolArm64.Instruction
{
if (op == long.MinValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return long.MaxValue;
}
@ -209,7 +209,7 @@ namespace ChocolArm64.Instruction
if ((~(op1 ^ op2) & (op1 ^ add)) < 0L)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
if (op1 < 0L)
{
@ -232,7 +232,7 @@ namespace ChocolArm64.Instruction
if ((add < op1) && (add < op2))
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return ulong.MaxValue;
}
@ -248,7 +248,7 @@ namespace ChocolArm64.Instruction
if (((op1 ^ op2) & (op1 ^ sub)) < 0L)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
if (op1 < 0L)
{
@ -271,7 +271,7 @@ namespace ChocolArm64.Instruction
if (op1 < op2)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return ulong.MinValue;
}
@ -292,7 +292,7 @@ namespace ChocolArm64.Instruction
if ((~op2 & add) < 0L)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return long.MaxValue;
}
@ -306,7 +306,7 @@ namespace ChocolArm64.Instruction
// Op1 from (ulong)long.MaxValue + 1UL to ulong.MaxValue
// Op2 from (long)ulong.MinValue to long.MaxValue
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return long.MaxValue;
}
@ -319,7 +319,7 @@ namespace ChocolArm64.Instruction
if (add > (ulong)long.MaxValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return long.MaxValue;
}
@ -341,7 +341,7 @@ namespace ChocolArm64.Instruction
if ((add < (ulong)op1) && (add < op2))
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return ulong.MaxValue;
}
@ -366,7 +366,7 @@ namespace ChocolArm64.Instruction
if (add < (long)ulong.MinValue)
{
state.SetFpsrFlag(Fpsr.Qc);
state.SetFpsrFlag(AFpsr.Qc);
return ulong.MinValue;
}

View file

@ -209,7 +209,7 @@ namespace ChocolArm64.Instruction
if (type == FPType.SNaN || type == FPType.QNaN)
{
if (state.GetFpcrFlag(Fpcr.Dn))
if (state.GetFpcrFlag(AFpcr.Dn))
{
result = FPDefaultNaN();
}
@ -220,7 +220,7 @@ namespace ChocolArm64.Instruction
if (type == FPType.SNaN)
{
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
}
else if (type == FPType.Infinity)
@ -281,7 +281,7 @@ namespace ChocolArm64.Instruction
real = Math.Pow(2d, -14) * ((double)frac16 * Math.Pow(2d, -10));
}
}
else if (exp16 == 0x1Fu && !state.GetFpcrFlag(Fpcr.Ahp))
else if (exp16 == 0x1Fu && !state.GetFpcrFlag(AFpcr.Ahp))
{
if (frac16 == 0u)
{
@ -338,9 +338,9 @@ namespace ChocolArm64.Instruction
exponent++;
}
if (state.GetFpcrFlag(Fpcr.Fz) && exponent < minimumExp)
if (state.GetFpcrFlag(AFpcr.Fz) && exponent < minimumExp)
{
state.SetFpsrFlag(Fpsr.Ufc);
state.SetFpsrFlag(AFpsr.Ufc);
return FPZero(sign);
}
@ -355,9 +355,9 @@ namespace ChocolArm64.Instruction
uint intMant = (uint)Math.Floor(mantissa * Math.Pow(2d, f));
double error = mantissa * Math.Pow(2d, f) - (double)intMant;
if (biasedExp == 0u && (error != 0d || state.GetFpcrFlag(Fpcr.Ufe)))
if (biasedExp == 0u && (error != 0d || state.GetFpcrFlag(AFpcr.Ufe)))
{
FPProcessException(FPExc.Underflow, state);
FPProcessException(AFpExc.Underflow, state);
}
bool overflowToInf;
@ -409,7 +409,7 @@ namespace ChocolArm64.Instruction
{
result = overflowToInf ? FPInfinity(sign) : FPMaxNormal(sign);
FPProcessException(FPExc.Overflow, state);
FPProcessException(AFpExc.Overflow, state);
error = 1d;
}
@ -421,7 +421,7 @@ namespace ChocolArm64.Instruction
if (error != 0d)
{
FPProcessException(FPExc.Inexact, state);
FPProcessException(AFpExc.Inexact, state);
}
return result;
@ -433,7 +433,7 @@ namespace ChocolArm64.Instruction
(int)(((uint)valueBits & 0x8000u) << 16 | 0x7FC00000u | ((uint)valueBits & 0x01FFu) << 13));
}
private static void FPProcessException(FPExc exc, AThreadState state)
private static void FPProcessException(AFpExc exc, AThreadState state)
{
int enable = (int)exc + 8;
@ -456,7 +456,7 @@ namespace ChocolArm64.Instruction
double real = value.FPUnpackCv(out FPType type, out bool sign, state, out uint valueBits);
bool altHp = state.GetFpcrFlag(Fpcr.Ahp);
bool altHp = state.GetFpcrFlag(AFpcr.Ahp);
ushort resultBits;
@ -466,7 +466,7 @@ namespace ChocolArm64.Instruction
{
resultBits = FPZero(sign);
}
else if (state.GetFpcrFlag(Fpcr.Dn))
else if (state.GetFpcrFlag(AFpcr.Dn))
{
resultBits = FPDefaultNaN();
}
@ -477,7 +477,7 @@ namespace ChocolArm64.Instruction
if (type == FPType.SNaN || altHp)
{
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
}
else if (type == FPType.Infinity)
@ -486,7 +486,7 @@ namespace ChocolArm64.Instruction
{
resultBits = (ushort)((sign ? 1u : 0u) << 15 | 0x7FFFu);
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else
{
@ -538,12 +538,12 @@ namespace ChocolArm64.Instruction
if (exp32 == 0u)
{
if (frac32 == 0u || state.GetFpcrFlag(Fpcr.Fz))
if (frac32 == 0u || state.GetFpcrFlag(AFpcr.Fz))
{
type = FPType.Zero;
real = 0d;
if (frac32 != 0u) FPProcessException(FPExc.InputDenorm, state);
if (frac32 != 0u) FPProcessException(AFpExc.InputDenorm, state);
}
else
{
@ -618,9 +618,9 @@ namespace ChocolArm64.Instruction
uint intMant = (uint)Math.Floor(mantissa * Math.Pow(2d, f));
double error = mantissa * Math.Pow(2d, f) - (double)intMant;
if (biasedExp == 0u && (error != 0d || state.GetFpcrFlag(Fpcr.Ufe)))
if (biasedExp == 0u && (error != 0d || state.GetFpcrFlag(AFpcr.Ufe)))
{
FPProcessException(FPExc.Underflow, state);
FPProcessException(AFpExc.Underflow, state);
}
bool overflowToInf;
@ -668,13 +668,13 @@ namespace ChocolArm64.Instruction
ushort resultBits;
if (!state.GetFpcrFlag(Fpcr.Ahp))
if (!state.GetFpcrFlag(AFpcr.Ahp))
{
if (biasedExp >= (uint)Math.Pow(2d, e) - 1u)
{
resultBits = overflowToInf ? FPInfinity(sign) : FPMaxNormal(sign);
FPProcessException(FPExc.Overflow, state);
FPProcessException(AFpExc.Overflow, state);
error = 1d;
}
@ -689,7 +689,7 @@ namespace ChocolArm64.Instruction
{
resultBits = (ushort)((sign ? 1u : 0u) << 15 | 0x7FFFu);
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
error = 0d;
}
@ -701,7 +701,7 @@ namespace ChocolArm64.Instruction
if (error != 0d)
{
FPProcessException(FPExc.Inexact, state);
FPProcessException(AFpExc.Inexact, state);
}
return resultBits;
@ -712,7 +712,7 @@ namespace ChocolArm64.Instruction
return (ushort)((valueBits & 0x80000000u) >> 16 | 0x7E00u | (valueBits & 0x003FE000u) >> 13);
}
private static void FPProcessException(FPExc exc, AThreadState state)
private static void FPProcessException(AFpExc exc, AThreadState state)
{
int enable = (int)exc + 8;
@ -747,7 +747,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((inf1 && !sign1) || (inf2 && !sign2))
{
@ -788,13 +788,13 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if (inf1 || zero2)
{
result = FPInfinity(sign1 ^ sign2);
if (!inf1) FPProcessException(FPExc.DivideByZero, state);
if (!inf1) FPProcessException(AFpExc.DivideByZero, state);
}
else if (zero1 || inf2)
{
@ -957,7 +957,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if (inf1 || inf2)
{
@ -993,7 +993,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
if (!done)
@ -1008,7 +1008,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((infA && !signA) || (infP && !signP))
{
@ -1199,7 +1199,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else
{
@ -1227,7 +1227,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((inf1 && !sign1) || (inf2 && sign2))
{
@ -1400,10 +1400,10 @@ namespace ChocolArm64.Instruction
{
op |= 1u << 22;
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
if (state.GetFpcrFlag(Fpcr.Dn))
if (state.GetFpcrFlag(AFpcr.Dn))
{
return FPDefaultNaN();
}
@ -1411,7 +1411,7 @@ namespace ChocolArm64.Instruction
return BitConverter.Int32BitsToSingle((int)op);
}
private static void FPProcessException(FPExc exc, AThreadState state)
private static void FPProcessException(AFpExc exc, AThreadState state)
{
int enable = (int)exc + 8;
@ -1446,7 +1446,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((inf1 && !sign1) || (inf2 && !sign2))
{
@ -1487,13 +1487,13 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if (inf1 || zero2)
{
result = FPInfinity(sign1 ^ sign2);
if (!inf1) FPProcessException(FPExc.DivideByZero, state);
if (!inf1) FPProcessException(AFpExc.DivideByZero, state);
}
else if (zero1 || inf2)
{
@ -1656,7 +1656,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if (inf1 || inf2)
{
@ -1692,7 +1692,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
if (!done)
@ -1707,7 +1707,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((infA && !signA) || (infP && !signP))
{
@ -1898,7 +1898,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else
{
@ -1926,7 +1926,7 @@ namespace ChocolArm64.Instruction
{
result = FPDefaultNaN();
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
else if ((inf1 && !sign1) || (inf2 && sign2))
{
@ -2099,10 +2099,10 @@ namespace ChocolArm64.Instruction
{
op |= 1ul << 51;
FPProcessException(FPExc.InvalidOp, state);
FPProcessException(AFpExc.InvalidOp, state);
}
if (state.GetFpcrFlag(Fpcr.Dn))
if (state.GetFpcrFlag(AFpcr.Dn))
{
return FPDefaultNaN();
}
@ -2110,7 +2110,7 @@ namespace ChocolArm64.Instruction
return BitConverter.Int64BitsToDouble((long)op);
}
private static void FPProcessException(FPExc exc, AThreadState state)
private static void FPProcessException(AFpExc exc, AThreadState state)
{
int enable = (int)exc + 8;

View file

@ -1,6 +1,6 @@
namespace ChocolArm64.State
{
enum FPExc
enum AFpExc
{
InvalidOp = 0,
DivideByZero = 1,

View file

@ -1,6 +1,6 @@
namespace ChocolArm64.State
{
enum FPType
enum AFpType
{
Nonzero,
Zero,

View file

@ -1,6 +1,6 @@
namespace ChocolArm64.State
{
enum Fpcr
enum AFpcr
{
Ufe = 11,
RMode = 22,

View file

@ -1,6 +1,6 @@
namespace ChocolArm64.State
{
enum Fpsr
enum AFpsr
{
Ufc = 3,
Qc = 27

View file

@ -146,19 +146,19 @@ namespace ChocolArm64.State
Undefined?.Invoke(this, new AInstUndefinedEventArgs(position, rawOpCode));
}
internal bool GetFpcrFlag(Fpcr flag)
internal bool GetFpcrFlag(AFpcr flag)
{
return (Fpcr & (1 << (int)flag)) != 0;
}
internal void SetFpsrFlag(Fpsr flag)
internal void SetFpsrFlag(AFpsr flag)
{
Fpsr |= 1 << (int)flag;
}
internal ARoundMode FPRoundingMode()
{
return (ARoundMode)((Fpcr >> (int)State.Fpcr.RMode) & 3);
return (ARoundMode)((Fpcr >> (int)State.AFpcr.RMode) & 3);
}
}
}