예제 #1
0
파일: Loop.cs 프로젝트: rmhasan/FlingOS
 public override string Convert(ASM.ASMBlock theBlock)
 {
     return "loop " + theBlock.GenerateILOpLabel(ILPosition, Extension);
 }
예제 #2
0
파일: Branch.cs 프로젝트: rmhasan/FlingOS
        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";
            }
        }
예제 #3
0
파일: Jmp.cs 프로젝트: rmhasan/FlingOS
        public override string Convert(ASM.ASMBlock theBlock)
        {
            string jmpOp = "";
            switch (JumpType)
            {
                case JmpOp.Jump:
                    jmpOp = "jmp";
                    break;
                case JmpOp.JumpZero:
                    jmpOp = "jz";
                    break;
                case JmpOp.JumpNotZero:
                    jmpOp = "jnz";
                    break;
                case JmpOp.JumpEqual:
                    jmpOp = "je";
                    break;
                case JmpOp.JumpNotEqual:
                    jmpOp = "jne";
                    break;
                case JmpOp.JumpLessThan:
                    if (UnsignedTest)
                    {
                        jmpOp = "jb";
                    }
                    else
                    {
                        jmpOp = "jl";
                    }
                    break;
                case JmpOp.JumpGreaterThan:
                    if (UnsignedTest)
                    {
                        jmpOp = "ja";
                    }
                    else
                    {
                        jmpOp = "jg";
                    }
                    break;
                case JmpOp.JumpLessThanEqual:
                    if (UnsignedTest)
                    {
                        jmpOp = "jbe";
                    }
                    else
                    {
                        jmpOp = "jle";
                    }
                    break;
                case JmpOp.JumpGreaterThanEqual:
                    if (UnsignedTest)
                    {
                        jmpOp = "jae";
                    }
                    else
                    {
                        jmpOp = "jge";
                    }
                    break;
            }

            return jmpOp + " " + theBlock.GenerateILOpLabel(DestILPosition, Extension);
        }