Пример #1
0
            void print(BinOpInt exp)
            {
                Out.Write("BinOp ");
                switch (exp.Op)
                {
                case BINOP.Op.Plus: Out.Write('+'); break;

                case BINOP.Op.Minus: Out.Write('-'); break;

                case BINOP.Op.Times: Out.Write('*'); break;

                case BINOP.Op.Divide: Out.Write('/'); break;

                default: Out.Write(exp.Op); break;
                }
                Out.WriteLine(' ' + exp.Dst.ToString() + ' ' + exp.Left + ' ' + exp.Right);
            }
Пример #2
0
            void Write(BinOpInt exp)
            {
                Out.Write('\t');
                switch (exp.Op)
                {
                case BINOP.Op.Plus:
                    Out.Write("add");
                    Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + exp.Right);
                    break;

                case BINOP.Op.Minus:
                    Out.Write("sub");
                    Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + exp.Right);
                    break;

                case BINOP.Op.Times:
                    if ((exp.Right & (exp.Right - 1)) == 0)
                    {
                        Out.Write("sll");
                        Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + Log2(exp.Right));
                    }
                    else
                    {
                        Out.Write("mul");
                        Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + exp.Right);
                    }
                    break;

                case BINOP.Op.Divide:
                    if ((exp.Right & (exp.Right - 1)) == 0)
                    {
                        Out.Write("sra");
                        Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + Log2(exp.Right));
                    }
                    else
                    {
                        Out.Write("div");
                        Out.WriteLine(' ' + GetColor(exp.Dst) + ", " + GetColor(exp.Left) + ", " + exp.Right);
                    }
                    break;

                default: throw new FatalError("Error at BinOpI_R in Codegen");
                }
            }