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); }
FusionCore.DSASM.OpCode getOpCode(Operator optr) { FusionCore.DSASM.OpCode opcode = FusionCore.DSASM.OpCode.ADD; // TODO jun: perhaps a table? if (Operator.add == optr) { opcode = FusionCore.DSASM.OpCode.ADD; } else if (Operator.sub == optr) { opcode = FusionCore.DSASM.OpCode.SUB; } else if (Operator.mul == optr) { opcode = FusionCore.DSASM.OpCode.MULT; } else if (Operator.div == optr) { opcode = FusionCore.DSASM.OpCode.DIV; } else if (Operator.eq == optr) { opcode = FusionCore.DSASM.OpCode.EQ; } else if (Operator.nq == optr) { opcode = FusionCore.DSASM.OpCode.NQ; } else if (Operator.ge == optr) { opcode = FusionCore.DSASM.OpCode.GE; } else if (Operator.gt == optr) { opcode = FusionCore.DSASM.OpCode.GT; } else if (Operator.le == optr) { opcode = FusionCore.DSASM.OpCode.LE; } else if (Operator.lt == optr) { opcode = FusionCore.DSASM.OpCode.LT; } else { Debug.Assert(false); } return(opcode); }