public void AddSubTest2() { // Not tested by this test. Please go to Opcode04 test if this does not work as expected var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMaddi, 1, 0xFFF); var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 3, C.opOPIMMaddi, 1, 4); // x2 = 5, x3 = 4; var instAdd = InstructionTypeFactory.CreateRType(C.OPOP, 4, C.opOPaddAndSub, 2, 3, C.opOPf7Add); // x4 = x2 + x3 // x5 = x3 - x2; // x6 = x2 - x3; List <byte> program = new List <byte>(); program.AddRange(instAddi1); program.AddRange(instAddi2); program.AddRange(instAdd); core.Run(program); var x2Value = core.Register.ReadSignedInt(2); var x3Value = core.Register.ReadSignedInt(3); var x4Value = core.Register.ReadSignedInt(4); // Check if X2 and X3 are correct Assert.AreEqual(x2Value, -1); Assert.AreEqual(x3Value, 4); // Check if X4 is correct Assert.AreEqual(x4Value, 3); }
public void SltuTest1() { // Not tested by this test. Please go to Opcode04 test if this does not work as expected var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMaddi, 1, 5); var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 3, C.opOPIMMaddi, 1, 4); var instSlt1 = InstructionTypeFactory.CreateRType(C.OPOP, 4, C.opOPsltu, 2, 3, 0); var instSlt2 = InstructionTypeFactory.CreateRType(C.OPOP, 5, C.opOPsltu, 3, 2, 0); var instSlt3 = InstructionTypeFactory.CreateRType(C.OPOP, 6, C.opOPsltu, 0, 2, C.opOPf2sra); var instSlt4 = InstructionTypeFactory.CreateRType(C.OPOP, 7, C.opOPsltu, 0, 10, C.opOPf2sra); var program = instAddi1.Concat(instAddi2).Concat(instSlt1).Concat(instSlt2).Concat(instSlt3).Concat(instSlt4); core.Run(program); var x2Value = core.Register.ReadUnsignedInt(2); var x3Value = core.Register.ReadUnsignedInt(3); var x4Value = core.Register.ReadUnsignedInt(4); var x5Value = core.Register.ReadUnsignedInt(5); var x6Value = core.Register.ReadUnsignedInt(6); var x7Value = core.Register.ReadUnsignedInt(7); Assert.AreEqual(x2Value, 5); Assert.AreEqual(x3Value, 4); Assert.AreEqual(x4Value, 0); // 5 < 4 = false Assert.AreEqual(x5Value, 1); // 4 < 5 = true Assert.AreEqual(x6Value, 1); // x1 != 0 -> true Assert.AreEqual(x7Value, 0); // x10 == 0 -> false }
public void SraTest1() { var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 1, C.opOPIMMaddi, 0, 0x01); // x1 = 0 + 1; var instSll1 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMslli, 1, 0x1F); //x2 = x1 << 32; var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 3, C.opOPIMMaddi, 2, 0x01); // x1 = 0 + 1; var instAddi3 = InstructionTypeFactory.CreateIType(C.OPIMM, 4, C.opOPIMMaddi, 0, 0x01); // x1 = 0 + 1; var instsra1 = InstructionTypeFactory.CreateRType(C.OPOP, 5, C.opOPsrlsra, 3, 4, C.opOPf2sra); // OK.. We have a 1 at the MSB and 1 at LSB. x4 has the shift counter with 1 var program = instAddi1.Concat(instSll1).Concat(instAddi2).Concat(instAddi3).Concat(instsra1); core.Run(program); var x1Value = core.Register.ReadBlock(1); var x2Value = core.Register.ReadBlock(2); var x3Value = core.Register.ReadBlock(3); var x4Value = core.Register.ReadBlock(4); var x5Value = core.Register.ReadBlock(5); Assert.AreEqual(x1Value, new byte[] { 0x01, 0x00, 0x00, 0x00 }); Assert.AreEqual(x2Value, new byte[] { 0x00, 0x00, 0x00, 0x80 }); Assert.AreEqual(x3Value, new byte[] { 0x01, 0x00, 0x00, 0x80 }); Assert.AreEqual(x4Value, new byte[] { 0x01, 0x00, 0x00, 0x00 }); Assert.AreEqual(x5Value, new byte[] { 0x00, 0x00, 0x00, 0xC0 }); }
public void LogicalXorTest1() { // Not tested by this test. Please go to Opcode04 test if this does not work as expected var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMaddi, 1, 9); var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 3, C.opOPIMMaddi, 1, 6); var instor1 = InstructionTypeFactory.CreateRType(C.OPOP, 4, C.opOPxor, 2, 3, 0); var program = instAddi1.Concat(instAddi2).Concat(instor1); core.Run(program); var x2Value = core.Register.ReadUnsignedInt(2); var x3Value = core.Register.ReadUnsignedInt(3); var x4Value = core.Register.ReadUnsignedInt(4); Assert.AreEqual(x2Value, 9); Assert.AreEqual(x3Value, 6); Assert.AreEqual(x4Value, 0x0F); }
public void SllTest1() { // Not tested by this test. Please go to Opcode04 test if this does not work as expected var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 1, C.opOPIMMaddi, 0, 1); // x1 = 1 var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMaddi, 0, 1); // x2 = 1 var instsll1 = InstructionTypeFactory.CreateRType(C.OPOP, 3, C.opOPsll, 1, 2, 0); // x1 left shift (x2) var program = instAddi1.Concat(instAddi2).Concat(instsll1); core.Run(program); var x1Value = core.Register.ReadSignedInt(1); var x2Value = core.Register.ReadSignedInt(2); var x3Value = core.Register.ReadSignedInt(3); Assert.AreEqual(x1Value, 1); Assert.AreEqual(x2Value, 1); Assert.AreEqual(x3Value, 2); }
public void SltTest1() { // Not tested by this test. Please go to Opcode04 test if this does not work as expected var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 2, C.opOPIMMaddi, 1, 5); var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 3, C.opOPIMMaddi, 1, 4); var instSlt1 = InstructionTypeFactory.CreateRType(C.OPOP, 4, C.opOPslt, 2, 3, 0); var instSlt2 = InstructionTypeFactory.CreateRType(C.OPOP, 5, C.opOPslt, 3, 2, 0); var program = instAddi1.Concat(instAddi2).Concat(instSlt1).Concat(instSlt2); core.Run(program); var x2Value = core.Register.ReadSignedInt(2); var x3Value = core.Register.ReadSignedInt(3); var x4Value = core.Register.ReadSignedInt(4); var x5Value = core.Register.ReadSignedInt(5); Assert.AreEqual(x2Value, 5); Assert.AreEqual(x3Value, 4); Assert.AreEqual(x4Value, 0); // 5 < 4 = false Assert.AreEqual(x5Value, 1); // 4 < 5 = true }