Ejemplo n.º 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);
        }
Ejemplo n.º 2
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));
        }
Ejemplo n.º 3
0
        public void TestBenchmark()
        {
            VirtualMachine     virtualMachine  = new VirtualMachine();
            PartialJITCompiler jitCompiler     = new PartialJITCompiler(virtualMachine);
            FullJITCompiler    fullJitCompiler = new FullJITCompiler(virtualMachine);

            int count = 2000;

            Instruction[] methodBody = new Instruction[]
            {
                new IFormatInstruction(OperationCodes.Addi.Code(), 1, 1, -1).AsInstruction(),
                new IFormatInstruction(OperationCodes.Addi.Code(), 2, 2, 1).AsInstruction(),
                new IFormatInstruction(OperationCodes.Bne.Code(), 0, 1, -3 * 4).AsInstruction()
            };

            var jittedMethod = jitCompiler.GenerateMethod("", methodBody);

            TimeSpan jitTime = new TimeSpan();
            TimeSpan vmTime  = new TimeSpan();

            //Partial jitter
            virtualMachine.SetRegisterValue(Registers.R1, count);
            Stopwatch timer = Stopwatch.StartNew();

            jitCompiler.InvokeJitedMethod(jittedMethod);
            timer.Stop();

            jitTime = timer.Elapsed;

            //VM
            virtualMachine.SetRegisterValue(Registers.R1, count);

            timer = Stopwatch.StartNew();
            for (int i = 0; i < methodBody.Length; i++)
            {
                virtualMachine.ExecuteInstruction(methodBody[i].Data);
            }
            timer.Stop();

            vmTime = timer.Elapsed;
        }
 public void Initialize()
 {
     this.virtualMachine = new VirtualMachine();
     this.jitCompiler    = new FullJITCompiler(this.virtualMachine);
 }