static internal InstructionFunc GenerateLogicalDataOpUnary( DataOpEvaluateOperand2Func EvaluateOperand2, DataOpLogicalUnary UnaryOp, DataOpSaveResultFunc SaveResult, DataOpHandleSetFlagsFunc SetFlags) { return(delegate(uint opcode) { uint Rd = ((opcode & rd_mask) >> 12); //Unary operations only have operand 2 (which is denoted by b everywhere else) bool shift_carry = false; uint operand = EvaluateOperand2(opcode, ref shift_carry); uint result = UnaryOp(operand); SaveResult(Rd, result); SetFlags(opcode, Rd, result, shift_carry); return 1; }); }
//Phase 1, calls BuildSetFlags protected virtual void BuildSaveResult() { SaveResult = owner.DataOpSaveResult; BuildSetFlags(); }
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; }); }
internal InstructionFunc GenerateLogicalDataOpBinary(DataOpEvaluateOperand2Func EvaluateOperand2, DataOpLogicalBinary BinaryOp, DataOpSaveResultFunc SaveResult, DataOpHandleSetFlagsFunc 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); uint result = BinaryOp(a, b); SaveResult(Rd, result); SetFlags(opcode, Rd, result, shift_carry); return 1; }); }