Fix mode and Reg08.H1 decoding on XMAD instruction (#1156)

This commit is contained in:
gdkchan 2020-04-25 10:40:29 -03:00 committed by GitHub
parent 34d19f381c
commit 1c9aba6de1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -598,24 +598,23 @@ namespace Ryujinx.Graphics.Shader.Instructions
bool signedA = context.CurrOp.RawOpCode.Extract(48); bool signedA = context.CurrOp.RawOpCode.Extract(48);
bool signedB = context.CurrOp.RawOpCode.Extract(49); bool signedB = context.CurrOp.RawOpCode.Extract(49);
bool highA = context.CurrOp.RawOpCode.Extract(53); bool highA = context.CurrOp.RawOpCode.Extract(53);
bool highB = false;
XmadCMode mode; bool isReg = (op is OpCodeAluReg) && !(op is OpCodeAluRegCbuf);
bool isImm = (op is OpCodeAluImm);
if (op is OpCodeAluReg) XmadCMode mode = isReg || isImm
? (XmadCMode)context.CurrOp.RawOpCode.Extract(50, 3)
: (XmadCMode)context.CurrOp.RawOpCode.Extract(50, 2);
bool highB = false;
if (isReg)
{ {
highB = context.CurrOp.RawOpCode.Extract(35); highB = context.CurrOp.RawOpCode.Extract(35);
mode = (XmadCMode)context.CurrOp.RawOpCode.Extract(50, 3);
} }
else else if (!isImm)
{ {
mode = (XmadCMode)context.CurrOp.RawOpCode.Extract(50, 2); highB = context.CurrOp.RawOpCode.Extract(52);
if (!(op is OpCodeAluImm))
{
highB = context.CurrOp.RawOpCode.Extract(52);
}
} }
Operand srcA = GetSrcA(context); Operand srcA = GetSrcA(context);