aboutsummaryrefslogtreecommitdiff
path: root/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-03-10 20:39:16 -0300
committergdkchan <gab.dark.100@gmail.com>2018-03-10 20:39:16 -0300
commit3777fb44cf03d05fdedee00f1a19d30fac73b31b (patch)
tree315dc98309bc19c05ee6ac79d1648ddfa2a87964 /ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
parent553f6c2976818b3abcd0fd09de582dc71f03736e (diff)
Allow to enable/disable memory checks even on release mode through the flag, return error for invalid addresses on SvcMap*Memory svcs, do not return error on SvcQueryMemory (instead, return reserved for the end of the address space), other minor tweaks
Diffstat (limited to 'ChocolArm64/Instruction/AInstEmitMemoryHelper.cs')
-rw-r--r--ChocolArm64/Instruction/AInstEmitMemoryHelper.cs86
1 files changed, 68 insertions, 18 deletions
diff --git a/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs b/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
index d5a0051b..6ffcf2dc 100644
--- a/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
+++ b/ChocolArm64/Instruction/AInstEmitMemoryHelper.cs
@@ -45,21 +45,46 @@ namespace ChocolArm64.Instruction
{
switch (Size)
{
- case 0: Name = nameof(AMemory.ReadVector8); break;
- case 1: Name = nameof(AMemory.ReadVector16); break;
- case 2: Name = nameof(AMemory.ReadVector32); break;
- case 3: Name = nameof(AMemory.ReadVector64); break;
- case 4: Name = nameof(AMemory.ReadVector128); break;
+ case 0: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadVector8Unchecked)
+ : nameof(AMemory.ReadVector8); break;
+
+ case 1: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadVector16Unchecked)
+ : nameof(AMemory.ReadVector16); break;
+
+ case 2: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadVector32Unchecked)
+ : nameof(AMemory.ReadVector32); break;
+
+ case 3: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadVector64Unchecked)
+ : nameof(AMemory.ReadVector64); break;
+
+ case 4: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadVector128Unchecked)
+ : nameof(AMemory.ReadVector128); break;
}
}
else
{
switch (Size)
{
- case 0: Name = nameof(AMemory.ReadByte); break;
- case 1: Name = nameof(AMemory.ReadUInt16); break;
- case 2: Name = nameof(AMemory.ReadUInt32); break;
- case 3: Name = nameof(AMemory.ReadUInt64); break;
+ case 0: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadByteUnchecked)
+ : nameof(AMemory.ReadByte); break;
+
+ case 1: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadUInt16Unchecked)
+ : nameof(AMemory.ReadUInt16); break;
+
+ case 2: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadUInt32Unchecked)
+ : nameof(AMemory.ReadUInt32); break;
+
+ case 3: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.ReadUInt64Unchecked)
+ : nameof(AMemory.ReadUInt64); break;
}
}
@@ -107,21 +132,46 @@ namespace ChocolArm64.Instruction
{
switch (Size)
{
- case 0: Name = nameof(AMemory.WriteVector8); break;
- case 1: Name = nameof(AMemory.WriteVector16); break;
- case 2: Name = nameof(AMemory.WriteVector32); break;
- case 3: Name = nameof(AMemory.WriteVector64); break;
- case 4: Name = nameof(AMemory.WriteVector128); break;
+ case 0: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteVector8Unchecked)
+ : nameof(AMemory.WriteVector8); break;
+
+ case 1: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteVector16Unchecked)
+ : nameof(AMemory.WriteVector16); break;
+
+ case 2: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteVector32Unchecked)
+ : nameof(AMemory.WriteVector32); break;
+
+ case 3: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteVector64Unchecked)
+ : nameof(AMemory.WriteVector64); break;
+
+ case 4: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteVector128Unchecked)
+ : nameof(AMemory.WriteVector128); break;
}
}
else
{
switch (Size)
{
- case 0: Name = nameof(AMemory.WriteByte); break;
- case 1: Name = nameof(AMemory.WriteUInt16); break;
- case 2: Name = nameof(AMemory.WriteUInt32); break;
- case 3: Name = nameof(AMemory.WriteUInt64); break;
+ case 0: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteByteUnchecked)
+ : nameof(AMemory.WriteByte); break;
+
+ case 1: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteUInt16Unchecked)
+ : nameof(AMemory.WriteUInt16); break;
+
+ case 2: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteUInt32Unchecked)
+ : nameof(AMemory.WriteUInt32); break;
+
+ case 3: Name = AOptimizations.DisableMemoryChecks
+ ? nameof(AMemory.WriteUInt64Unchecked)
+ : nameof(AMemory.WriteUInt64); break;
}
}