开发者

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

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


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


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜