diff options
| author | LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com> | 2018-10-23 16:12:45 +0200 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2018-10-23 11:12:45 -0300 |
| commit | e674b377104858d5068231dbe395e1038ba5d71d (patch) | |
| tree | 12c87fa75074060c4d2ba0ac762c36fe0d3dcfc5 /ChocolArm64/State | |
| parent | 7920dc1d2f1eaeba1d1308b63443349dc9a799f1 (diff) | |
Fix Fcvtl_V and Fcvtn_V; fix half to float conv. and add float to half conv. (full FP emu.). Add 4 FP Tests. (#468)
* Update CpuTest.cs
* Update CpuTestSimd.cs
* Superseded.
* Update AInstEmitSimdCvt.cs
* Update ASoftFloat.cs
* Nit.
* Update PackageReferences.
* Update AInstEmitSimdArithmetic.cs
* Update AVectorHelper.cs
* Update ASoftFloat.cs
* Update ASoftFallback.cs
* Update AThreadState.cs
* Create FPType.cs
* Create FPExc.cs
* Create FPCR.cs
* Create FPSR.cs
* Update ARoundMode.cs
* Update APState.cs
* Avoid an unwanted implicit cast of the operator >= to long, continuing to check for negative values. Remove a leftover.
* Nits.
Diffstat (limited to 'ChocolArm64/State')
| -rw-r--r-- | ChocolArm64/State/APState.cs | 4 | ||||
| -rw-r--r-- | ChocolArm64/State/ARoundMode.cs | 4 | ||||
| -rw-r--r-- | ChocolArm64/State/AThreadState.cs | 17 | ||||
| -rw-r--r-- | ChocolArm64/State/FPCR.cs | 11 | ||||
| -rw-r--r-- | ChocolArm64/State/FPExc.cs | 12 | ||||
| -rw-r--r-- | ChocolArm64/State/FPSR.cs | 8 | ||||
| -rw-r--r-- | ChocolArm64/State/FPType.cs | 11 |
7 files changed, 62 insertions, 5 deletions
diff --git a/ChocolArm64/State/APState.cs b/ChocolArm64/State/APState.cs index f55431a6..aaf0ff0c 100644 --- a/ChocolArm64/State/APState.cs +++ b/ChocolArm64/State/APState.cs @@ -3,7 +3,7 @@ using System; namespace ChocolArm64.State { [Flags] - public enum APState + enum APState { VBit = 28, CBit = 29, @@ -20,4 +20,4 @@ namespace ChocolArm64.State NZCV = NZ | CV } -}
\ No newline at end of file +} diff --git a/ChocolArm64/State/ARoundMode.cs b/ChocolArm64/State/ARoundMode.cs index 9896f307..297d0137 100644 --- a/ChocolArm64/State/ARoundMode.cs +++ b/ChocolArm64/State/ARoundMode.cs @@ -1,10 +1,10 @@ namespace ChocolArm64.State { - public enum ARoundMode + enum ARoundMode { ToNearest = 0, TowardsPlusInfinity = 1, TowardsMinusInfinity = 2, TowardsZero = 3 } -}
\ No newline at end of file +} diff --git a/ChocolArm64/State/AThreadState.cs b/ChocolArm64/State/AThreadState.cs index e4953b02..fbfac5bc 100644 --- a/ChocolArm64/State/AThreadState.cs +++ b/ChocolArm64/State/AThreadState.cs @@ -145,5 +145,20 @@ namespace ChocolArm64.State { Undefined?.Invoke(this, new AInstUndefinedEventArgs(Position, RawOpCode)); } + + internal bool GetFpcrFlag(FPCR Flag) + { + return (Fpcr & (1 << (int)Flag)) != 0; + } + + internal void SetFpsrFlag(FPSR Flag) + { + Fpsr |= 1 << (int)Flag; + } + + internal ARoundMode FPRoundingMode() + { + return (ARoundMode)((Fpcr >> (int)FPCR.RMode) & 3); + } } -}
\ No newline at end of file +} diff --git a/ChocolArm64/State/FPCR.cs b/ChocolArm64/State/FPCR.cs new file mode 100644 index 00000000..8f47cf90 --- /dev/null +++ b/ChocolArm64/State/FPCR.cs @@ -0,0 +1,11 @@ +namespace ChocolArm64.State +{ + enum FPCR + { + UFE = 11, + RMode = 22, + FZ = 24, + DN = 25, + AHP = 26 + } +} diff --git a/ChocolArm64/State/FPExc.cs b/ChocolArm64/State/FPExc.cs new file mode 100644 index 00000000..a665957d --- /dev/null +++ b/ChocolArm64/State/FPExc.cs @@ -0,0 +1,12 @@ +namespace ChocolArm64.State +{ + enum FPExc + { + InvalidOp = 0, + DivideByZero = 1, + Overflow = 2, + Underflow = 3, + Inexact = 4, + InputDenorm = 7 + } +} diff --git a/ChocolArm64/State/FPSR.cs b/ChocolArm64/State/FPSR.cs new file mode 100644 index 00000000..d71cde78 --- /dev/null +++ b/ChocolArm64/State/FPSR.cs @@ -0,0 +1,8 @@ +namespace ChocolArm64.State +{ + enum FPSR + { + UFC = 3, + QC = 27 + } +} diff --git a/ChocolArm64/State/FPType.cs b/ChocolArm64/State/FPType.cs new file mode 100644 index 00000000..b00f5fee --- /dev/null +++ b/ChocolArm64/State/FPType.cs @@ -0,0 +1,11 @@ +namespace ChocolArm64.State +{ + enum FPType + { + Nonzero, + Zero, + Infinity, + QNaN, + SNaN + } +} |
