Пример #1
0
        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);
        }
Пример #2
0
 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);
 }