diff options
Diffstat (limited to 'Ryujinx.Cpu/MemoryManager.cs')
| -rw-r--r-- | Ryujinx.Cpu/MemoryManager.cs | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/Ryujinx.Cpu/MemoryManager.cs b/Ryujinx.Cpu/MemoryManager.cs index 75ecca1c..abbeee5f 100644 --- a/Ryujinx.Cpu/MemoryManager.cs +++ b/Ryujinx.Cpu/MemoryManager.cs @@ -145,10 +145,36 @@ namespace Ryujinx.Cpu return; } - try + MarkRegionAsModified(va, (ulong)data.Length); + + WriteImpl(va, data); + } + + /// <summary> + /// Writes data to CPU mapped memory, without tracking. + /// </summary> + /// <param name="va">Virtual address to write the data into</param> + /// <param name="data">Data to be written</param> + public void WriteUntracked(ulong va, ReadOnlySpan<byte> data) + { + if (data.Length == 0) { - MarkRegionAsModified(va, (ulong)data.Length); + return; + } + WriteImpl(va, data); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + /// <summary> + /// Writes data to CPU mapped memory. + /// </summary> + /// <param name="va">Virtual address to write the data into</param> + /// <param name="data">Data to be written</param> + private void WriteImpl(ulong va, ReadOnlySpan<byte> data) + { + try + { if (IsContiguousAndMapped(va, data.Length)) { data.CopyTo(_backingMemory.GetSpan(GetPhysicalAddressInternal(va), data.Length)); |
