Ejemplo n.º 1
0
        public override void Assemble(CodeGenerator cgen, Instruction ins, BytecodeStream str)
        {
            if (ins.Operands.Count != 1)
            {
                cgen.CreateError("Instruction {0} does not take {1} operand(s)!", ins.Name, ins.Operands.Count);
            }
            else if (ins.Operands[0] is TokenIdentifier)
            {
                TokenIdentifier     label = ins.Operands[0] as TokenIdentifier;
                QuasarConditionCode code  = QuasarConditionCode.NONE;
                switch (ins.Name)
                {
                case "bc":
                    code = QuasarConditionCode.C;
                    break;

                case "bs":
                    code = QuasarConditionCode.N;
                    break;

                case "bv":
                    code = QuasarConditionCode.V;
                    break;

                case "bz":
                    code = QuasarConditionCode.Z;
                    break;

                case "be":
                    code = QuasarConditionCode.EQ;
                    break;

                case "bne":
                    code = QuasarConditionCode.NE;
                    break;

                case "ba":
                    code = QuasarConditionCode.AB;
                    break;

                case "bb":
                    code = QuasarConditionCode.BL;
                    break;

                case "bl":
                    code = QuasarConditionCode.LT;
                    break;

                case "bg":
                    code = QuasarConditionCode.GT;
                    break;

                case "ble":
                    code = QuasarConditionCode.LE;
                    break;

                case "bge":
                    code = QuasarConditionCode.GE;
                    break;
                }
                str.Emit(new QuasarInstruction(Opcode.BR, new ConditionCodeOperand(code), new SymbolReferenceOperand(label.Value, true)));
            }
        }
Ejemplo n.º 2
0
 public ConditionCodeOperand(QuasarConditionCode code)
 {
     this.condition = (int)code;
 }