コード例 #1
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitCJmp(int L1, int L2)
        {
            emit(FusionCore.DSASM.kw.cjmp + " " + FusionCore.DSASM.kw.regCX + " L1(" + L1 + ") L2(" + L2 + ")" + FusionCore.DSASM.Constants.termline);

            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.CJMP;

            FusionCore.DSASM.Operand op1 = new FusionCore.DSASM.Operand();
            op1.optype = FusionCore.DSASM.AddressType.Register;
            op1.opdata = (int)FusionCore.DSASM.Registers.CX;
            instr.op1  = op1;

            FusionCore.DSASM.Operand op2 = new FusionCore.DSASM.Operand();
            op2.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op2.opdata = L1;
            instr.op2  = op2;

            FusionCore.DSASM.Operand op3 = new FusionCore.DSASM.Operand();
            op3.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op3.opdata = L2;
            instr.op3  = op3;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #2
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitReturn()
        {
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.RETURN;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #3
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitPush(FusionCore.DSASM.Operand op)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.PUSH;
            instr.op1    = op;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #4
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitPop(FusionCore.DSASM.Operand op)
        {
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.POP;
            instr.op1    = op;

            // For debugging, assert here but these should raise runtime errors in the VM
            Debug.Assert(FusionCore.DSASM.AddressType.VarIndex == op.optype || FusionCore.DSASM.AddressType.Register == op.optype);

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #5
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitCall(int funcIndex)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.CALL;

            FusionCore.DSASM.Operand op = new FusionCore.DSASM.Operand();
            op.optype = FusionCore.DSASM.AddressType.FunctionIndex;
            op.opdata = funcIndex;
            instr.op1 = op;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #6
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitBinary(FusionCore.DSASM.OpCode opcode, FusionCore.DSASM.Operand op1, FusionCore.DSASM.Operand op2)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = opcode;
            instr.op1    = op1;
            instr.op2    = op2;

            // For debugging, assert here but these should raise runtime errors in the VM
            Debug.Assert(FusionCore.DSASM.AddressType.VarIndex == op1.optype || FusionCore.DSASM.AddressType.Register == op1.optype);

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #7
0
ファイル: CodeGen.cs プロジェクト: zjloscar/Dynamo
        private void emitJmp(int L1)
        {
            emit(FusionCore.DSASM.kw.jmp + " L1(" + L1 + ")" + FusionCore.DSASM.Constants.termline);

            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.JMP;

            FusionCore.DSASM.Operand op1 = new FusionCore.DSASM.Operand();
            op1.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op1.opdata = L1;
            instr.op1  = op1;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #8
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitCJmp(int L1, int L2)
        {
            emit(FusionCore.DSASM.kw.cjmp + " " + FusionCore.DSASM.kw.regCX + " L1(" + L1 + ") L2(" + L2 + ")" + FusionCore.DSASM.Constants.termline);

            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.CJMP;
            
            FusionCore.DSASM.Operand op1 = new FusionCore.DSASM.Operand();
            op1.optype = FusionCore.DSASM.AddressType.Register;
            op1.opdata = (int)FusionCore.DSASM.Registers.CX;
            instr.op1 = op1;
            
            FusionCore.DSASM.Operand op2 = new FusionCore.DSASM.Operand();
            op2.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op2.opdata = L1;
            instr.op2 = op2;

            FusionCore.DSASM.Operand op3 = new FusionCore.DSASM.Operand();
            op3.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op3.opdata = L2;
            instr.op3 = op3;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #9
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitJmp(int L1)
        {
            emit(FusionCore.DSASM.kw.jmp + " L1(" + L1 + ")" + FusionCore.DSASM.Constants.termline);

            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.JMP;

            FusionCore.DSASM.Operand op1 = new FusionCore.DSASM.Operand();
            op1.optype = FusionCore.DSASM.AddressType.LabelIndex;
            op1.opdata = L1;
            instr.op1 = op1;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #10
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitCall(int funcIndex)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.CALL;

            FusionCore.DSASM.Operand op = new FusionCore.DSASM.Operand();
            op.optype = FusionCore.DSASM.AddressType.FunctionIndex;
            op.opdata = funcIndex;
            instr.op1 = op;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #11
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitBinary(FusionCore.DSASM.OpCode opcode, FusionCore.DSASM.Operand op1, FusionCore.DSASM.Operand op2)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = opcode;
            instr.op1 = op1;
            instr.op2 = op2;

            // For debugging, assert here but these should raise runtime errors in the VM
            Debug.Assert(FusionCore.DSASM.AddressType.VarIndex == op1.optype || FusionCore.DSASM.AddressType.Register == op1.optype);

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #12
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitReturn()
        {
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.RETURN;

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #13
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitPop(FusionCore.DSASM.Operand op)
        {
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.POP;
            instr.op1 = op;

            // For debugging, assert here but these should raise runtime errors in the VM
            Debug.Assert(FusionCore.DSASM.AddressType.VarIndex == op.optype || FusionCore.DSASM.AddressType.Register == op.optype);

            pc++;
            executable.instructionList.Add(instr);
        }
コード例 #14
0
ファイル: CodeGen.cs プロジェクト: RobertiF/Dynamo
        private void emitPush(FusionCore.DSASM.Operand op)
        {
            setEntry();
            FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction();
            instr.opCode = FusionCore.DSASM.OpCode.PUSH;
            instr.op1 = op;

            pc++;
            executable.instructionList.Add(instr);
        }