aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/State/CpuThreadState.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ChocolArm64/State/CpuThreadState.cs')
-rw-r--r--ChocolArm64/State/CpuThreadState.cs28
1 files changed, 16 insertions, 12 deletions
diff --git a/ChocolArm64/State/CpuThreadState.cs b/ChocolArm64/State/CpuThreadState.cs
index a4ee5d07..6c00bf48 100644
--- a/ChocolArm64/State/CpuThreadState.cs
+++ b/ChocolArm64/State/CpuThreadState.cs
@@ -8,25 +8,13 @@ namespace ChocolArm64.State
{
public class CpuThreadState
{
- internal const int LrIndex = 30;
- internal const int ZrIndex = 31;
-
internal const int ErgSizeLog2 = 4;
internal const int DczSizeLog2 = 4;
private const int MinInstForCheck = 4000000;
- internal ExecutionMode ExecutionMode;
-
- //AArch32 state.
- public uint R0, R1, R2, R3,
- R4, R5, R6, R7,
- R8, R9, R10, R11,
- R12, R13, R14, R15;
-
public bool Thumb;
- //AArch64 state.
public ulong X0, X1, X2, X3, X4, X5, X6, X7,
X8, X9, X10, X11, X12, X13, X14, X15,
X16, X17, X18, X19, X20, X21, X22, X23,
@@ -42,6 +30,10 @@ namespace ChocolArm64.State
public bool Zero;
public bool Negative;
+ public bool IsAarch32;
+
+ public int ElrHyp;
+
public bool Running { get; set; }
public int Core { get; set; }
@@ -146,6 +138,18 @@ namespace ChocolArm64.State
Undefined?.Invoke(this, new InstUndefinedEventArgs(position, rawOpCode));
}
+ internal ExecutionMode GetExecutionMode()
+ {
+ if (!IsAarch32)
+ {
+ return ExecutionMode.Aarch64;
+ }
+ else
+ {
+ return Thumb ? ExecutionMode.Aarch32Thumb : ExecutionMode.Aarch32Arm;
+ }
+ }
+
internal bool GetFpcrFlag(Fpcr flag)
{
return (Fpcr & (1 << (int)flag)) != 0;