let MemoryManagerHostTracked override WriteImpl()
This commit is contained in:
parent
e2485ee46c
commit
004af6bc3c
2 changed files with 29 additions and 29 deletions
|
@ -193,34 +193,6 @@ namespace Ryujinx.Cpu.Jit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WriteImpl(ulong va, ReadOnlySpan<byte> data)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
AssertValidAddressAndSize(va, (ulong)data.Length);
|
|
||||||
|
|
||||||
ulong endVa = va + (ulong)data.Length;
|
|
||||||
int offset = 0;
|
|
||||||
|
|
||||||
while (va < endVa)
|
|
||||||
{
|
|
||||||
(MemoryBlock memory, ulong rangeOffset, ulong copySize) = GetMemoryOffsetAndSize(va, (ulong)(data.Length - offset));
|
|
||||||
|
|
||||||
data.Slice(offset, (int)copySize).CopyTo(memory.GetSpan(rangeOffset, (int)copySize));
|
|
||||||
|
|
||||||
va += copySize;
|
|
||||||
offset += (int)copySize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (InvalidMemoryRegionException)
|
|
||||||
{
|
|
||||||
if (_invalidAccessHandler == null || !_invalidAccessHandler(va))
|
|
||||||
{
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override ReadOnlySpan<byte> GetSpan(ulong va, int size, bool tracked = false)
|
public override ReadOnlySpan<byte> GetSpan(ulong va, int size, bool tracked = false)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
|
@ -559,6 +531,34 @@ namespace Ryujinx.Cpu.Jit
|
||||||
protected override Span<byte> GetPhysicalAddressSpan(nuint pa, int size)
|
protected override Span<byte> GetPhysicalAddressSpan(nuint pa, int size)
|
||||||
=> _backingMemory.GetSpan(pa, size);
|
=> _backingMemory.GetSpan(pa, size);
|
||||||
|
|
||||||
|
protected override void WriteImpl(ulong va, ReadOnlySpan<byte> data)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AssertValidAddressAndSize(va, (ulong)data.Length);
|
||||||
|
|
||||||
|
ulong endVa = va + (ulong)data.Length;
|
||||||
|
int offset = 0;
|
||||||
|
|
||||||
|
while (va < endVa)
|
||||||
|
{
|
||||||
|
(MemoryBlock memory, ulong rangeOffset, ulong copySize) = GetMemoryOffsetAndSize(va, (ulong)(data.Length - offset));
|
||||||
|
|
||||||
|
data.Slice(offset, (int)copySize).CopyTo(memory.GetSpan(rangeOffset, (int)copySize));
|
||||||
|
|
||||||
|
va += copySize;
|
||||||
|
offset += (int)copySize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidMemoryRegionException)
|
||||||
|
{
|
||||||
|
if (_invalidAccessHandler == null || !_invalidAccessHandler(va))
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override nuint TranslateVirtualAddressChecked(ulong va)
|
protected override nuint TranslateVirtualAddressChecked(ulong va)
|
||||||
=> (nuint)GetPhysicalAddressChecked(va);
|
=> (nuint)GetPhysicalAddressChecked(va);
|
||||||
|
|
||||||
|
|
|
@ -365,7 +365,7 @@ namespace Ryujinx.Memory
|
||||||
protected static void ThrowMemoryNotContiguous()
|
protected static void ThrowMemoryNotContiguous()
|
||||||
=> throw new MemoryNotContiguousException();
|
=> throw new MemoryNotContiguousException();
|
||||||
|
|
||||||
private void WriteImpl(ulong va, ReadOnlySpan<byte> data)
|
protected virtual void WriteImpl(ulong va, ReadOnlySpan<byte> data)
|
||||||
{
|
{
|
||||||
AssertValidAddressAndSize(va, data.Length);
|
AssertValidAddressAndSize(va, data.Length);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue