Пример #1
0
        /// <summary>
        /// Decodes and emites the given I-format instruction
        /// </summary>
        /// <param name="index">The index of the instruction</param>
        /// <param name="instructionData">The instruction data</param>
        /// <param name="generatorData">The generator data</param>
        /// <param name="emiter">The emiter</param>
        private void DecodeAndEmitIFormat(int index, int instructionData, MethodGeneratorData generatorData, InstructionEmiter emiter)
        {
            //Decode and emit it
            IFormatInstruction instruction = IFormatInstruction.Decode(instructionData);

            emiter.IFormatInstructionEmiter(index, instruction, generatorData);
        }
Пример #2
0
        public void TestIFormat()
        {
            IFormatInstruction test        = new IFormatInstruction(9, 12, 16, 1343);
            IFormatInstruction decodedTest = IFormatInstruction.Decode(test.Encode());

            Assert.AreEqual(test.OpCode, decodedTest.OpCode);
            Assert.AreEqual(test.RegisterA, decodedTest.RegisterA);
            Assert.AreEqual(test.RegisterB, decodedTest.RegisterB);
            Assert.AreEqual(test.Immediate, decodedTest.Immediate);

            Assert.AreEqual(9, decodedTest.OpCode);
            Assert.AreEqual(12, decodedTest.RegisterA);
            Assert.AreEqual(16, decodedTest.RegisterB);
            Assert.AreEqual(1343, decodedTest.Immediate);

            test        = new IFormatInstruction(25, 12, 16, -1);
            decodedTest = IFormatInstruction.Decode(test.Encode());
            Assert.AreEqual(test.OpCode, decodedTest.OpCode);
            Assert.AreEqual(test.RegisterA, decodedTest.RegisterA);
            Assert.AreEqual(test.RegisterB, decodedTest.RegisterB);
            Assert.AreEqual(test.SignedImmediate, decodedTest.SignedImmediate);

            Assert.AreEqual(25, decodedTest.OpCode);
            Assert.AreEqual(12, decodedTest.RegisterA);
            Assert.AreEqual(16, decodedTest.RegisterB);
            Assert.AreEqual(-1, decodedTest.SignedImmediate);

            test        = new IFormatInstruction(25, 12, 16, -256);
            decodedTest = IFormatInstruction.Decode(test.Encode());
            Assert.AreEqual(test.OpCode, decodedTest.OpCode);
            Assert.AreEqual(test.RegisterA, decodedTest.RegisterA);
            Assert.AreEqual(test.RegisterB, decodedTest.RegisterB);
            Assert.AreEqual(test.SignedImmediate, decodedTest.SignedImmediate);

            Assert.AreEqual(25, decodedTest.OpCode);
            Assert.AreEqual(12, decodedTest.RegisterA);
            Assert.AreEqual(16, decodedTest.RegisterB);
            Assert.AreEqual(-256, decodedTest.SignedImmediate);

            test        = new IFormatInstruction(OperationCodes.Bne.Code(), Registers.R0.Number(), Registers.R8.Number(), -8);
            decodedTest = IFormatInstruction.Decode(test.Encode());
            Assert.AreEqual(test.OpCode, decodedTest.OpCode);
            Assert.AreEqual(test.RegisterA, decodedTest.RegisterA);
            Assert.AreEqual(test.RegisterB, decodedTest.RegisterB);
            Assert.AreEqual(test.SignedImmediate, decodedTest.SignedImmediate);

            Assert.AreEqual(OperationCodes.Bne.Code(), decodedTest.OpCode);
            Assert.AreEqual(0, decodedTest.RegisterA);
            Assert.AreEqual(8, decodedTest.RegisterB);
            Assert.AreEqual(-8, decodedTest.SignedImmediate);

            test        = new IFormatInstruction(25, 12, 16, 40512);
            decodedTest = IFormatInstruction.Decode(test.Encode());
            Assert.AreEqual(test.Immediate, decodedTest.Immediate);
            Assert.AreEqual(40512, decodedTest.Immediate);
        }