/// <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); }
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); }