public void SwTest1() { var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 10, C.opOPIMMaddi, 0, 200); var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 11, C.opOPIMMaddi, 0, 0xFFF); var instLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 11, 0xFFFF); var instStore1 = InstructionTypeFactory.CreateSType(C.OPSTORE, C.OPSTOREsw, 10, 11, 100); var instLoad1 = InstructionTypeFactory.CreateIType(C.OPLOAD, 12, C.OPLOADlwu, 10, 100); var program = new List <byte>(); program.AddRange(instAddi1); // x10 = x0 + 200 program.AddRange(instAddi2); // x11 = <Test Content> program.AddRange(instLui1); program.AddRange(instStore1); // STORE x11 to address 100 + x10 program.AddRange(instLoad1); // x12 = LOAD (x10 + 100) core.Run(program); var register = core.Register; var x10 = register.ReadBlock(10); var x11 = register.ReadBlock(11); var x12 = register.ReadBlock(12); Assert.AreEqual(x10, new byte[] { 0xC8, 0x00, 0x00, 0x00 }); Assert.AreEqual(x11, new byte[] { 0x00, 0xF0, 0xFF, 0x0F }); Assert.AreEqual(x12, new byte[] { 0x00, 0xF0, 0xFF, 0x0F }); }
public void ShWithMaxNegativeImmedateValueTest() { int value = 2048 * -1; var bytes = BitConverter.GetBytes(value); var instLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 10, 0xFF); //var instAddi1 = InstructionTypeFactory.CreateIType(C.OPIMM, 10, C.opOPIMMaddi, 0, 0x7FF); // 2K = 2047 = 0x7FF; var instAddi2 = InstructionTypeFactory.CreateIType(C.OPIMM, 11, C.opOPIMMaddi, 0, 0x07CD); var instStore1 = InstructionTypeFactory.CreateSType(C.OPSTORE, C.OPSTOREsh, 10, 11, 0xFFFFF8); var instLoad1 = InstructionTypeFactory.CreateIType(C.OPLOAD, 12, C.OPLOADlhu, 10, 0xFFFFF8); var program = new List <byte>(); program.AddRange(instLui1); //program.AddRange(instAddi1); // x10 = x0 + 200 program.AddRange(instAddi2); // x11 = <Test Content> program.AddRange(instStore1); // STORE x11 to address 100 + x10 program.AddRange(instLoad1); // x12 = LOAD (x10 + 100) core.Run(program); var register = core.Register; var x10 = register.ReadBlock(10); var x11 = register.ReadBlock(11); var x12 = register.ReadBlock(12); Assert.AreEqual(x10, new byte[] { 0x00, 0xF0, 0x0F, 0x00 }); Assert.AreEqual(x11, new byte[] { 0xCD, 0x07, 0x00, 0x00 }); Assert.AreEqual(x12, new byte[] { 0xCD, 0x07, 0x00, 0x00 }); }
public void LuiTest3() { var insLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 1, 0xFFFFF); var program = insLui1; core.Run(program); var register = core.Register; var x1 = register.ReadBlock(1); Assert.AreEqual(x1, new byte[] { 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }); }
public void AuipcTest2() { var insAuipc2 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 2, 0x100); var program = insAuipc2; // PC = 100 core.Run(program); core.BaseAddres = 100; var register = core.Register; var x2 = register.ReadUnsignedInt(2); Assert.AreEqual(x2, 0x100100); }
public void AuipcTest2() { var insAuipc1 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 1, 0x100); var program = insAuipc1; // PC = 100 core.Run(program); core.BaseAddres = 0x100; var register = core.Register; var x1 = register.ReadBlock(1); Assert.AreEqual(x1, new byte[] { 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 }); }
public void AuipcTest3() { var insAuipc3 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 3, 0xFFF); var program = insAuipc3; // PC = 100 core.Run(program); core.BaseAddres = 100; var register = core.Register; var x3 = register.ReadUnsignedInt(3); Assert.AreEqual(x3, 0xFFF100); }
public void AuipcTest1() { var insAuipc1 = InstructionTypeFactory.CreateUType(C.OPAUIPC, 1, 0x01); var program = insAuipc1; // PC = 100 core.Run(program); core.BaseAddres = 100; var register = core.Register; var x1 = register.ReadUnsignedInt(1); Assert.AreEqual(x1, 0x1100); }
public void LuiTest1() { var insLui1 = InstructionTypeFactory.CreateUType(C.OPLUI, 1, 0x01); var insLui2 = InstructionTypeFactory.CreateUType(C.OPLUI, 2, 0x100); var program = insLui1.Concat(insLui2); core.Run(program); var register = core.Register; var x1 = register.ReadBlock(1); var x2 = register.ReadBlock(2); Assert.AreEqual(x1, new byte[] { 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); Assert.AreEqual(x2, new byte[] { 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 }); }