예제 #1
0
        public void DtbArrayAccess2()
        {
            ProcedureBuilder m = new ProcedureBuilder();
            Identifier ds = m.Local(PrimitiveType.SegmentSelector, "ds");
            Identifier bx = m.Local16("bx");
            Expression e = m.Array(PrimitiveType.Word32, m.Seq(ds, m.Word16(0x300)), m.IMul(bx, 8));
            e.Accept(eqb);

            TraitCollector coll = new TraitCollector(factory, store, dtb, program);
            e.Accept(coll);
            Verify("Typing/DtbArrayAccess2.txt");
        }
        public void CEB_SegmentedArray()
        {
            var m   = new Reko.UnitTests.Mocks.ProcedureBuilder("CEB_SegmentedArray");
            var aw  = new ArrayType(PrimitiveType.Int16, 0);
            var ds  = m.Temp(PrimitiveType.SegmentSelector, "ds");
            var bx  = m.Temp(PrimitiveType.Word16, "bx");
            var acc =
                m.Array(
                    PrimitiveType.Word16,
                    m.Seq(
                        ds,
                        m.Word16(0x5388)),
                    m.IMul(bx, 2));

            CreateTv(globals, Ptr32(factory.CreateStructureType()), Ptr32(factory.CreateStructureType()));
            CreateTv(ds, Ptr16(factory.CreateStructureType()), Ptr16(factory.CreateStructureType()));
        }
예제 #3
0
        public void CEB_SegmentedArray()
        {
            var m = new Reko.UnitTests.Mocks.ProcedureBuilder("CEB_SegmentedArray");
            var aw = new ArrayType(PrimitiveType.Int16, 0);
            var ds = m.Temp(PrimitiveType.SegmentSelector, "ds");
            var bx = m.Temp(PrimitiveType.Word16, "bx");
            var acc =
                m.Array(
                    PrimitiveType.Word16,
                    m.Seq(
                        ds,
                        m.Word16(0x5388)),
                    m.IMul(bx, 2));

            CreateTv(globals, Ptr32(factory.CreateStructureType()), Ptr32(factory.CreateStructureType()));
            CreateTv(ds, Ptr16(factory.CreateStructureType()), Ptr16(factory.CreateStructureType()));
        }
예제 #4
0
 public void TrcoArrayAccess()
 {
     ProcedureBuilder m = new ProcedureBuilder();
     Identifier ds = m.Local(PrimitiveType.SegmentSelector, "ds");
     Identifier bx = m.Local16("bx");
     Expression e = m.Array(PrimitiveType.Word32, m.Seq(ds, m.Word16(0x300)), m.IMul(bx, 8));
     coll = CreateCollector();
     e.Accept(eqb);
     e.Accept(coll);
     StringWriter sb = new StringWriter();
     handler.Traits.Write(sb);
     string sExp =
         "T_1 (in ds : selector)" + nl +
         "\ttrait_primitive(selector)" + nl +
         "\ttrait_mem_array(300, 8, 0, T_7)" + nl + 
         "T_2 (in 0x0300 : word16)" + nl +
         "	trait_primitive(word16)" + nl +
         "T_3 (in SEQ(ds, 0x0300) : ptr32)" + nl +
         "	trait_primitive(ptr32)" + nl +
         "T_4 (in bx : word16)" + nl +
         "	trait_primitive(word16)" + nl +
         "	trait_primitive(ui16)" + nl +
         "T_5 (in 0x0008 : word16)" + nl +
         "	trait_primitive(word16)" + nl +
         "	trait_primitive(ui16)" + nl +
         "T_6 (in bx * 0x0008 : word16)" + nl +
         "	trait_primitive(ui16)" + nl +
         "T_7 (in SEQ(ds, 0x0300)[bx * 0x0008] : word32)" + nl +
         "	trait_primitive(word32)" + nl;
     Assert.AreEqual(sExp, sb.ToString());
 }