Beispiel #1
0
        public override string Convert(ASM.ASMBlock theBlock)
        {
            string jmpOp             = "";
            int    numSourceOperands = 2;

            switch (BranchType)
            {
            case BranchOp.Branch:
                jmpOp             = "b";
                numSourceOperands = 0;
                break;

            case BranchOp.BranchZero:
                jmpOp             = "beqz";
                numSourceOperands = 1;
                break;

            case BranchOp.BranchNotZero:
                jmpOp = "bne";
                Src2  = "$zero";
                break;

            case BranchOp.BranchEqual:
                jmpOp = "beq";
                break;

            case BranchOp.BranchNotEqual:
                jmpOp = "bne";
                break;

            case BranchOp.BranchLessThan:
                if (UnsignedTest)
                {
                    jmpOp = "bltu";
                }
                else
                {
                    jmpOp = "blt";
                }
                break;

            case BranchOp.BranchGreaterThan:
                if (UnsignedTest)
                {
                    jmpOp = "bgtu";
                }
                else
                {
                    jmpOp = "bgt";
                }
                break;

            case BranchOp.BranchLessThanEqual:
                if (UnsignedTest)
                {
                    jmpOp = "bleu";
                }
                else
                {
                    jmpOp = "ble";
                }
                break;

            case BranchOp.BranchGreaterThanEqual:
                if (UnsignedTest)
                {
                    jmpOp = "bgeu";
                }
                else
                {
                    jmpOp = "bge";
                }
                break;
            }

            string label = theBlock.GenerateMethodLabel() + theBlock.GenerateILOpLabel(DestILPosition, Extension);

            if (numSourceOperands == 2)
            {
                return(jmpOp + " " + Src1 + ", " + Src2 + ", " + label + "\nnop");
            }
            else if (numSourceOperands == 1)
            {
                return(jmpOp + " " + Src1 + ", " + label + "\nnop");
            }
            else
            {
                return(jmpOp + " " + label + "\nnop");
            }
        }