public void TrashInLoop() { p.Add("main", m => { var eax = m.Frame.EnsureRegister(Registers.eax); var ebx = m.Frame.EnsureRegister(Registers.ebx); m.Assign(eax, 1); m.Label("Lupe"); m.Store(m.IAdd(ebx, eax), m.Word16(0)); m.Assign(eax, m.IAdd(eax, 2)); m.BranchIf(m.Le(eax, 10), "Lupe"); m.Return(); }); var sExp = @"main eax ax al ah const eax:<invalid> main_entry esp:fp l1 esp:fp l2 eax:<invalid> esp:fp Lupe eax:<invalid> esp:fp main_exit eax:<invalid> esp:fp"; RunTest(p, sExp); }
public void Exs_CompareWithConstant() { Given_ExpressionSimplifier(); var expr = m.Le(m.Word32(0x00123400), foo); Assert.AreEqual("foo_1 >= 0x123400<32>", expr.Accept(simplifier).ToString()); }
public void ProcStr_IfThen() { var r1 = m.Reg32("r1"); m.Label("head"); m.BranchIf(m.Le(r1, 0), "tail"); m.Label("doit"); m.Assign(r1, 0); m.Label("tail"); m.Return(r1); var sExp = @" if (r1 > 0x00) r1 = 0x00; return r1; "; RunTest(sExp, m.Procedure); }
public void CceMultibitCcFromPhiNode() { var sExp = #region Expected @"// ProcedureBuilder // Return size: 0 define ProcedureBuilder ProcedureBuilder_entry: def r0 def r2 // succ: l1 l1: branch r0 <= r2 m1 // succ: m0 m1 m0: r0_5 = r0 + r2 v12_18 = r0_5 == 0<32> v9_15 = r0_5 <=u 0<32> v6_12 = r0_5 >u 0<32> goto m2 // succ: m2 m1: r0_3 = r2 - r0 v13_19 = r0_3 == 0<32> v10_16 = r0_3 <=u 0<32> v7_13 = r0_3 >u 0<32> // succ: m2 m2: v11_17 = PHI((v9_15, m0), (v10_16, m1)) v8_14 = PHI((v6_12, m0), (v7_13, m1)) v14_20 = PHI((v12_18, m0), (v13_19, m1)) Mem8[0x123400<32>:int8] = CONVERT(v8_14, bool, int8) Mem9[0x123402<32>:int8] = CONVERT(v11_17, bool, int8) Mem11[0x123404<32>:int8] = CONVERT(v14_20, bool, int8) return // succ: ProcedureBuilder_exit ProcedureBuilder_exit: "; #endregion RunStringTest(sExp, m => { var r0 = m.Reg32("r0", 0); var r2 = m.Reg32("r2", 2); var CZ = m.Flags("CZ"); var Z = m.Flags("Z"); m.BranchIf(m.Le(r0, r2), "m1"); m.Label("m0"); m.Assign(r0, m.IAdd(r0, r2)); m.Assign(CZ, m.Cond(r0)); m.Goto("m2"); m.Label("m1"); m.Assign(r0, m.ISub(r2, r0)); m.Assign(CZ, m.Cond(r0)); m.Label("m2"); //m.Assign(tmp, m.Convert(m.Test(ConditionCode.UGT, CZ), PrimitiveType.Bool, PrimitiveType.SByte)); m.MStore(m.Word32(0x00123400), m.Convert(m.Test(ConditionCode.UGT, CZ), PrimitiveType.Bool, PrimitiveType.SByte)); m.MStore(m.Word32(0x00123402), m.Convert(m.Test(ConditionCode.ULE, CZ), PrimitiveType.Bool, PrimitiveType.SByte)); m.MStore(m.Word32(0x00123404), m.Convert(m.Test(ConditionCode.EQ, Z), PrimitiveType.Bool, PrimitiveType.SByte)); m.Return(); }); }