aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/Instructions/InstEmitSystem.cs
diff options
context:
space:
mode:
authorLDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com>2019-10-31 19:09:03 +0100
committerAc_K <Acoustik666@gmail.com>2019-10-31 19:09:03 +0100
commiteee639d6ba544fa5dd9352426d55e91bc54e157d (patch)
tree1df440ca57d8c1725e84f403fbeecddb8e508a3a /ChocolArm64/Instructions/InstEmitSystem.cs
parent35443bac5a16ced668d84e0a22c21ca9076b3924 (diff)
.NET Core 3.0 is here! (#784)
* .NET Core 3.0 is here! * Remove IMemoryManager.cs and its references. * Add T Math/F.FusedMultiplyAdd(T, T, T). Nits. * Nit. * Update appveyor.yml * Revert "Resolve Visual Studio build issues" This reverts commit 1772128ce0fc058e6280001aace3a77a7a96897b. * Update SvcTable.cs
Diffstat (limited to 'ChocolArm64/Instructions/InstEmitSystem.cs')
-rw-r--r--ChocolArm64/Instructions/InstEmitSystem.cs137
1 files changed, 0 insertions, 137 deletions
diff --git a/ChocolArm64/Instructions/InstEmitSystem.cs b/ChocolArm64/Instructions/InstEmitSystem.cs
deleted file mode 100644
index ac264de9..00000000
--- a/ChocolArm64/Instructions/InstEmitSystem.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using ChocolArm64.Decoders;
-using ChocolArm64.State;
-using ChocolArm64.Translation;
-using System;
-using System.Reflection;
-using System.Reflection.Emit;
-
-namespace ChocolArm64.Instructions
-{
- static partial class InstEmit
- {
- public static void Hint(ILEmitterCtx context)
- {
- // Execute as no-op.
- }
-
- public static void Isb(ILEmitterCtx context)
- {
- // Execute as no-op.
- }
-
- public static void Mrs(ILEmitterCtx context)
- {
- OpCodeSystem64 op = (OpCodeSystem64)context.CurrOp;
-
- context.EmitLdarg(TranslatedSub.StateArgIdx);
-
- string propName;
-
- switch (GetPackedId(op))
- {
- case 0b11_011_0000_0000_001: propName = nameof(CpuThreadState.CtrEl0); break;
- case 0b11_011_0000_0000_111: propName = nameof(CpuThreadState.DczidEl0); break;
- case 0b11_011_0100_0100_000: propName = nameof(CpuThreadState.CFpcr); break;
- case 0b11_011_0100_0100_001: propName = nameof(CpuThreadState.CFpsr); break;
- case 0b11_011_1101_0000_010: propName = nameof(CpuThreadState.TpidrEl0); break;
- case 0b11_011_1101_0000_011: propName = nameof(CpuThreadState.Tpidr); break;
- case 0b11_011_1110_0000_000: propName = nameof(CpuThreadState.CntfrqEl0); break;
- case 0b11_011_1110_0000_001: propName = nameof(CpuThreadState.CntpctEl0); break;
-
- default: throw new NotImplementedException($"Unknown MRS at {op.Position:x16}");
- }
-
- context.EmitCallPropGet(typeof(CpuThreadState), propName);
-
- PropertyInfo propInfo = typeof(CpuThreadState).GetProperty(propName);
-
- if (propInfo.PropertyType != typeof(long) &&
- propInfo.PropertyType != typeof(ulong))
- {
- context.Emit(OpCodes.Conv_U8);
- }
-
- context.EmitStintzr(op.Rt);
- }
-
- public static void Msr(ILEmitterCtx context)
- {
- OpCodeSystem64 op = (OpCodeSystem64)context.CurrOp;
-
- context.EmitLdarg(TranslatedSub.StateArgIdx);
- context.EmitLdintzr(op.Rt);
-
- string propName;
-
- switch (GetPackedId(op))
- {
- case 0b11_011_0100_0100_000: propName = nameof(CpuThreadState.CFpcr); break;
- case 0b11_011_0100_0100_001: propName = nameof(CpuThreadState.CFpsr); break;
- case 0b11_011_1101_0000_010: propName = nameof(CpuThreadState.TpidrEl0); break;
-
- default: throw new NotImplementedException($"Unknown MSR at {op.Position:x16}");
- }
-
- PropertyInfo propInfo = typeof(CpuThreadState).GetProperty(propName);
-
- if (propInfo.PropertyType != typeof(long) &&
- propInfo.PropertyType != typeof(ulong))
- {
- context.Emit(OpCodes.Conv_U4);
- }
-
- context.EmitCallPropSet(typeof(CpuThreadState), propName);
- }
-
- public static void Nop(ILEmitterCtx context)
- {
- // Do nothing.
- }
-
- public static void Sys(ILEmitterCtx context)
- {
- // This instruction is used to do some operations on the CPU like cache invalidation,
- // address translation and the like.
- // We treat it as no-op here since we don't have any cache being emulated anyway.
- OpCodeSystem64 op = (OpCodeSystem64)context.CurrOp;
-
- switch (GetPackedId(op))
- {
- case 0b11_011_0111_0100_001:
- {
- // DC ZVA
- for (int offs = 0; offs < (4 << CpuThreadState.DczSizeLog2); offs += 8)
- {
- context.EmitLdintzr(op.Rt);
- context.EmitLdc_I(offs);
-
- context.Emit(OpCodes.Add);
-
- context.EmitLdc_I8(0);
-
- InstEmitMemoryHelper.EmitWriteCall(context, 3);
- }
-
- break;
- }
-
- // No-op
- case 0b11_011_0111_1110_001: //DC CIVAC
- break;
- }
- }
-
- private static int GetPackedId(OpCodeSystem64 op)
- {
- int id;
-
- id = op.Op2 << 0;
- id |= op.CRm << 3;
- id |= op.CRn << 7;
- id |= op.Op1 << 11;
- id |= op.Op0 << 14;
-
- return id;
- }
- }
-}