コード例 #1
0
 public override void Write(Formatter w)
 {
     w.Write("@" + Name);
     w.Write(" = ");
     if (Visibility != null)
     {
         w.WriteKeyword(Visibility);
         w.Write(' ');
     }
     if (unnamed_addr)
     {
         w.WriteKeyword("unnamed_addr");
         w.Write(' ');
     }
     if (constant)
     {
         w.WriteKeyword("constant");
     }
     else
     {
         w.WriteKeyword("global");
     }
     w.Write(' ');
     Type.Write(w);
     if (Initializer != null)
     {
         w.Write(' ');
         Initializer.Write(w);
     }
     if (Alignment != 0)
     {
         w.Write(", align {0}", Alignment);
     }
 }
コード例 #2
0
 public override void Write(Formatter w)
 {
     w.WriteKeyword("switch");
     w.Write(' ');
     Type.Write(w);
     w.Write(' ');
     Value.Write(w);
     w.Write(", ");
     w.WriteKeyword("label");
     w.Write(' ');
     Default.Write(w);
     w.WriteLine(" [");
     foreach (var dest in Destinations)
     {
         w.Indent();
         dest.Item1.Write(w);
         w.Write(' ');
         dest.Item2.Write(w);
         w.Write(", ");
         w.WriteKeyword("label");
         w.Write(' ');
         dest.Item3.Write(w);
         w.WriteLine();
     }
     w.Write("]");
 }
コード例 #3
0
 public override void Write(Formatter w)
 {
     w.WriteKeyword("br");
     w.Write(' ');
     if (Cond != null)
     {
         Type.Write(w);
         w.Write(' ');
         Cond.Write(w);
         w.Write(", ");
         w.WriteKeyword("label");
         w.Write(' ');
         IfTrue.Write(w);
         w.Write(", ");
         w.WriteKeyword("label");
         w.Write(' ');
         IfFalse.Write(w);
     }
     else
     {
         w.WriteKeyword("label");
         w.Write(' ');
         IfTrue.Write(w);
     }
 }
コード例 #4
0
        public override void Write(Formatter w)
        {
            if (Result != null)
            {
                Result.Write(w);
                w.Write(" = ");
            }
            w.WriteKeyword("call");
            w.Write(" ");
            if (res_attrs != null)
            {
                res_attrs.Write(w);
                w.Write(' ');
            }
            FnType.Write(w);
            w.Write(" ");
            FnPtr.Write(w);
            w.Write("(");
            var sep = "";

            foreach (var arg in Arguments)
            {
                w.Write(sep);
                sep = ", ";
                arg.Type.Write(w);
                w.Write(" ");
                if (arg.Attributes != null)
                {
                    arg.Attributes.Write(w);
                    w.Write(" ");
                }
                arg.Value.Write(w);
            }
            w.Write(")");
        }
コード例 #5
0
ファイル: LLVMType.cs プロジェクト: smx-smx/reko
        public override void Write(Formatter w)
        {
            ReturnType.Write(w);
            w.Write(" (");
            var sep = "";

            foreach (var arg in Parameters)
            {
                w.Write(sep);
                sep = ", ";
                if (arg.Type != null)
                {
                    arg.Type.Write(w);
                    if (arg.name != null)
                    {
                        w.Write(" ");
                        w.Write(arg.name);
                    }
                }
                else if (arg.name != null)
                {
                    w.Write(arg.name);
                }
            }
            w.Write(")");
        }
コード例 #6
0
ファイル: LLVMType.cs プロジェクト: smx-smx/reko
 public override void Write(Formatter w)
 {
     Type.Write(w);
     if (string.IsNullOrEmpty(name))
     {
         return;
     }
     w.Write(' ');
     w.Write(name);
 }
コード例 #7
0
ファイル: LLVMSyntax.Expr.cs プロジェクト: zan00789/reko
 public override void Write(Formatter w)
 {
     w.WriteKeyword(Operator.ToString());
     w.Write(" (");
     Value.Write(w);
     w.Write(' ');
     w.WriteKeyword("to");
     w.Write(' ');
     Type.Write(w);
     w.Write(")");
 }
コード例 #8
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword("alloca");
     w.Write(' ');
     Type.Write(w);
     if (ElCountType != null && ElementCount != null)
     {
         w.Write(", ");
         Type.Write(w);
         w.Write(' ');
         ElementCount.Write(w);
     }
     if (Alignment != 0)
     {
         w.Write(", ");
         w.WriteKeyword("align");
         w.Write(Alignment);
     }
 }
コード例 #9
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword(Operator.ToString());
     w.Write(' ');
     w.WriteKeyword(ConditionCode.ToString());
     w.Write(' ');
     Type.Write(w);
     w.Write(' ');
     Op1.Write(w);
     w.Write(", ");
     Op2.Write(w);
 }
コード例 #10
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword(Operator.ToString());
     w.Write(' ');
     TypeFrom.Write(w);
     w.Write(' ');
     Value.Write(w);
     w.Write(' ');
     w.WriteKeyword("to");
     w.Write(' ');
     TypeTo.Write(w);
 }
コード例 #11
0
 public override void Write(Formatter w)
 {
     Name.Write(w);
     w.Write(" = ");
     w.WriteKeyword("type");
     w.Write(" ");
     if (Opaque)
     {
         w.WriteKeyword("opaque");
     }
     else
     {
         Type.Write(w);
     }
 }
コード例 #12
0
 public override void Write(Formatter w)
 {
     w.WriteKeyword("ret");
     w.Write(" ");
     if (this.Type == LLVMType.Void)
     {
         w.WriteKeyword("void");
     }
     else
     {
         Type.Write(w);
         w.Write(' ');
         Value.Write(w);
     }
 }
コード例 #13
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword("extractvalue");
     w.Write(" ");
     AggregateType.Write(w);
     w.Write(' ');
     Value.Write(w);
     foreach (var idx in Indices)
     {
         w.Write(", ");
         w.Write(idx);
     }
 }
コード例 #14
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword("select");
     w.Write(" ");
     CondType.Write(w);
     w.Write(" ");
     Cond.Write(w);
     w.Write(", ");
     TrueType.Write(w);
     w.Write(" ");
     TrueValue.Write(w);
     w.Write(", ");
     FalseType.Write(w);
     w.Write(" ");
     FalseValue.Write(w);
 }
コード例 #15
0
 public override void Write(Formatter w)
 {
     Dst.Write(w);
     w.Write(" = ");
     w.WriteKeyword("load");
     w.Write(' ');
     DstType.Write(w);
     w.Write(", ");
     SrcType.Write(w);
     w.Write(' ');
     Src.Write(w);
     if (Alignment != 0)
     {
         w.Write(", ");
         w.WriteKeyword("align");
         w.Write(" {0}", Alignment);
     }
 }
コード例 #16
0
        //[fn Attrs]
        //[section "name"]
        //[comdat [($name)]] [align N]
        //[gc]
        //[prefix Constant]
        //[prologue Constant]
        //[personality Constant] (!name !N)* { ... }

        public override void Write(Formatter w)
        {
            w.WriteKeyword("define");
            w.Write(' ');
            if (ret_attrs != null)
            {
                ret_attrs.Write(w);
                w.Write(' ');
            }
            ResultType.Write(w);
            w.Write(' ');
            w.Write("@" + FunctionName);
            w.Write('(');
            var sep = "";

            foreach (var param in Parameters)
            {
                w.Write(sep);
                sep = ", ";
                param.Type.Write(w);
                if (param.name != null)
                {
                    w.Write(' ');
                    w.Write('%' + param.name);
                }
                if (param.attrs != null)
                {
                    w.Write(' ');
                    param.attrs.Write(w);
                }
            }
            w.Write(')');
            w.Write(' ');
            w.WriteLine("{");
            foreach (var instr in Instructions)
            {
                w.Indent();
                instr.Write(w);
                w.WriteLine();
            }
            w.Indentation -= 4;
            w.Write("}");
        }
コード例 #17
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.WriteKeyword("getelementptr");
     w.Write(" ");
     BaseType.Write(w);
     w.Write(", ");
     PtrType.Write(w);
     w.Write(" ");
     PtrValue.Write(w);
     foreach (var index in Indices)
     {
         w.Write(", ");
         index.Item1.Write(w);
         w.Write(" ");
         index.Item2.Write(w);
     }
 }
コード例 #18
0
        public override void Write(Formatter w)
        {
            Result.Write(w);
            w.Write(" = ");
            w.WriteKeyword("phi");
            w.Write(' ');
            Type.Write(w);
            var sep = " ";

            foreach (var arg in Arguments)
            {
                w.Write(sep);
                sep = ", ";
                w.Write("[");
                w.Write(arg.Item1);
                w.Write(", ");
                w.Write(arg.Item2);
                w.Write("]");
            }
        }
コード例 #19
0
 public override void Write(Formatter w)
 {
     Result.Write(w);
     w.Write(" = ");
     w.Write(Operator.ToString());
     w.Write(" ");
     if (NoUnsignedWrap)
     {
         w.WriteKeyword("nuw");
         w.Write(' ');
     }
     if (NoSignedWrap)
     {
         w.WriteKeyword("nsw");
         w.Write(' ');
     }
     Type.Write(w);
     w.Write(" ");
     Left.Write(w);
     w.Write(", ");
     Right.Write(w);
 }
コード例 #20
0
ファイル: LLVMSyntax.Expr.cs プロジェクト: zan00789/reko
 public override void Write(Formatter w)
 {
     w.WriteKeyword("getelementptr");
     if (Inbounds)
     {
         w.Write(' ');
         w.WriteKeyword("inbounds");
     }
     w.Write(" (");
     BaseType.Write(w);
     w.Write(", ");
     PointerType.Write(w);
     w.Write(' ');
     Pointer.Write(w);
     foreach (var index in Indices)
     {
         w.Write(", ");
         index.Item1.Write(w);
         w.Write(' ');
         index.Item2.Write(w);
     }
     w.Write(")");
 }
コード例 #21
0
 public override void Write(Formatter w)
 {
     Type.Write(w);
     w.Write(' ');
     Value.Write(w);
 }
コード例 #22
0
 public override void Write(Formatter w)
 {
     w.Write("[{0} x ", Length);
     ElementType.Write(w);
     w.Write("]");
 }
コード例 #23
0
 public override void Write(Formatter w)
 {
     Pointee.Write(w);
     w.Write("*");
 }