public void Rl_Shift() { Identifier cl = f.EnsureRegister(Registers.cl); Identifier ax = f.EnsureRegister(Registers.ax); m.MStore(m.Int16(0x01F0300), ax).Instruction.Accept(rl); // force ax to be live. m.Assign(ax, m.Shl(ax, cl)).Accept(rl); // ax, cl should be live in. Assert.AreEqual(" ax cl", Dump(rl.IdentifierLiveness)); }
public void CceShlRcl_Through_Alias() { var sExp = #region Expected @"// ProcedureBuilder // Return size: 0 define ProcedureBuilder ProcedureBuilder_entry: def r1 def r0 // succ: l1 l1: v9_13 = SEQ(r0, r1) << 1<8> r1_2 = SLICE(v9_13, word16, 0) r0_7 = SLICE(v9_13, word16, 16) Mem9[0x1234<16>:word16] = r0_7 Mem10[0x1236<16>:word16] = r1_2 return // succ: ProcedureBuilder_exit ProcedureBuilder_exit: "; #endregion RunStringTest(sExp, m => { var RolC = new ProcedureConstant(PrimitiveType.Ptr32, new IntrinsicProcedure( IntrinsicProcedure.RolC, true, PrimitiveType.Word16, 3)); var r1 = m.Reg16("r1", 1); var r0 = m.Reg16("r0", 0); var psw = new RegisterStorage("psw", 2, 0, PrimitiveType.Word16); var C = m.Frame.EnsureFlagGroup(new FlagGroupStorage(psw, 1, "C", PrimitiveType.Bool)); var NZVC = m.Frame.EnsureFlagGroup(new FlagGroupStorage(psw, 0xF, "NZVC", PrimitiveType.Word16)); var tmp = m.Frame.CreateTemporary("tmp", PrimitiveType.Word16); m.Assign(r1, m.Shl(r1, m.Int16(1))); m.Assign(NZVC, m.Cond(r1)); m.Assign(tmp, r0); m.Assign(r0, m.Fn(RolC, r0, m.Int16(1), C)); m.Assign(C, m.Ne0(m.And(tmp, m.Word16(0x8000)))); m.MStore(m.Word16(0x1234), r0); m.MStore(m.Word16(0x1236), r1); m.Return(); }); }
public void CpaConstantMemberPointer() { ProgramBuilder prog = new ProgramBuilder(); ProcedureBuilder m = new ProcedureBuilder(); Identifier ds = m.Local16("ds"); ds.DataType = PrimitiveType.SegmentSelector; Identifier bx = m.Local16("bx"); m.Assign(bx, 0x1234); m.Store(m.SegMemW(ds, bx), m.Int16(0x0042)); prog.Add(m); RunTest(prog.BuildProgram(), "Typing/CpaConstantMemberPointer.txt"); }
public void TrcoSegmentedDirectAddress() { Program prog = CreateProgram(); prog.TypeStore.EnsureExpressionTypeVariable(prog.TypeFactory, prog.Globals); ProcedureBuilder m = new ProcedureBuilder(); Identifier ds = m.Local16("ds"); Expression e = m.SegMem(PrimitiveType.Byte, ds, m.Int16(0x0200)); coll = CreateCollector(prog); e = e.Accept(en); e.Accept(eqb); e.Accept(coll); Verify(null, "Typing/TrcoSegmentedDirectAddress.txt"); }
public void DtbSegmentedDirectAddress() { ProcedureBuilder m = new ProcedureBuilder(); var arch = new Reko.Arch.X86.X86ArchitectureReal(); var prog = new Program { Architecture = arch, Platform = new DefaultPlatform(null, arch) }; store.EnsureExpressionTypeVariable(factory, prog.Globals); Identifier ds = m.Local16("ds"); Expression e = m.SegMem(PrimitiveType.Byte, ds, m.Int16(0x0200)); TraitCollector coll = new TraitCollector(factory, store, dtb, prog); e = e.Accept(aen); e.Accept(eqb); e.Accept(coll); dtb.BuildEquivalenceClassDataTypes(); Verify("Typing/DtbSegmentedDirectAddress.txt"); }