Przeglądaj źródła

gl_shader_decompiler: Implement MOV32_IMM instruction.

bunnei 8 lat temu
rodzic
commit
a7b5ab4d9a

+ 2 - 2
src/video_core/engines/shader_bytecode.h

@@ -290,7 +290,7 @@ public:
         MOV_C,
         MOV_C,
         MOV_R,
         MOV_R,
         MOV_IMM,
         MOV_IMM,
-        MOV32I,
+        MOV32_IMM,
         SHR_C,
         SHR_C,
         SHR_R,
         SHR_R,
         SHR_IMM,
         SHR_IMM,
@@ -445,7 +445,7 @@ private:
             INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"),
             INST("0100110010011---", Id::MOV_C, Type::Arithmetic, "MOV_C"),
             INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"),
             INST("0101110010011---", Id::MOV_R, Type::Arithmetic, "MOV_R"),
             INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"),
             INST("0011100-10011---", Id::MOV_IMM, Type::Arithmetic, "MOV_IMM"),
-            INST("000000010000----", Id::MOV32I, Type::Arithmetic, "MOV32I"),
+            INST("000000010000----", Id::MOV32_IMM, Type::Arithmetic, "MOV32_IMM"),
             INST("0100110000101---", Id::SHR_C, Type::Arithmetic, "SHR_C"),
             INST("0100110000101---", Id::SHR_C, Type::Arithmetic, "SHR_C"),
             INST("0101110000101---", Id::SHR_R, Type::Arithmetic, "SHR_R"),
             INST("0101110000101---", Id::SHR_R, Type::Arithmetic, "SHR_R"),
             INST("0011100-00101---", Id::SHR_IMM, Type::Arithmetic, "SHR_IMM"),
             INST("0011100-00101---", Id::SHR_IMM, Type::Arithmetic, "SHR_IMM"),

+ 5 - 0
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@@ -620,6 +620,11 @@ private:
             }
             }
 
 
             switch (opcode->GetId()) {
             switch (opcode->GetId()) {
+            case OpCode::Id::MOV32_IMM: {
+                // mov32i doesn't have abs or neg bits.
+                regs.SetRegisterToFloat(instr.gpr0, 0, GetImmediate32(instr), 1, 1);
+                break;
+            }
             case OpCode::Id::FMUL_C:
             case OpCode::Id::FMUL_C:
             case OpCode::Id::FMUL_R:
             case OpCode::Id::FMUL_R:
             case OpCode::Id::FMUL_IMM: {
             case OpCode::Id::FMUL_IMM: {