public void TestFullJit3() { VirtualMachine virtualMachine = new VirtualMachine(); int value = 1000; virtualMachine.SetRegisterValue(Registers.R1, value); Program testProgram = NiosAssembler.New().AssembleFromLines( "start: call dec", "call body", "bne r0, r1, start", "body: addi r2, r2, 1", "ret", "dec: addi r1, r1, -1", "ret"); FullJITCompiler jitCompiler = new FullJITCompiler(virtualMachine); Instruction[] funcBody = testProgram.GetInstructions(); var jittedProgram = jitCompiler.GenerateProgram( "test_program", funcBody, testProgram.FunctionTable); jitCompiler.RunJittedProgram(jittedProgram); Assert.AreEqual(virtualMachine.GetRegisterValue(Registers.R1), 0); Assert.AreEqual(virtualMachine.GetRegisterValue(Registers.R2), value); }
public void TestFullJit2() { VirtualMachine virtualMachine = new VirtualMachine(); int value = 15464; int value2 = 435351; uint memAddr = 1024; virtualMachine.SetRegisterValue(Registers.R1, (int)memAddr); virtualMachine.WriteWordToMemory(memAddr, value); virtualMachine.SetRegisterValue(Registers.R3, value2); Program testProgram = NiosAssembler.New().AssembleFromLines( "ldw r2, 0(r1)", "stw r3, 0(r1)"); FullJITCompiler jitCompiler = new FullJITCompiler(virtualMachine); Instruction[] funcBody = testProgram.GetInstructions(); var jittedProgram = jitCompiler.GenerateProgram( "test_program", funcBody, testProgram.FunctionTable); jitCompiler.RunJittedProgram(jittedProgram); Assert.AreEqual(value, virtualMachine.GetRegisterValue(Registers.R2)); Assert.AreEqual(value2, virtualMachine.ReadWordFromMemory(memAddr)); }
public void TestMarcos() { Program testProgram = NiosAssembler.New().Assemble( "movi r10, 15"); VirtualMachine virtualMachine = new VirtualMachine(); virtualMachine.Run(testProgram); Assert.AreEqual(15, virtualMachine.GetRegisterValue(Registers.R10)); }
public void TestMovia() { VirtualMachine virtualMachine = new VirtualMachine(); Program program = NiosAssembler.New().AssembleFromLines( "movia r1, 4351314"); virtualMachine.Run(program); Assert.AreEqual(4351314, virtualMachine.GetRegisterValue(Registers.R1)); }
public void TestIncorrectAssemble1() { try { Program incorrectProgram = NiosAssembler.New().AssembleFromLines( "movi r8, 50", "fcdfdf"); Assert.Fail("Expected failure"); } catch { } }
public void TestAssemblerMacros2() { VirtualMachine virtualMachine = new VirtualMachine(); Program program = NiosAssembler.New().AssembleFromLines( "movi r2, 10", "loop: call %lo(decr2)", "bne r0, r2, loop", "br end", "decr2:", "subi r2, r2, 1", "ret", "end:"); virtualMachine.Run(program); Assert.AreEqual(0, virtualMachine.GetRegisterValue(Registers.R2)); }
public void TestAssemblerMarcos() { Program testProgram = NiosAssembler.New().Assemble( "addi r2, r2, %hi(756746)"); VirtualMachine virtualMachine = new VirtualMachine(); virtualMachine.Run(testProgram); Assert.AreEqual(11, virtualMachine.GetRegisterValue(Registers.R2)); testProgram = NiosAssembler.New().AssembleFromLines( "br %lo(end)", "end: addi r3, r3, 1"); virtualMachine = new VirtualMachine(); virtualMachine.Run(testProgram); Assert.AreEqual(1, virtualMachine.GetRegisterValue(Registers.R3)); }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (!this.canClose) { e.Cancel = true; try { string codeText = this.CodeBox.Text; Program program = NiosAssembler.New().Assemble(codeText); this.virtualMachine.LoadProgram(program); this.Hide(); } catch (AssemblerException exception) { MessageBox.Show(exception.Message, "Assembler error"); } } }
public void TestAssemble2() { VirtualMachine virtualMachine = new VirtualMachine(); Program loopWithMemProgram = NiosAssembler.New().AssembleFromLines( "#Init start values", "movi r8, 50 #50 ok?", "movi r9, 0", "#Start loop", "loop: addi r8, r8, -1", "addi r9, r9, 5", "bne r0, r8, loop", "stw r9, 1024(r0)", "ldw r10, 1024(r0)"); virtualMachine.Run(loopWithMemProgram); Assert.AreEqual(50 * 5, virtualMachine.GetRegisterValue(Registers.R9)); Assert.AreEqual(50 * 5, virtualMachine.ReadWordFromMemory(1024)); Assert.AreEqual(50 * 5, virtualMachine.GetRegisterValue(Registers.R10)); }
private void File_LoadProgramFromFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog loadProgramFileDialog = new OpenFileDialog(); if (loadProgramFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string codeText = File.ReadAllText(loadProgramFileDialog.FileName); try { Program program = NiosAssembler.New().Assemble(codeText); this.virtualMachine.LoadProgram(program); } catch (AssemblerException exception) { System.Windows.MessageBox.Show(exception.Message, "Assembler error"); } } }
public void TestDataVariables() { VirtualMachine virtualMachine = new VirtualMachine(); Program program = NiosAssembler.New().AssembleFromLines( ".data", "x: .word 1337", ".text", "movia r1, x", "ldw r2, 0(r1)"); virtualMachine.Run(program); Assert.AreEqual(1337, virtualMachine.GetRegisterValue(Registers.R2)); virtualMachine.ClearMemory(); program = NiosAssembler.New().AssembleFromLines( ".data", "x: .byte 112", ".text", "movia r1, x", "ldb r2, 0(r1)"); virtualMachine.Run(program); Assert.AreEqual(112, virtualMachine.GetRegisterValue(Registers.R2)); try { program = NiosAssembler.New().AssembleFromLines( ".data", "x: .byte 300", ".text", "movia r1, x", "ldb r2, 0(r1)"); Assert.Fail("Expected exception."); } catch { Assert.IsTrue(true); } }
public void TestBne() { VirtualMachine virtualMachine = new VirtualMachine(); Program program = NiosAssembler.New().AssembleFromLines( "bne r0, r8, x", "movi r9, 1337", "br end", "x: movi r9, 4711", "end:"); //Test when true virtualMachine.SetRegisterValue(Registers.R8, 5); virtualMachine.Run(program); Assert.AreEqual(4711, virtualMachine.GetRegisterValue(Registers.R9)); //Test when false virtualMachine.SetRegisterValue(Registers.R8, 0); virtualMachine.Run(program); Assert.AreEqual(1337, virtualMachine.GetRegisterValue(Registers.R9)); }
public void TestAssemble5() { VirtualMachine virtualMachine = new VirtualMachine(); Program program = NiosAssembler.New().Assemble( new string[] { "movi r2, 10", "loop: call decr2", "addi r4, r2, 48", "call putchar", "bne r0, r2, loop", "br end", "decr2:", "subi r2, r2, 1", "ret", "end:" }, virtualMachine.SystemCalls); virtualMachine.Run(program); Assert.AreEqual(0, virtualMachine.GetRegisterValue(Registers.R2)); }
public void TestWithJittedMethod() { VirtualMachine virtualMachine = new VirtualMachine(); virtualMachine.SetRegisterValue(Registers.R2, 30000); Program testProgram = NiosAssembler.New().AssembleFromLines( "loop: call decr2", "bne r0, r2, loop", "br end", "decr2:", "addi r4, r4, 1", "addi r5, r5, 2", "addi r6, r6, 3", "subi r2, r2, 1", "ret", "end:"); virtualMachine.Run(testProgram); //var jitCompiler = new FullJITCompiler(virtualMachine); //var jittedProgram = jitCompiler.GenerateProgram("", testProgram.GetInstructions(), testProgram.FunctionTable); //jitCompiler.RunJittedProgram(jittedProgram); }
public void TestAssemble() { Program testProgram = NiosAssembler.New().AssembleFromLines( "movi r6, 10", "movi r7, 15", "add r5, r6, r7"); VirtualMachine virtualMachine = new VirtualMachine(); virtualMachine.Run(testProgram); Assert.AreEqual(10, virtualMachine.GetRegisterValue(Registers.R6)); Assert.AreEqual(15, virtualMachine.GetRegisterValue(Registers.R7)); Assert.AreEqual(25, virtualMachine.GetRegisterValue(Registers.R5)); Program loopProgram = NiosAssembler.New().AssembleFromLines( "movi r8, 50", "loop: addi r8, r8, -1", "addi r9, r9, 5", "bne r0, r8, loop"); virtualMachine.Run(loopProgram); Assert.AreEqual(50 * 5, virtualMachine.GetRegisterValue(Registers.R9)); Program loopWithMemProgram = NiosAssembler.New().AssembleFromLines( "movi r8, 50", "movi r9, 0", "loop: addi r8, r8, -1", "addi r9, r9, 5", "bne r0, r8, loop", "stw r9, 1024(r0)", "ldw r10, 1024(r0)"); virtualMachine.Run(loopWithMemProgram); Assert.AreEqual(50 * 5, virtualMachine.GetRegisterValue(Registers.R9)); Assert.AreEqual(50 * 5, virtualMachine.ReadWordFromMemory(1024)); Assert.AreEqual(50 * 5, virtualMachine.GetRegisterValue(Registers.R10)); }