protected override void BuildSetFlags() { string original_name = name; opcode &= ~s_mask; wildcard_mask &= ~s_mask; //non-S version SetFlags = owner.DataOpHandleSetFlagsAWC_NOP; BuildOperand2(); //S version SetFlags = owner.DataOpHandleSetFlagsAWC_NonCMP; opcode |= s_mask; name += "S"; BuildOperand2(); name = original_name; opcode &= ~s_mask; }
internal InstructionFunc GenerateAWCDataOp(DataOpEvaluateOperand2Func EvaluateOperand2, DataOpAWCOperation AWCOp, DataOpSaveResultFunc SaveResult, DataOpHandleSetFlagsAWCFunc SetFlags) { return(delegate(uint opcode) { uint Rd = ((opcode & rd_mask) >> 12); uint Rn = ((opcode & rn_mask) >> 16); uint a = get_reg(Rn); bool shift_carry = false; uint b = EvaluateOperand2(opcode, ref shift_carry); AWCResult awcResult = AWCOp(a, b); SaveResult(Rd, awcResult.result); SetFlags(opcode, Rd, awcResult); return 1; }); }