.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 1772128ce0
.
* Update SvcTable.cs
This commit is contained in:
parent
35443bac5a
commit
eee639d6ba
208 changed files with 138 additions and 27346 deletions
|
@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
|||
|
||||
private LinkedList<KMemoryBlock> _blocks;
|
||||
|
||||
private IMemoryManager _cpuMemory;
|
||||
private MemoryManager _cpuMemory;
|
||||
|
||||
private Horizon _system;
|
||||
|
||||
|
@ -72,7 +72,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
|
|||
|
||||
private MersenneTwister _randomNumberGenerator;
|
||||
|
||||
public KMemoryManager(Horizon system, IMemoryManager cpuMemory)
|
||||
public KMemoryManager(Horizon system, MemoryManager cpuMemory)
|
||||
{
|
||||
_system = system;
|
||||
_cpuMemory = cpuMemory;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using ARMeilleure.Memory;
|
||||
using ARMeilleure.State;
|
||||
using Ryujinx.HLE.HOS.Diagnostics.Demangler;
|
||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||
using Ryujinx.HLE.Loaders.Elf;
|
||||
|
@ -40,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
_images = new List<Image>();
|
||||
}
|
||||
|
||||
public string GetGuestStackTrace(IExecutionContext context)
|
||||
public string GetGuestStackTrace(ARMeilleure.State.ExecutionContext context)
|
||||
{
|
||||
EnsureLoaded();
|
||||
|
||||
|
@ -218,7 +217,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
}
|
||||
}
|
||||
|
||||
private void LoadMod0Symbols(IMemoryManager memory, long textOffset)
|
||||
private void LoadMod0Symbols(MemoryManager memory, long textOffset)
|
||||
{
|
||||
long mod0Offset = textOffset + memory.ReadUInt32(textOffset + 4);
|
||||
|
||||
|
@ -288,7 +287,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
}
|
||||
}
|
||||
|
||||
private ElfSymbol GetSymbol(IMemoryManager memory, long address, long strTblAddr)
|
||||
private ElfSymbol GetSymbol(MemoryManager memory, long address, long strTblAddr)
|
||||
{
|
||||
int nameIndex = memory.ReadInt32(address + 0);
|
||||
int info = memory.ReadByte (address + 4);
|
||||
|
|
|
@ -78,9 +78,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
|
||||
public bool IsPaused { get; private set; }
|
||||
|
||||
public IMemoryManager CpuMemory { get; private set; }
|
||||
public MemoryManager CpuMemory { get; private set; }
|
||||
|
||||
public ITranslator Translator { get; private set; }
|
||||
public Translator Translator { get; private set; }
|
||||
|
||||
private SvcHandler _svcHandler;
|
||||
|
||||
|
@ -791,7 +791,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
}
|
||||
}
|
||||
|
||||
public void SubscribeThreadEventHandlers(IExecutionContext context)
|
||||
public void SubscribeThreadEventHandlers(ARMeilleure.State.ExecutionContext context)
|
||||
{
|
||||
context.Interrupt += InterruptHandler;
|
||||
context.SupervisorCall += _svcHandler.SvcCall;
|
||||
|
@ -1022,18 +1022,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
|
|||
|
||||
bool useFlatPageTable = memRegion == MemoryRegion.Application;
|
||||
|
||||
if (_system.UseLegacyJit)
|
||||
{
|
||||
CpuMemory = new ChocolArm64.Memory.MemoryManager(_system.Device.Memory.RamPointer, addrSpaceBits, useFlatPageTable);
|
||||
CpuMemory = new MemoryManager(_system.Device.Memory.RamPointer, addrSpaceBits, useFlatPageTable);
|
||||
|
||||
Translator = new ChocolArm64.Translation.Translator((ChocolArm64.Memory.MemoryManager)CpuMemory);
|
||||
}
|
||||
else
|
||||
{
|
||||
CpuMemory = new MemoryManager(_system.Device.Memory.RamPointer, addrSpaceBits, useFlatPageTable);
|
||||
|
||||
Translator = new Translator((MemoryManager)CpuMemory);
|
||||
}
|
||||
Translator = new Translator(CpuMemory);
|
||||
|
||||
MemoryManager = new KMemoryManager(_system, CpuMemory);
|
||||
}
|
||||
|
|
|
@ -19,14 +19,14 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
|
||||
public void SvcCall(object sender, InstExceptionEventArgs e)
|
||||
{
|
||||
Action<SvcHandler, IExecutionContext> svcFunc = SvcTable.GetSvcFunc(e.Id);
|
||||
Action<SvcHandler, ExecutionContext> svcFunc = SvcTable.GetSvcFunc(e.Id);
|
||||
|
||||
if (svcFunc == null)
|
||||
{
|
||||
throw new NotImplementedException($"SVC 0x{e.Id:X4} is not implemented.");
|
||||
}
|
||||
|
||||
IExecutionContext context = (IExecutionContext)sender;
|
||||
ExecutionContext context = (ExecutionContext)sender;
|
||||
|
||||
svcFunc(this, context);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
|
||||
private static Dictionary<int, string> _svcFuncs64;
|
||||
|
||||
private static Action<SvcHandler, IExecutionContext>[] _svcTable64;
|
||||
private static Action<SvcHandler, ExecutionContext>[] _svcTable64;
|
||||
|
||||
static SvcTable()
|
||||
{
|
||||
|
@ -77,10 +77,10 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
{ 0x78, nameof(SvcHandler.UnmapProcessCodeMemory64) }
|
||||
};
|
||||
|
||||
_svcTable64 = new Action<SvcHandler, IExecutionContext>[0x80];
|
||||
_svcTable64 = new Action<SvcHandler, ExecutionContext>[0x80];
|
||||
}
|
||||
|
||||
public static Action<SvcHandler, IExecutionContext> GetSvcFunc(int svcId)
|
||||
public static Action<SvcHandler, ExecutionContext> GetSvcFunc(int svcId)
|
||||
{
|
||||
if (_svcTable64[svcId] != null)
|
||||
{
|
||||
|
@ -95,9 +95,9 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
return null;
|
||||
}
|
||||
|
||||
private static Action<SvcHandler, IExecutionContext> GenerateMethod(string svcName)
|
||||
private static Action<SvcHandler, ExecutionContext> GenerateMethod(string svcName)
|
||||
{
|
||||
Type[] argTypes = new Type[] { typeof(SvcHandler), typeof(IExecutionContext) };
|
||||
Type[] argTypes = new Type[] { typeof(SvcHandler), typeof(ExecutionContext) };
|
||||
|
||||
DynamicMethod method = new DynamicMethod(svcName, null, argTypes);
|
||||
|
||||
|
@ -188,7 +188,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
generator.Emit(OpCodes.Ldarg_1);
|
||||
generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.GetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
|
||||
|
@ -234,7 +234,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
generator.Emit(OpCodes.Ldarg_1);
|
||||
generator.Emit(OpCodes.Ldc_I4, index);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.GetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
|
||||
|
@ -250,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
generator.Emit(OpCodes.Ldarg_1);
|
||||
generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.GetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
|
||||
|
@ -288,7 +288,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
|
||||
ConvertToFieldType(retType);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.SetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.SetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
|
||||
ConvertToFieldType(locals[index].LocalType);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.SetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.SetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
}
|
||||
|
@ -313,14 +313,14 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
generator.Emit(OpCodes.Ldc_I4, outRegIndex++);
|
||||
generator.Emit(OpCodes.Ldc_I8, 0L);
|
||||
|
||||
MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.SetX));
|
||||
MethodInfo info = typeof(ExecutionContext).GetMethod(nameof(ExecutionContext.SetX));
|
||||
|
||||
generator.Emit(OpCodes.Call, info);
|
||||
}
|
||||
|
||||
generator.Emit(OpCodes.Ret);
|
||||
|
||||
return (Action<SvcHandler, IExecutionContext>)method.CreateDelegate(typeof(Action<SvcHandler, IExecutionContext>));
|
||||
return (Action<SvcHandler, ExecutionContext>)method.CreateDelegate(typeof(Action<SvcHandler, ExecutionContext>));
|
||||
}
|
||||
|
||||
private static void CheckIfTypeIsSupported(Type type, string svcName)
|
||||
|
|
|
@ -348,7 +348,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
return KernelResult.InvalidThread;
|
||||
}
|
||||
|
||||
IMemoryManager memory = currentProcess.CpuMemory;
|
||||
MemoryManager memory = currentProcess.CpuMemory;
|
||||
|
||||
memory.WriteUInt64((long)address + 0x0, thread.Context.GetX(0));
|
||||
memory.WriteUInt64((long)address + 0x8, thread.Context.GetX(1));
|
||||
|
@ -427,7 +427,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
return KernelResult.Success;
|
||||
}
|
||||
|
||||
private static int GetPsr(IExecutionContext context)
|
||||
private static int GetPsr(ExecutionContext context)
|
||||
{
|
||||
return (context.GetPstateFlag(PState.NFlag) ? (1 << 31) : 0) |
|
||||
(context.GetPstateFlag(PState.ZFlag) ? (1 << 30) : 0) |
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using ARMeilleure.Memory;
|
||||
using ARMeilleure.State;
|
||||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.HLE.HOS.Kernel.Common;
|
||||
using Ryujinx.HLE.HOS.Kernel.Process;
|
||||
|
@ -17,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
|
|||
|
||||
public Thread HostThread { get; private set; }
|
||||
|
||||
public IExecutionContext Context { get; private set; }
|
||||
public ARMeilleure.State.ExecutionContext Context { get; private set; }
|
||||
|
||||
public long AffinityMask { get; set; }
|
||||
|
||||
|
@ -159,14 +158,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
|
|||
|
||||
HostThread = new Thread(() => ThreadStart(entrypoint));
|
||||
|
||||
if (System.UseLegacyJit)
|
||||
{
|
||||
Context = new ChocolArm64.State.CpuThreadState();
|
||||
}
|
||||
else
|
||||
{
|
||||
Context = new ARMeilleure.State.ExecutionContext();
|
||||
}
|
||||
Context = new ARMeilleure.State.ExecutionContext();
|
||||
|
||||
bool isAarch32 = (Owner.MmuFlags & 1) == 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue