public void SliceMem0()
		{
			var s = new Slice(PrimitiveType.Word16,
				new MemoryAccess(MemoryIdentifier.GlobalMemory,
				new Identifier("ptr", PrimitiveType.Word32, null), PrimitiveType.Word32), 0);
			var r = new SliceMem_Rule();
			Assert.IsTrue(r.Match(s));
			var e = r.Transform();
			Assert.AreEqual("Mem0[ptr + 0x00000000:word16]", e.ToString());
		}
Beispiel #2
0
        public virtual Expression VisitSlice(Slice slice)
        {
            slice.Expression = slice.Expression.Accept(this);
            if (sliceConst.Match(slice))
            {
                Changed = true;
                return(sliceConst.Transform());
            }
            if (sliceMem.Match(slice))
            {
                Changed = true;
                return(sliceMem.Transform());
            }

            // (slice (shl e n) n) ==> e
            if (sliceShift.Match(slice))
            {
                Changed = true;
                return(sliceShift.Transform());
            }
            return(slice);
        }
Beispiel #3
0
        public virtual Expression VisitSlice(Slice slice)
        {
            var e = slice.Expression.Accept(this);

            slice = new Slice(slice.DataType, e, slice.Offset);
            if (sliceConst.Match(slice))
            {
                Changed = true;
                return(sliceConst.Transform());
            }
            if (sliceMem.Match(slice))
            {
                Changed = true;
                return(sliceMem.Transform());
            }

            // (slice (shl e n) n) ==> e
            if (sliceShift.Match(slice))
            {
                Changed = true;
                return(sliceShift.Transform());
            }
            return(slice);
        }