/// <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; }
/// <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(); } }
/// <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); }
/// <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(); } }
/// <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; }
/// <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); }
/// <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; }
/// <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); }
/// <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; }