예제 #1
0
 /// <summary>
 /// Inserts the instruction after.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 /// <param name="result">The result.</param>
 public void AppendInstruction(IInstruction instruction, IR.ConditionCode code, Operand result)
 {
     AppendInstruction();
     SetInstruction(instruction, result);
     ConditionCode = code;
     Result        = result;
 }
예제 #2
0
        /// <summary>
        /// Gets the opposite condition code.
        /// </summary>
        /// <param name="conditionCode">The condition code.</param>
        /// <returns></returns>
        protected static IR.ConditionCode GetOppositeConditionCode(IR.ConditionCode conditionCode)
        {
            switch (conditionCode)
            {
            case IR.ConditionCode.Equal: return(IR.ConditionCode.NotEqual);

            case IR.ConditionCode.NotEqual: return(IR.ConditionCode.Equal);

            case IR.ConditionCode.GreaterOrEqual: return(IR.ConditionCode.LessThan);

            case IR.ConditionCode.GreaterThan: return(IR.ConditionCode.LessOrEqual);

            case IR.ConditionCode.LessOrEqual: return(IR.ConditionCode.GreaterThan);

            case IR.ConditionCode.LessThan: return(IR.ConditionCode.GreaterOrEqual);

            case IR.ConditionCode.UnsignedGreaterOrEqual: return(IR.ConditionCode.UnsignedLessThan);

            case IR.ConditionCode.UnsignedGreaterThan: return(IR.ConditionCode.UnsignedLessOrEqual);

            case IR.ConditionCode.UnsignedLessOrEqual: return(IR.ConditionCode.UnsignedGreaterThan);

            case IR.ConditionCode.UnsignedLessThan: return(IR.ConditionCode.UnsignedGreaterOrEqual);

            case IR.ConditionCode.Signed: return(IR.ConditionCode.NotSigned);

            case IR.ConditionCode.NotSigned: return(IR.ConditionCode.Signed);

            default: throw new NotSupportedException();
            }
        }
예제 #3
0
        /// <summary>
        /// Gets the unsigned condition code.
        /// </summary>
        /// <param name="conditionCode">The condition code to get an unsigned form from.</param>
        /// <returns>The unsigned form of the given condition code.</returns>
        protected IR.ConditionCode GetUnsignedConditionCode(IR.ConditionCode conditionCode)
        {
            switch (conditionCode)
            {
            case IR.ConditionCode.Equal: break;

            case IR.ConditionCode.NotEqual: break;

            case IR.ConditionCode.GreaterOrEqual: return(IR.ConditionCode.UnsignedGreaterOrEqual);

            case IR.ConditionCode.GreaterThan: return(IR.ConditionCode.UnsignedGreaterThan);

            case IR.ConditionCode.LessOrEqual: return(IR.ConditionCode.UnsignedLessOrEqual);

            case IR.ConditionCode.LessThan: return(IR.ConditionCode.UnsignedLessThan);

            case IR.ConditionCode.UnsignedGreaterOrEqual: break;

            case IR.ConditionCode.UnsignedGreaterThan: break;

            case IR.ConditionCode.UnsignedLessOrEqual: break;

            case IR.ConditionCode.UnsignedLessThan: break;

            default: throw new NotSupportedException();
            }

            return(conditionCode);
        }
예제 #4
0
        /// <summary>
        /// Gets the condition string.
        /// </summary>
        /// <param name="conditioncode">The conditioncode.</param>
        /// <returns></returns>
        protected string GetConditionString(IR.ConditionCode conditioncode)
        {
            switch (conditioncode)
            {
            case IR.ConditionCode.Equal: return(@"equal");

            case IR.ConditionCode.GreaterOrEqual: return(@"greater or equal");

            case IR.ConditionCode.GreaterThan: return(@"greater");

            case IR.ConditionCode.LessOrEqual: return(@"less or equal");

            case IR.ConditionCode.LessThan: return(@"less");

            case IR.ConditionCode.NotEqual: return(@"not equal");

            case IR.ConditionCode.UnsignedGreaterOrEqual: return(@"greater or equal (U)");

            case IR.ConditionCode.UnsignedGreaterThan: return(@"greater (U)");

            case IR.ConditionCode.UnsignedLessOrEqual: return(@"less or equal (U)");

            case IR.ConditionCode.UnsignedLessThan: return(@"less (U)");

            case IR.ConditionCode.NotSigned: return(@"unsigned");

            case IR.ConditionCode.Signed: return(@"signed");

            default: throw new NotSupportedException();
            }
        }
예제 #5
0
 /// <summary>
 /// Inserts the instruction after.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 /// <param name="block">The block.</param>
 /// <param name="branchHint">if set to <c>true</c> [branch hint].</param>
 public void AppendInstruction(IInstruction instruction, IR.ConditionCode code, BasicBlock block, bool branchHint)
 {
     AppendInstruction(instruction, code, block);
     BranchHint = branchHint;
 }
예제 #6
0
 /// <summary>
 /// Inserts the instruction after.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 /// <param name="block">The block.</param>
 public void AppendInstruction(IInstruction instruction, IR.ConditionCode code, BasicBlock block)
 {
     AppendInstruction();
     SetInstruction(instruction, code, block);
 }
예제 #7
0
 /// <summary>
 /// Inserts the instruction after.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 public void AppendInstruction(IInstruction instruction, IR.ConditionCode code)
 {
     AppendInstruction();
     SetInstruction(instruction);
     ConditionCode = code;
 }
예제 #8
0
 /// <summary>
 /// Sets the instruction.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 /// <param name="block">The block.</param>
 public void SetInstruction(IInstruction instruction, IR.ConditionCode code, BasicBlock block)
 {
     SetInstruction(instruction);
     ConditionCode = code;
     SetBranch(block);
 }
예제 #9
0
 /// <summary>
 /// Sets the instruction.
 /// </summary>
 /// <param name="instruction">The instruction.</param>
 /// <param name="code">The code.</param>
 public void SetInstruction(IInstruction instruction, IR.ConditionCode code)
 {
     SetInstruction(instruction);
     ConditionCode = code;
 }