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); }
private void emitReturn() { FusionCore.DSASM.Instruction instr = new FusionCore.DSASM.Instruction(); instr.opCode = FusionCore.DSASM.OpCode.RETURN; pc++; executable.instructionList.Add(instr); }
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); }
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); }
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); }
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); }
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); }