misc: Replace references to IntPtr/UIntPtr with nint/nuint + code cleanups.

This commit is contained in:
Evan Husted 2024-10-26 08:46:41 -05:00
parent a09d314817
commit dfb4854d19
172 changed files with 902 additions and 914 deletions

View file

@ -273,7 +273,7 @@ namespace Ryujinx.Cpu.AppleHv
public static partial HvResult hv_vm_get_max_vcpu_count(out uint max_vcpu_count);
[LibraryImport(LibraryName, SetLastError = true)]
public static partial HvResult hv_vm_create(IntPtr config);
public static partial HvResult hv_vm_create(nint config);
[LibraryImport(LibraryName, SetLastError = true)]
public static partial HvResult hv_vm_destroy();
@ -288,7 +288,7 @@ namespace Ryujinx.Cpu.AppleHv
public static partial HvResult hv_vm_protect(ulong ipa, ulong size, HvMemoryFlags flags);
[LibraryImport(LibraryName, SetLastError = true)]
public unsafe static partial HvResult hv_vcpu_create(out ulong vcpu, ref HvVcpuExit* exit, IntPtr config);
public unsafe static partial HvResult hv_vcpu_create(out ulong vcpu, ref HvVcpuExit* exit, nint config);
[LibraryImport(LibraryName, SetLastError = true)]
public unsafe static partial HvResult hv_vcpu_destroy(ulong vcpu);

View file

@ -10,9 +10,9 @@ namespace Ryujinx.Cpu.AppleHv
class HvExecutionContextVcpu : IHvExecutionContext
{
private static readonly MemoryBlock _setSimdFpRegFuncMem;
private delegate HvResult SetSimdFpReg(ulong vcpu, HvSimdFPReg reg, in V128 value, IntPtr funcPtr);
private delegate HvResult SetSimdFpReg(ulong vcpu, HvSimdFPReg reg, in V128 value, nint funcPtr);
private static readonly SetSimdFpReg _setSimdFpReg;
private static readonly IntPtr _setSimdFpRegNativePtr;
private static readonly nint _setSimdFpRegNativePtr;
static HvExecutionContextVcpu()
{
@ -25,7 +25,7 @@ namespace Ryujinx.Cpu.AppleHv
_setSimdFpReg = Marshal.GetDelegateForFunctionPointer<SetSimdFpReg>(_setSimdFpRegFuncMem.Pointer);
if (NativeLibrary.TryLoad(HvApi.LibraryName, out IntPtr hvLibHandle))
if (NativeLibrary.TryLoad(HvApi.LibraryName, out nint hvLibHandle))
{
_setSimdFpRegNativePtr = NativeLibrary.GetExport(hvLibHandle, nameof(HvApi.hv_vcpu_set_simd_fp_reg));
}

View file

@ -32,7 +32,7 @@ namespace Ryujinx.Cpu.AppleHv
public int AddressSpaceBits { get; }
public IntPtr PageTablePointer => IntPtr.Zero;
public nint PageTablePointer => nint.Zero;
public MemoryManagerType Type => MemoryManagerType.SoftwarePageTable;
@ -244,7 +244,7 @@ namespace Ryujinx.Cpu.AppleHv
for (int i = 0; i < regions.Length; i++)
{
var guestRegion = guestRegions[i];
IntPtr pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
}

View file

@ -72,7 +72,7 @@ namespace Ryujinx.Cpu.AppleHv
// Create VCPU.
HvVcpuExit* exitInfo = null;
HvApi.hv_vcpu_create(out ulong vcpuHandle, ref exitInfo, IntPtr.Zero).ThrowOnError();
HvApi.hv_vcpu_create(out ulong vcpuHandle, ref exitInfo, nint.Zero).ThrowOnError();
// Enable FP and SIMD instructions.
HvApi.hv_vcpu_set_sys_reg(vcpuHandle, HvSysReg.CPACR_EL1, 0b11 << 20).ThrowOnError();

View file

@ -22,7 +22,7 @@ namespace Ryujinx.Cpu.AppleHv
{
if (++_addressSpaces == 1)
{
HvApi.hv_vm_create(IntPtr.Zero).ThrowOnError();
HvApi.hv_vm_create(nint.Zero).ThrowOnError();
_ipaAllocator = ipaAllocator = new HvIpaAllocator();
}
else

View file

@ -307,7 +307,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
ulong size,
MemoryPermission protection,
AddressSpacePartitioned addressSpace,
Action<ulong, IntPtr, ulong> updatePtCallback)
Action<ulong, nint, ulong> updatePtCallback)
{
if (_baseMemory.LazyInitMirrorForProtection(addressSpace, Address, Size, protection))
{
@ -317,7 +317,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
updatePtCallback(va, _baseMemory.GetPointerForProtection(va - Address, size, protection), size);
}
public IntPtr GetPointer(ulong va, ulong size)
public nint GetPointer(ulong va, ulong size)
{
Debug.Assert(va >= Address);
Debug.Assert(va + size <= EndAddress);

View file

@ -11,7 +11,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
private readonly AddressSpacePartitionAllocator _owner;
private readonly PrivateMemoryAllocatorImpl<AddressSpacePartitionAllocator.Block>.Allocation _allocation;
public IntPtr Pointer => (IntPtr)((ulong)_allocation.Block.Memory.Pointer + _allocation.Offset);
public nint Pointer => (nint)((ulong)_allocation.Block.Memory.Pointer + _allocation.Offset);
public bool IsValid => _owner != null;
@ -43,7 +43,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
_allocation.Block.Memory.Reprotect(_allocation.Offset + offset, size, permission, throwOnFail);
}
public IntPtr GetPointer(ulong offset, ulong size)
public nint GetPointer(ulong offset, ulong size)
{
return _allocation.Block.Memory.GetPointer(_allocation.Offset + offset, size);
}

View file

@ -47,7 +47,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
_baseMemory.Reprotect(offset, size, permission, throwOnFail);
}
public IntPtr GetPointer(ulong offset, ulong size)
public nint GetPointer(ulong offset, ulong size)
{
return _baseMemory.GetPointer(offset, size);
}
@ -68,7 +68,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
return false;
}
public IntPtr GetPointerForProtection(ulong offset, ulong size, MemoryPermission permission)
public nint GetPointerForProtection(ulong offset, ulong size, MemoryPermission permission)
{
AddressSpacePartitionAllocation allocation = permission switch
{

View file

@ -15,7 +15,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
private readonly MemoryBlock _backingMemory;
private readonly List<AddressSpacePartition> _partitions;
private readonly AddressSpacePartitionAllocator _asAllocator;
private readonly Action<ulong, IntPtr, ulong> _updatePtCallback;
private readonly Action<ulong, nint, ulong> _updatePtCallback;
private readonly bool _useProtectionMirrors;
public AddressSpacePartitioned(MemoryTracking tracking, MemoryBlock backingMemory, NativePageTable nativePageTable, bool useProtectionMirrors)
@ -212,7 +212,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
}
}
public IntPtr GetPointer(ulong va, ulong size)
public nint GetPointer(ulong va, ulong size)
{
AddressSpacePartition partition = FindPartition(va);

View file

@ -30,7 +30,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
private bool _disposed;
public IntPtr PageTablePointer => _nativePageTable.Pointer;
public nint PageTablePointer => _nativePageTable.Pointer;
public NativePageTable(ulong asSize)
{
@ -83,7 +83,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
public void Unmap(ulong va, ulong size)
{
IntPtr guardPagePtr = GetGuardPagePointer();
nint guardPagePtr = GetGuardPagePointer();
while (size != 0)
{
@ -104,7 +104,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
return pte + (va & PageMask);
}
public void Update(ulong va, IntPtr ptr, ulong size)
public void Update(ulong va, nint ptr, ulong size)
{
ulong remainingSize = size;
@ -148,7 +148,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked
Debug.Assert(pageSpan.Length == _entriesPerPtPage);
IntPtr guardPagePtr = GetGuardPagePointer();
nint guardPagePtr = GetGuardPagePointer();
for (int i = 0; i < pageSpan.Length; i++)
{
@ -160,12 +160,12 @@ namespace Ryujinx.Cpu.Jit.HostTracked
}
}
private IntPtr GetGuardPagePointer()
private nint GetGuardPagePointer()
{
return _nativePageTable.GetPointer(_nativePageTable.Size - _hostPageSize, _hostPageSize);
}
private static ulong GetPte(ulong va, IntPtr ptr)
private static ulong GetPte(ulong va, nint ptr)
{
Debug.Assert((va & PageMask) == 0);

View file

@ -8,7 +8,7 @@ namespace Ryujinx.Cpu.Jit
{
private readonly MemoryBlock _impl;
public IntPtr Pointer => _impl.Pointer;
public nint Pointer => _impl.Pointer;
public JitMemoryBlock(ulong size, MemoryAllocationFlags flags)
{

View file

@ -39,7 +39,7 @@ namespace Ryujinx.Cpu.Jit
/// <summary>
/// Page table base pointer.
/// </summary>
public IntPtr PageTablePointer => _pageTable.Pointer;
public nint PageTablePointer => _pageTable.Pointer;
public MemoryManagerType Type => MemoryManagerType.SoftwarePageTable;
@ -264,7 +264,7 @@ namespace Ryujinx.Cpu.Jit
for (int i = 0; i < regions.Length; i++)
{
var guestRegion = guestRegions[i];
IntPtr pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
}

View file

@ -31,7 +31,7 @@ namespace Ryujinx.Cpu.Jit
public int AddressSpaceBits { get; }
public IntPtr PageTablePointer => _addressSpace.Base.Pointer;
public nint PageTablePointer => _addressSpace.Base.Pointer;
public MemoryManagerType Type => _unsafeMode ? MemoryManagerType.HostMappedUnsafe : MemoryManagerType.HostMapped;

View file

@ -37,7 +37,7 @@ namespace Ryujinx.Cpu.Jit
/// <inheritdoc/>
public bool UsesPrivateAllocations => true;
public IntPtr PageTablePointer => _nativePageTable.PageTablePointer;
public nint PageTablePointer => _nativePageTable.PageTablePointer;
public MemoryManagerType Type => _unsafeMode ? MemoryManagerType.HostTrackedUnsafe : MemoryManagerType.HostTracked;
@ -452,7 +452,7 @@ namespace Ryujinx.Cpu.Jit
{
(MemoryBlock memory, ulong rangeOffset, ulong rangeSize) = GetMemoryOffsetAndSize(va, endVa - va);
regions.Add(new((UIntPtr)memory.GetPointer(rangeOffset, rangeSize), rangeSize));
regions.Add(new((nuint)memory.GetPointer(rangeOffset, rangeSize), rangeSize));
va += rangeSize;
}

View file

@ -15,7 +15,7 @@ namespace Ryujinx.Cpu.LightningJit
IMemoryManager memoryManager,
ulong address,
AddressTable<ulong> funcTable,
IntPtr dispatchStubPtr,
nint dispatchStubPtr,
ExecutionMode executionMode,
Architecture targetArch)
{

View file

@ -13,7 +13,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32
IMemoryManager memoryManager,
ulong address,
AddressTable<ulong> funcTable,
IntPtr dispatchStubPtr,
nint dispatchStubPtr,
bool isThumb,
Architecture targetArch)
{

View file

@ -24,10 +24,10 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
public readonly MemoryManagerType MemoryManagerType;
public readonly TailMerger TailMerger;
public readonly AddressTable<ulong> FuncTable;
public readonly IntPtr DispatchStubPointer;
public readonly nint DispatchStubPointer;
private readonly RegisterSaveRestore _registerSaveRestore;
private readonly IntPtr _pageTablePointer;
private readonly nint _pageTablePointer;
public Context(
CodeWriter writer,
@ -36,8 +36,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
TailMerger tailMerger,
AddressTable<ulong> funcTable,
RegisterSaveRestore registerSaveRestore,
IntPtr dispatchStubPointer,
IntPtr pageTablePointer)
nint dispatchStubPointer,
nint pageTablePointer)
{
Writer = writer;
RegisterAllocator = registerAllocator;
@ -226,7 +226,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
}
}
public static CompiledFunction Compile(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, AddressTable<ulong> funcTable, IntPtr dispatchStubPtr, bool isThumb)
public static CompiledFunction Compile(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, AddressTable<ulong> funcTable, nint dispatchStubPtr, bool isThumb)
{
MultiBlock multiBlock = Decoder<InstEmit>.DecodeMulti(cpuPreset, memoryManager, address, isThumb);

View file

@ -133,7 +133,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
TailMerger tailMerger,
Action writeEpilogue,
AddressTable<ulong> funcTable,
IntPtr funcPtr,
nint funcPtr,
int spillBaseOffset,
uint nextAddress,
Operand guestAddress,

View file

@ -324,27 +324,27 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
Udf(context, encoding, 0);
}
private static IntPtr GetBkptHandlerPtr()
private static nint GetBkptHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.Break);
}
private static IntPtr GetSvcHandlerPtr()
private static nint GetSvcHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.SupervisorCall);
}
private static IntPtr GetUdfHandlerPtr()
private static nint GetUdfHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.Undefined);
}
private static IntPtr GetCntpctEl0Ptr()
private static nint GetCntpctEl0Ptr()
{
return Marshal.GetFunctionPointerForDelegate<Get64>(NativeInterface.GetCntpctEl0);
}
private static IntPtr CheckSynchronizationPtr()
private static nint CheckSynchronizationPtr()
{
return Marshal.GetFunctionPointerForDelegate<GetBool>(NativeInterface.CheckSynchronization);
}
@ -474,7 +474,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
private static void WriteCall(
ref Assembler asm,
RegisterAllocator regAlloc,
IntPtr funcPtr,
nint funcPtr,
bool skipContext,
int spillBaseOffset,
int? resultRegister,

View file

@ -13,7 +13,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64
IMemoryManager memoryManager,
ulong address,
AddressTable<ulong> funcTable,
IntPtr dispatchStubPtr,
nint dispatchStubPtr,
Architecture targetArch)
{
if (targetArch == Architecture.Arm64)

View file

@ -20,11 +20,11 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
public readonly RegisterAllocator RegisterAllocator;
public readonly TailMerger TailMerger;
public readonly AddressTable<ulong> FuncTable;
public readonly IntPtr DispatchStubPointer;
public readonly nint DispatchStubPointer;
private readonly MultiBlock _multiBlock;
private readonly RegisterSaveRestore _registerSaveRestore;
private readonly IntPtr _pageTablePointer;
private readonly nint _pageTablePointer;
public Context(
CodeWriter writer,
@ -33,8 +33,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
RegisterSaveRestore registerSaveRestore,
MultiBlock multiBlock,
AddressTable<ulong> funcTable,
IntPtr dispatchStubPointer,
IntPtr pageTablePointer)
nint dispatchStubPointer,
nint pageTablePointer)
{
Writer = writer;
RegisterAllocator = registerAllocator;
@ -304,7 +304,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
}
}
public static CompiledFunction Compile(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, AddressTable<ulong> funcTable, IntPtr dispatchStubPtr)
public static CompiledFunction Compile(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, AddressTable<ulong> funcTable, nint dispatchStubPtr)
{
MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address);

View file

@ -144,27 +144,27 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
return name == InstName.Svc;
}
private static IntPtr GetBrkHandlerPtr()
private static nint GetBrkHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.Break);
}
private static IntPtr GetSvcHandlerPtr()
private static nint GetSvcHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.SupervisorCall);
}
private static IntPtr GetUdfHandlerPtr()
private static nint GetUdfHandlerPtr()
{
return Marshal.GetFunctionPointerForDelegate<SoftwareInterruptHandler>(NativeInterface.Undefined);
}
private static IntPtr GetCntpctEl0Ptr()
private static nint GetCntpctEl0Ptr()
{
return Marshal.GetFunctionPointerForDelegate<Get64>(NativeInterface.GetCntpctEl0);
}
private static IntPtr CheckSynchronizationPtr()
private static nint CheckSynchronizationPtr()
{
return Marshal.GetFunctionPointerForDelegate<GetBool>(NativeInterface.CheckSynchronization);
}
@ -215,7 +215,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
TailMerger tailMerger,
Action writeEpilogue,
AddressTable<ulong> funcTable,
IntPtr dispatchStubPtr,
nint dispatchStubPtr,
InstName name,
ulong pc,
uint encoding,
@ -298,7 +298,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
TailMerger tailMerger,
Action writeEpilogue,
AddressTable<ulong> funcTable,
IntPtr funcPtr,
nint funcPtr,
int spillBaseOffset,
ulong pc,
Operand guestAddress,
@ -369,7 +369,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
private static void WriteCall(
ref Assembler asm,
RegisterAllocator regAlloc,
IntPtr funcPtr,
nint funcPtr,
int spillBaseOffset,
int? resultRegister,
params ulong[] callArgs)

View file

@ -28,7 +28,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
[SupportedOSPlatform("windows")]
[LibraryImport("kernel32.dll", SetLastError = true)]
public static partial IntPtr FlushInstructionCache(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize);
public static partial nint FlushInstructionCache(nint hProcess, nint lpAddress, nuint dwSize);
public static void Initialize(IJitMemoryAllocator allocator)
{
@ -57,7 +57,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
public unsafe static IntPtr Map(ReadOnlySpan<byte> code)
public unsafe static nint Map(ReadOnlySpan<byte> code)
{
lock (_lock)
{
@ -65,7 +65,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
int funcOffset = Allocate(code.Length);
IntPtr funcPtr = _jitRegion.Pointer + funcOffset;
nint funcPtr = _jitRegion.Pointer + funcOffset;
if (OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{
@ -73,7 +73,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
{
fixed (byte* codePtr = code)
{
JitSupportDarwin.Copy(funcPtr, (IntPtr)codePtr, (ulong)code.Length);
JitSupportDarwin.Copy(funcPtr, (nint)codePtr, (ulong)code.Length);
}
}
}
@ -85,7 +85,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
if (OperatingSystem.IsWindows() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{
FlushInstructionCache(Process.GetCurrentProcess().Handle, funcPtr, (UIntPtr)code.Length);
FlushInstructionCache(Process.GetCurrentProcess().Handle, funcPtr, (nuint)code.Length);
}
else
{
@ -99,7 +99,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
public static void Unmap(IntPtr pointer)
public static void Unmap(nint pointer)
{
lock (_lock)
{

View file

@ -68,7 +68,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
public void Invalidate(IntPtr basePointer, ulong size)
public void Invalidate(nint basePointer, ulong size)
{
if (_needsInvalidation)
{

View file

@ -8,9 +8,9 @@ namespace Ryujinx.Cpu.LightningJit.Cache
static partial class JitSupportDarwin
{
[LibraryImport("libarmeilleure-jitsupport", EntryPoint = "armeilleure_jit_memcpy")]
public static partial void Copy(IntPtr dst, IntPtr src, ulong n);
public static partial void Copy(nint dst, nint src, ulong n);
[LibraryImport("libc", EntryPoint = "sys_icache_invalidate", SetLastError = true)]
public static partial void SysIcacheInvalidate(IntPtr start, IntPtr len);
public static partial void SysIcacheInvalidate(nint start, nint len);
}
}

View file

@ -23,7 +23,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
private readonly CacheMemoryAllocator _cacheAllocator;
public CacheMemoryAllocator Allocator => _cacheAllocator;
public IntPtr Pointer => _region.Block.Pointer;
public nint Pointer => _region.Block.Pointer;
public MemoryCache(IJitMemoryAllocator allocator, ulong size)
{
@ -110,10 +110,10 @@ namespace Ryujinx.Cpu.LightningJit.Cache
{
public readonly int Offset;
public readonly int Size;
public readonly IntPtr FuncPtr;
public readonly nint FuncPtr;
private int _useCount;
public ThreadLocalCacheEntry(int offset, int size, IntPtr funcPtr)
public ThreadLocalCacheEntry(int offset, int size, nint funcPtr)
{
Offset = offset;
Size = size;
@ -140,9 +140,9 @@ namespace Ryujinx.Cpu.LightningJit.Cache
_lock = new();
}
public unsafe IntPtr Map(IntPtr framePointer, ReadOnlySpan<byte> code, ulong guestAddress, ulong guestSize)
public unsafe nint Map(nint framePointer, ReadOnlySpan<byte> code, ulong guestAddress, ulong guestSize)
{
if (TryGetThreadLocalFunction(guestAddress, out IntPtr funcPtr))
if (TryGetThreadLocalFunction(guestAddress, out nint funcPtr))
{
return funcPtr;
}
@ -167,7 +167,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
public unsafe IntPtr MapPageAligned(ReadOnlySpan<byte> code)
public unsafe nint MapPageAligned(ReadOnlySpan<byte> code)
{
lock (_lock)
{
@ -179,7 +179,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
Debug.Assert((funcOffset & ((int)MemoryBlock.GetPageSize() - 1)) == 0);
IntPtr funcPtr = _sharedCache.Pointer + funcOffset;
nint funcPtr = _sharedCache.Pointer + funcOffset;
code.CopyTo(new Span<byte>((void*)funcPtr, code.Length));
_sharedCache.ReprotectAsRx(funcOffset, sizeAligned);
@ -188,7 +188,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
}
}
private bool TryGetThreadLocalFunction(ulong guestAddress, out IntPtr funcPtr)
private bool TryGetThreadLocalFunction(ulong guestAddress, out nint funcPtr)
{
if ((_threadLocalCache ??= new()).TryGetValue(guestAddress, out var entry))
{
@ -209,12 +209,12 @@ namespace Ryujinx.Cpu.LightningJit.Cache
return true;
}
funcPtr = IntPtr.Zero;
funcPtr = nint.Zero;
return false;
}
private void ClearThreadLocalCache(IntPtr framePointer)
private void ClearThreadLocalCache(nint framePointer)
{
// Try to delete functions that are already on the shared cache
// and no longer being executed.
@ -296,14 +296,14 @@ namespace Ryujinx.Cpu.LightningJit.Cache
_threadLocalCache = null;
}
private unsafe IntPtr AddThreadLocalFunction(ReadOnlySpan<byte> code, ulong guestAddress)
private unsafe nint AddThreadLocalFunction(ReadOnlySpan<byte> code, ulong guestAddress)
{
int alignedSize = BitUtils.AlignUp(code.Length, (int)MemoryBlock.GetPageSize());
int funcOffset = _localCache.Allocate(alignedSize);
Debug.Assert((funcOffset & (int)(MemoryBlock.GetPageSize() - 1)) == 0);
IntPtr funcPtr = _localCache.Pointer + funcOffset;
nint funcPtr = _localCache.Pointer + funcOffset;
code.CopyTo(new Span<byte>((void*)funcPtr, code.Length));
(_threadLocalCache ??= new()).Add(guestAddress, new(funcOffset, code.Length, funcPtr));

View file

@ -6,13 +6,13 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
{
class StackWalker : IStackWalker
{
public IEnumerable<ulong> GetCallStack(IntPtr framePointer, IntPtr codeRegionStart, int codeRegionSize, IntPtr codeRegion2Start, int codeRegion2Size)
public IEnumerable<ulong> GetCallStack(nint framePointer, nint codeRegionStart, int codeRegionSize, nint codeRegion2Start, int codeRegion2Size)
{
List<ulong> functionPointers = new();
while (true)
{
IntPtr functionPointer = Marshal.ReadIntPtr(framePointer, IntPtr.Size);
nint functionPointer = Marshal.ReadIntPtr(framePointer, nint.Size);
if ((functionPointer < codeRegionStart || functionPointer >= codeRegionStart + codeRegionSize) &&
(functionPointer < codeRegion2Start || functionPointer >= codeRegion2Start + codeRegion2Size))

View file

@ -5,6 +5,6 @@ namespace Ryujinx.Cpu.LightningJit
{
interface IStackWalker
{
IEnumerable<ulong> GetCallStack(IntPtr framePointer, IntPtr codeRegionStart, int codeRegionSize, IntPtr codeRegion2Start, int codeRegion2Size);
IEnumerable<ulong> GetCallStack(nint framePointer, nint codeRegionStart, int codeRegionSize, nint codeRegion2Start, int codeRegion2Size);
}
}

View file

@ -61,7 +61,7 @@ namespace Ryujinx.Cpu.LightningJit
return GetContext().CntpctEl0;
}
public static ulong GetFunctionAddress(IntPtr framePointer, ulong address)
public static ulong GetFunctionAddress(nint framePointer, ulong address)
{
return (ulong)Context.Translator.GetOrTranslatePointer(framePointer, address, GetContext().ExecutionMode);
}

View file

@ -10,7 +10,7 @@ namespace Ryujinx.Cpu.LightningJit.State
private readonly NativeContext _nativeContext;
internal IntPtr NativeContextPtr => _nativeContext.BasePtr;
internal nint NativeContextPtr => _nativeContext.BasePtr;
private bool _interrupted;
private readonly ICounter _counter;

View file

@ -25,7 +25,7 @@ namespace Ryujinx.Cpu.LightningJit.State
private readonly IJitMemoryBlock _block;
public IntPtr BasePtr => _block.Pointer;
public nint BasePtr => _block.Pointer;
public NativeContext(IJitMemoryAllocator allocator)
{

View file

@ -4,10 +4,10 @@ namespace Ryujinx.Cpu.LightningJit
{
class TranslatedFunction
{
public IntPtr FuncPointer { get; }
public nint FuncPointer { get; }
public ulong GuestSize { get; }
public TranslatedFunction(IntPtr funcPointer, ulong guestSize)
public TranslatedFunction(nint funcPointer, ulong guestSize)
{
FuncPointer = funcPointer;
GuestSize = guestSize;

View file

@ -98,7 +98,7 @@ namespace Ryujinx.Cpu.LightningJit
_noWxCache?.ClearEntireThreadLocalCache();
}
internal IntPtr GetOrTranslatePointer(IntPtr framePointer, ulong address, ExecutionMode mode)
internal nint GetOrTranslatePointer(nint framePointer, ulong address, ExecutionMode mode)
{
if (_noWxCache != null)
{
@ -141,7 +141,7 @@ namespace Ryujinx.Cpu.LightningJit
private TranslatedFunction Translate(ulong address, ExecutionMode mode)
{
CompiledFunction func = Compile(address, mode);
IntPtr funcPointer = JitCache.Map(func.Code);
nint funcPointer = JitCache.Map(func.Code);
return new TranslatedFunction(funcPointer, (ulong)func.GuestCodeLength);
}

View file

@ -10,31 +10,31 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Cpu.LightningJit
{
delegate void DispatcherFunction(IntPtr nativeContext, ulong startAddress);
delegate void DispatcherFunction(nint nativeContext, ulong startAddress);
/// <summary>
/// Represents a stub manager.
/// </summary>
class TranslatorStubs : IDisposable
{
private delegate ulong GetFunctionAddressDelegate(IntPtr framePointer, ulong address);
private delegate ulong GetFunctionAddressDelegate(nint framePointer, ulong address);
private readonly Lazy<IntPtr> _slowDispatchStub;
private readonly Lazy<nint> _slowDispatchStub;
private bool _disposed;
private readonly AddressTable<ulong> _functionTable;
private readonly NoWxCache _noWxCache;
private readonly GetFunctionAddressDelegate _getFunctionAddressRef;
private readonly IntPtr _getFunctionAddress;
private readonly Lazy<IntPtr> _dispatchStub;
private readonly nint _getFunctionAddress;
private readonly Lazy<nint> _dispatchStub;
private readonly Lazy<DispatcherFunction> _dispatchLoop;
/// <summary>
/// Gets the dispatch stub.
/// </summary>
/// <exception cref="ObjectDisposedException"><see cref="TranslatorStubs"/> instance was disposed</exception>
public IntPtr DispatchStub
public nint DispatchStub
{
get
{
@ -48,7 +48,7 @@ namespace Ryujinx.Cpu.LightningJit
/// Gets the slow dispatch stub.
/// </summary>
/// <exception cref="ObjectDisposedException"><see cref="TranslatorStubs"/> instance was disposed</exception>
public IntPtr SlowDispatchStub
public nint SlowDispatchStub
{
get
{
@ -138,7 +138,7 @@ namespace Ryujinx.Cpu.LightningJit
/// Generates a <see cref="DispatchStub"/>.
/// </summary>
/// <returns>Generated <see cref="DispatchStub"/></returns>
private IntPtr GenerateDispatchStub()
private nint GenerateDispatchStub()
{
List<int> branchToFallbackOffsets = new();
@ -226,7 +226,7 @@ namespace Ryujinx.Cpu.LightningJit
/// Generates a <see cref="SlowDispatchStub"/>.
/// </summary>
/// <returns>Generated <see cref="SlowDispatchStub"/></returns>
private IntPtr GenerateSlowDispatchStub()
private nint GenerateSlowDispatchStub()
{
CodeWriter writer = new();
@ -350,12 +350,12 @@ namespace Ryujinx.Cpu.LightningJit
throw new PlatformNotSupportedException();
}
IntPtr pointer = Map(writer.AsByteSpan());
nint pointer = Map(writer.AsByteSpan());
return Marshal.GetDelegateForFunctionPointer<DispatcherFunction>(pointer);
}
private IntPtr Map(ReadOnlySpan<byte> code)
private nint Map(ReadOnlySpan<byte> code)
{
if (_noWxCache != null)
{

View file

@ -46,7 +46,7 @@ namespace Ryujinx.Cpu
_mirrorAddress = (ulong)addressSpaceMirror.Pointer;
ulong endAddressMirror = _mirrorAddress + addressSpace.Size;
bool addedMirror = NativeSignalHandler.AddTrackedRegion((nuint)_mirrorAddress, (nuint)endAddressMirror, IntPtr.Zero);
bool addedMirror = NativeSignalHandler.AddTrackedRegion((nuint)_mirrorAddress, (nuint)endAddressMirror, nint.Zero);
if (!addedMirror)
{

View file

@ -14,7 +14,7 @@ namespace Ryujinx.Cpu.Signal
public int IsActive;
public nuint RangeAddress;
public nuint RangeEndAddress;
public IntPtr ActionPointer;
public nint ActionPointer;
}
[InlineArray(NativeSignalHandlerGenerator.MaxTrackedRanges)]
@ -54,8 +54,8 @@ namespace Ryujinx.Cpu.Signal
static class NativeSignalHandler
{
private static readonly IntPtr _handlerConfig;
private static IntPtr _signalHandlerPtr;
private static readonly nint _handlerConfig;
private static nint _signalHandlerPtr;
private static MemoryBlock _codeBlock;
@ -70,7 +70,7 @@ namespace Ryujinx.Cpu.Signal
config = new SignalHandlerConfig();
}
public static void InitializeSignalHandler(Func<IntPtr, IntPtr, IntPtr> customSignalHandlerFactory = null)
public static void InitializeSignalHandler(Func<nint, nint, nint> customSignalHandlerFactory = null)
{
if (_initialized)
{
@ -111,7 +111,7 @@ namespace Ryujinx.Cpu.Signal
if (customSignalHandlerFactory != null)
{
_signalHandlerPtr = customSignalHandlerFactory(IntPtr.Zero, _signalHandlerPtr);
_signalHandlerPtr = customSignalHandlerFactory(nint.Zero, _signalHandlerPtr);
}
WindowsSignalHandlerRegistration.RegisterExceptionHandler(_signalHandlerPtr);
@ -121,7 +121,7 @@ namespace Ryujinx.Cpu.Signal
}
}
private static IntPtr MapCode(ReadOnlySpan<byte> code)
private static nint MapCode(ReadOnlySpan<byte> code)
{
Debug.Assert(_codeBlock == null);
@ -139,7 +139,7 @@ namespace Ryujinx.Cpu.Signal
return ref Unsafe.AsRef<SignalHandlerConfig>((void*)_handlerConfig);
}
public static bool AddTrackedRegion(nuint address, nuint endAddress, IntPtr action)
public static bool AddTrackedRegion(nuint address, nuint endAddress, nint action)
{
Span<SignalHandlerRange> ranges = GetConfigRef().Ranges;

View file

@ -14,10 +14,10 @@ namespace Ryujinx.Cpu.Signal
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SigAction
{
public IntPtr sa_handler;
public nint sa_handler;
public SigSet sa_mask;
public int sa_flags;
public IntPtr sa_restorer;
public nint sa_restorer;
}
private const int SIGSEGV = 11;
@ -28,14 +28,14 @@ namespace Ryujinx.Cpu.Signal
private static partial int sigaction(int signum, ref SigAction sigAction, out SigAction oldAction);
[LibraryImport("libc", SetLastError = true)]
private static partial int sigaction(int signum, IntPtr sigAction, out SigAction oldAction);
private static partial int sigaction(int signum, nint sigAction, out SigAction oldAction);
[LibraryImport("libc", SetLastError = true)]
private static partial int sigemptyset(ref SigSet set);
public static SigAction GetSegfaultExceptionHandler()
{
int result = sigaction(SIGSEGV, IntPtr.Zero, out SigAction old);
int result = sigaction(SIGSEGV, nint.Zero, out SigAction old);
if (result != 0)
{
@ -45,7 +45,7 @@ namespace Ryujinx.Cpu.Signal
return old;
}
public static SigAction RegisterExceptionHandler(IntPtr action)
public static SigAction RegisterExceptionHandler(nint action)
{
SigAction sig = new()
{

View file

@ -6,17 +6,17 @@ namespace Ryujinx.Cpu.Signal
static partial class WindowsSignalHandlerRegistration
{
[LibraryImport("kernel32.dll")]
private static partial IntPtr AddVectoredExceptionHandler(uint first, IntPtr handler);
private static partial nint AddVectoredExceptionHandler(uint first, nint handler);
[LibraryImport("kernel32.dll")]
private static partial ulong RemoveVectoredExceptionHandler(IntPtr handle);
private static partial ulong RemoveVectoredExceptionHandler(nint handle);
public static IntPtr RegisterExceptionHandler(IntPtr action)
public static nint RegisterExceptionHandler(nint action)
{
return AddVectoredExceptionHandler(1, action);
}
public static bool RemoveExceptionHandler(IntPtr handle)
public static bool RemoveExceptionHandler(nint handle)
{
return RemoveVectoredExceptionHandler(handle) != 0;
}