3

我遇到了一个问题。我一直在使用 gcc 编译/汇编我的 C 代码一段时间,并习惯于阅读 Intel 汇编语法。我-masm=intel在生成程序集文件时使用了该标志。

然而最近,由于公司迁移,他们获得了英特尔的icc,声称它更好。所以现在我需要使用 icc,但奇怪的是它具有 AT&T 的默认汇编语法。我试图改变它,但它没有用,所以我联系了英特尔支持,他们也不知道,每个人都给了我一个矛盾的答案。

有没有办法整合 gcc 和 icc 以便我使用 icc 的编译“优势”,同时使用 gcc 编译为 intel 的语法?

我正在使用 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

似乎-masm=intel 在 ICC 中就像 Clang 和 GCC 一样工作,至少在Compiler Explorer (13.0.1) 中的当前最新版本中。我尝试在数组示例上加载总和并生成以下程序集

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
...

而在史蒂夫-o的答案中指定-use_msasm类似根本不起作用

英特尔的官方手册页说它是-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++ 文件中使用汇编代码的块和整个函数。

它允许使用 Microsoft* MASM 风格的内联汇编块而不是 GNU* 风格的内联汇编块。

备用选项

-fasm-blocks

如您所见,它只是-fasm-blocks. 此外,尽管我不知道命运的命运,但该-use-asm选项已被弃用-use-msasm

参考

于 2015-03-06T18:15:22.597 回答