gl_shader_decompiler: Partially implement MUFU.

This commit is contained in:
bunnei 2018-04-10 00:02:12 -04:00
parent 5b9bcbf438
commit 5d529698c9

View File

@ -270,6 +270,17 @@ private:
SetDest(0, dest, op_a + " + " + op_b, 1, 1); SetDest(0, dest, op_a + " + " + op_b, 1, 1);
break; break;
} }
case OpCode::Id::MUFU: {
switch (instr.sub_op) {
case SubOp::Rcp:
SetDest(0, dest, "1.0 / " + op_a, 1, 1);
break;
default:
LOG_ERROR(HW_GPU, "Unhandled sub op: 0x%02x", (int)instr.sub_op.Value());
throw DecompileFail("Unhandled sub op");
}
break;
}
default: { default: {
LOG_CRITICAL(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x", LOG_CRITICAL(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x",
static_cast<unsigned>(instr.opcode.EffectiveOpCode()), static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
@ -298,7 +309,6 @@ private:
SetDest(0, dest, op_a + " * " + op_b + " + " + op_c, 1, 1); SetDest(0, dest, op_a + " * " + op_b + " + " + op_c, 1, 1);
break; break;
} }
default: { default: {
LOG_CRITICAL(HW_GPU, "Unhandled arithmetic FFMA instruction: 0x%02x (%s): 0x%08x", LOG_CRITICAL(HW_GPU, "Unhandled arithmetic FFMA instruction: 0x%02x (%s): 0x%08x",
static_cast<unsigned>(instr.opcode.EffectiveOpCode()), static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
@ -347,7 +357,6 @@ private:
LOG_CRITICAL(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", LOG_CRITICAL(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x",
static_cast<unsigned>(instr.opcode.EffectiveOpCode()), static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
OpCode::GetInfo(instr.opcode).name.c_str(), instr.hex); OpCode::GetInfo(instr.opcode).name.c_str(), instr.hex);
throw DecompileFail("Unhandled instruction");
break; break;
} }
} }