public static void Lop3(EmitterContext context) { IOpCodeLop op = (IOpCodeLop)context.CurrOp; Operand srcA = GetSrcA(context); Operand srcB = GetSrcB(context); Operand srcC = GetSrcC(context); bool regVariant = op is OpCodeLopReg; int truthTable = regVariant ? op.RawOpCode.Extract(28, 8) : op.RawOpCode.Extract(48, 8); Operand res = Lop3Expression.GetFromTruthTable(context, srcA, srcB, srcC, truthTable); if (regVariant) { EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(36, 2)); } Operand dest = GetDest(context); context.Copy(dest, res); SetZnFlags(context, dest, op.SetCondCode, op.Extended); }
private static void EmitLop3( EmitterContext context, int truthTable, PredicateOp predOp, Operand srcA, Operand srcB, Operand srcC, int rd, int destPred, bool extended, bool writeCC) { Operand res = Lop3Expression.GetFromTruthTable(context, srcA, srcB, srcC, truthTable); EmitLopPredWrite(context, res, predOp, destPred); context.Copy(GetDest(rd), res); SetZnFlags(context, res, writeCC, extended); }