Exemplo n.º 1
0
            protected override void BuildSetFlags()
            {
                string original_name = name;

                opcode        &= ~s_mask;
                wildcard_mask &= ~s_mask;


                //non-S version
                SetFlags = owner.DataOpHandleSetFlagsLogical_NOP;
                BuildOperand2();

                //S version
                SetFlags = owner.DataOpHandleSetFlagsLogical_NonCMP;
                opcode  |= s_mask;
                name    += "S";
                BuildOperand2();

                name    = original_name;
                opcode &= ~s_mask;
            }
Exemplo n.º 2
0
        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;
            });
        }
Exemplo n.º 3
0
 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;
     });
 }