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));
        }
Esempio n. 2
0
        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();
            });
        }
Esempio n. 3
0
        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");
        }
Esempio n. 4
0
        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");
        }
Esempio n. 5
0
        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");
        }