aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Cpu/MemoryManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Cpu/MemoryManager.cs')
-rw-r--r--Ryujinx.Cpu/MemoryManager.cs30
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));