3

問題が発生しました。しばらくの間、gcc を使用して C コードをコンパイル/アセンブルし、インテルのアセンブリ構文を読むことに慣れてきました。-masm=intelアセンブリ ファイルを生成するときにフラグを使用しました。

しかし最近、会社の移転により、彼らは Intel の icc を取得し、そのほうが優れていると主張しました。そこでiccを使う必要があるのですが、デフォルトのアセンブリ構文がAT&Tなのが不思議でした。変えてみたけどダメだったので、インテルのサポートに問い合わせたところ、こちらも不明で、それぞれ矛盾した回答でした。

gcc と icc を統合して、icc のコンパイルの「優位性」を使用しながら、同時に gcc を使用してインテルの構文にコンパイルする方法はありますか?

ubuntu を使用しており、icc バージョン 12.x を取得しています

4

2 に答える 2

3

この旗?

   -use_msasm     Support  Microsoft  style  assembly  language  insertion
                  using MASM style syntax and, if requested, output assem-
                  bly in MASM format

https://web.archive.org/web/20120728043315/http://amath.colorado.edu/computing/software/man/icc.html

于 2011-03-20T10:24:15.823 に答える
2

少なくともCompiler Explorer (13.0.1)の現在の最新バージョンでは、Clang や GCC と同じよう-masm=intel に ICCで動作するようです。配列の例で合計を読み込んでみましたが、以下のアセンブリが生成されます

testFunction(int*, int):
        xor       eax, eax                                      #2.11
        test      esi, esi                                      #3.23
        jle       ..B1.18       # Prob 50%                      #3.23
        movsxd    rdx, esi                                      #3.3
...

一方-use_msasm、Steve-o の回答で like を指定してもまったく機能しません

Intelの公式マニュアルページには-use-msasm、そうではないと書かれています-use_msasmが、それも機能しません

-use-msasm(i32、i32emのみ)

  • MASM スタイルの構文を使用した Microsoft* スタイルのアセンブリ言語の挿入をサポートし、必要に応じてアセンブリを MASM 形式で出力します。

  • 注: GNU インライン アセンブラー (asm) コードと Microsoft インライン アセンブラー (msasm) コードを同じ翻訳単位で一緒に使用することはできません。

ただし、これは 2006 年の ICC 9.x のもので、かなり前のことであり、オプションは 9.x と 13.x の間のどこかで変更された可能性があります。

さらに詳しく調べてみると、少なくともICC 16.0以降では、このオプションはソース コード内のアセンブリ ブロックのみを対象としており、Intel 構文を出力するためのものではないことがわかりました。

使用-msasm

C または C++ ファイル内のアセンブリ コードのブロックと関数全体を使用できるようにします。

説明

このオプションを使用すると、C または C++ ファイル内でアセンブリ コードのブロックと関数全体を使用できます。

GNU* スタイルのインライン アセンブリ ブロックではなく、Microsoft* MASM スタイルのインライン アセンブリ ブロックを使用できます。

代替オプション

-fasm-blocks

ご覧のとおり、単なるエイリアスです-fasm-blocks。さらに、オプションの運命はわかりませんが、この-use-asmオプションは廃止されました-use-msasm

参考文献

于 2015-03-06T18:15:22.597 に答える