Beispiel #1
0
        public void Cab_Sequence()
        {
            var m       = new SsaProcedureBuilder(nameof(Cab_Sequence));
            var r2_1    = m.Reg("r2_1", reg2);
            var r3_2    = m.Reg("r3_2", reg3);
            var r2_r3_4 = m.SeqId("r2_r3_4", PrimitiveType.Word64, reg2, reg3);

            m.Assign(r2_1, 0x0001234);
            m.Assign(r3_2, 0x5678ABCD);
            m.Assign(r2_r3_4, m.Seq(r2_1, r3_2));
            var sigCallee = FunctionType.Action(
                new Identifier("r2_r3", PrimitiveType.Word64,
                               new SequenceStorage(PrimitiveType.Word64, reg2, reg3)));
            var callee = new ProcedureConstant(
                PrimitiveType.Ptr32,
                new ExternalProcedure("callee", sigCallee));
            var stmCall = m.Call(callee, 0,
                                 new Identifier[] { r2_r3_4 },
                                 new Identifier[] { });

            m.Return();

            var cab = new CallApplicationBuilder(
                m.Ssa,
                stmCall,
                (CallInstruction)stmCall.Instruction,
                callee);
            var instr = cab.CreateInstruction(sigCallee, null);

            Assert.AreEqual("callee(r2_r3_4)", instr.ToString());
            m.Ssa.Validate(s => Assert.Fail(s));
        }
Beispiel #2
0
        public void VpSliceSeq()
        {
            var t1 = m.Temp(PrimitiveType.Word16, "t1");
            var t2 = m.Temp(PrimitiveType.Word32, "t2");
            var t3 = m.Temp(PrimitiveType.Word16, "t3");

            m.Assign(t2, m.Seq(t1, m.Mem16(m.Word32(0x00123400))));
            m.Assign(t3, m.Slice(PrimitiveType.Word16, t2, 16));

            RunValuePropagator();

            var sExp =
                #region Expected
                @"t1: orig: t1
    uses: t2 = SEQ(t1, Mem3[0x123400<32>:word16])
          t3 = t1
t2: orig: t2
    def:  t2 = SEQ(t1, Mem3[0x123400<32>:word16])
t3: orig: t3
    def:  t3 = t1
Mem3: orig: Mem0
    uses: t2 = SEQ(t1, Mem3[0x123400<32>:word16])
// SsaProcedureBuilder
// Return size: 0
define SsaProcedureBuilder
SsaProcedureBuilder_entry:
	// succ:  l1
l1:
	t2 = SEQ(t1, Mem3[0x123400<32>:word16])
	t3 = t1
SsaProcedureBuilder_exit:
";

            #endregion
            AssertStringsEqual(sExp, m.Ssa);
        }