3

GCC でコンパイルされたコードにインライン アセンブラを配置できることをうらやましく思っていましたが、Clang で同様のことができるかどうか疑問に思っています。たとえば、LLVM アセンブラーを使用して関数の定義を完了する方法はありますか。

int add_two_ints(int a, int b) {
  /* 
   * some bitcode stuff goes here to add
   * the ints and return the result
   */
}

上記の例を完成させるための参照、またはコードは素晴らしいでしょう。

4

1 に答える 1

3

clang は、入力、出力、破壊されたレジスタを宣言する GCC の拡張を含むインライン アセンブリをサポートします。

int add_two_ints(int a, int b) {
   int result;
   asm( "addl %1, %2;"
        "movl %2, %0;"
        : "=r"(result)
        : "r"(a), "r"(b)
        :);
   return result;
}

Clang は、Microsoft の__asm { }構文と intel スタイルのアセンブリも実験的にサポートしています。

C または C++ ソースに LLVM-IR を含めることはサポートされていません。インライン アセンブリは通常、特別な命令にアクセスするためのものであり、LLVM-IR ではそれが可能にならないため、このような機能は主に目新しさに過ぎません。

于 2013-03-18T22:09:01.870 に答える