Getting Intel-syntax asm output from icc, instead of the default AT&T syntax?

这一生的挚爱 提交于 2020-01-04 01:29:08

问题


I am stuck at a problem. I've been using gcc to compile/assemble my C code for a while and got used to reading Intel assembly syntax. I used the -masm=intel flag when generating the assembly files.

Yet recently, due to company migrations, they obtained Intel's icc, claiming it is better. So now I need to use icc, but it was strange that it has the default assembly syntax as AT&T. I tried to change it but it didn't work, so I contacted Intel support and they also don't know and each person gave me a contradicting answer.

Is there a way to integrate gcc and icc so that I use icc's compiling "superiority" while at the same time compiling to intel's syntax with gcc?

I am using ubuntu and got the icc version 12.x


回答1:


This flag?

   -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




回答2:


It seems that -masm=intel works in ICC just like Clang and GCC, at least in the current latest version in Compiler Explorer (13.0.1). I tried loading the sum over array example and it generates the below assembly

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

whereas specifying -use_msasm like in Steve-o's answer doesn't work at all

The official man page from Intel said that it's -use-msasm and not -use_msasm but that doesn't work either

-use-msasm (i32, i32em only)

  • Support Microsoft* style assembly language insertion using MASM style syntax and, if requested, output assembly in MASM format.

  • Note: GNU inline assembler (asm) code and Microsoft inline assembler (msasm) code cannot be used together in the same translation unit.

However that's for ICC 9.x in 2006 which was too long ago, and the option might have been changed somewhere between 9.x and 13.x

I dug a little bit further and realized that at least since ICC 16.0 the option is only for assembly blocks in source code and not for outputting Intel syntax

use-msasm

Enables the use of blocks and entire functions of assembly code within a C or C++ file.

Description

This option enables the use of blocks and entire functions of assembly code within a C or C++ file.

It allows a Microsoft* MASM-style inline assembly block not a GNU*-style inline assembly block.

Alternate Options

-fasm-blocks

As you can see it's just an alias for -fasm-blocks. Moreover the -use-asm option was deprecated although I don't know the fate of -use-msasm

References

  • Intel® C++ Compiler for Linux* - 9.x manuals
  • Intel® C++ Compiler 16.0 User and Reference Guide
  • Intel® C++ Compiler 17.0 Developer Guide and Reference


来源:https://stackoverflow.com/questions/5367858/getting-intel-syntax-asm-output-from-icc-instead-of-the-default-att-syntax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!