Jelajahi Sumber

Update StoreConstantToMemory to match StoreConstantToAddress on value read (#6642)

WilliamWsyHK 2 tahun lalu
induk
melakukan
22e3ff06b5

+ 4 - 2
src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/StoreConstantToMemory.cs

@@ -15,7 +15,8 @@ namespace Ryujinx.HLE.HOS.Tamper.CodeEmitters
         private const int OffsetRegisterIndex = 6;
         private const int OffsetRegisterIndex = 6;
         private const int ValueImmediateIndex = 8;
         private const int ValueImmediateIndex = 8;
 
 
-        private const int ValueImmediateSize = 16;
+        private const int ValueImmediateSize8 = 8;
+        private const int ValueImmediateSize16 = 16;
 
 
         public static void Emit(byte[] instruction, CompilationContext context)
         public static void Emit(byte[] instruction, CompilationContext context)
         {
         {
@@ -31,7 +32,8 @@ namespace Ryujinx.HLE.HOS.Tamper.CodeEmitters
             Register sourceRegister = context.GetRegister(instruction[AddressRegisterIndex]);
             Register sourceRegister = context.GetRegister(instruction[AddressRegisterIndex]);
             byte incrementAddressRegister = instruction[IncrementAddressRegisterIndex];
             byte incrementAddressRegister = instruction[IncrementAddressRegisterIndex];
             byte useOffsetRegister = instruction[UseOffsetRegisterIndex];
             byte useOffsetRegister = instruction[UseOffsetRegisterIndex];
-            ulong immediate = InstructionHelper.GetImmediate(instruction, ValueImmediateIndex, ValueImmediateSize);
+            int valueImmediateSize = operationWidth <= 4 ? ValueImmediateSize8 : ValueImmediateSize16;
+            ulong immediate = InstructionHelper.GetImmediate(instruction, ValueImmediateIndex, valueImmediateSize);
             Value<ulong> storeValue = new(immediate);
             Value<ulong> storeValue = new(immediate);
 
 
             Pointer destinationMemory;
             Pointer destinationMemory;