Example #1
0
        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);
        }
Example #2
0
 public void TestRemoveComments()
 {
     Assert.AreEqual("ADD r5, r6, r7", NiosAssembler.RemoveComments("ADD r5, r6, r7"));
     Assert.AreEqual("ADD r5, r6, r7 ", NiosAssembler.RemoveComments("ADD r5, r6, r7 #tja"));
     Assert.AreEqual("LDW r5, 0(r6) ", NiosAssembler.RemoveComments("LDW r5, 0(r6) #tja"));
     Assert.AreEqual("x: LDW r5, 0(r6)", NiosAssembler.RemoveComments("x: LDW r5, 0(r6)"));
 }
Example #3
0
        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));
        }
Example #4
0
 public void TestExtractInstructionAndOperands()
 {
     string[] instruction = NiosAssembler.ExtractInstructionAndOperands("x:    ADD   r5,   r6,    r7");
     Assert.AreEqual("x:", instruction[0]);
     Assert.AreEqual("ADD", instruction[1]);
     Assert.AreEqual("r5", instruction[2]);
     Assert.AreEqual("r6", instruction[3]);
     Assert.AreEqual("r7", instruction[4]);
 }
Example #5
0
        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));
        }
Example #6
0
        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));
        }
Example #7
0
        public void TestIncorrectAssemble1()
        {
            try
            {
                Program incorrectProgram = NiosAssembler.New().AssembleFromLines(
                    "movi r8, 50",
                    "fcdfdf");

                Assert.Fail("Expected failure");
            }
            catch
            {
            }
        }
Example #8
0
        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));
        }
Example #9
0
        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));
        }
Example #10
0
        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");
                }
            }
        }
Example #11
0
        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));
        }
Example #12
0
        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");
                }
            }
        }
Example #13
0
        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);
            }
        }
Example #14
0
        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));
        }
Example #15
0
        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));
        }
Example #16
0
        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);
        }
Example #17
0
        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));
        }