Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7953 Discussions

MASM files + Intel compiler/assembler in Linux

chekib
Beginner
802 Views
Hi,

I have done some evaluation tests of intel compiler and I want to use it to compile my C code in both windows and Linux plateforms. My code has some assembly files written in MASM syle as well.

I am wondering if intel compiler does support assembly files (MASM style) ,originally written/debugged in windows with intel compiler, in Linux ?
My problem is that I don't want to rewrite the MASM files to be compatible with the intel toolchain in Linux.
Other question:
In windows, Visual Studio 2010, intel compiler 12 seems to use actually ML.exe and ML64.exe to assemble .asm file. why intel does not have their own assembler, using ML/ML64, does it hurt overall performance?

Thanks,
--Chekib
0 Kudos
3 Replies
Georg_Z_Intel
Employee
802 Views
Hello Chekib,

Intel C++ Compiler is a compiler for C/C++ - no native support for assembly files. It is true that the compiler driver (icl/icc/icpc/...) can detect whether files are source files or assembly files (or others). In the latter case, however, it'll use an external assembler tool, typical for the underlying platform (GNU as for Linux*/Mac OS* X and ml[64] for Windows*).

Keep in mind that assembly syntax is not standardized. Migrating from one assembler to another is therefore hard. In case you really need to create platform independent assembly files you should have picked an assembler that is available on more than one platform (e.g. YASM) - MASM definitely is Windows* only!

Technically speaking, the Intel C++ Compiler has an own internal assembler. This one is required for transforming compiler's intermediate language to object code without loss of information, regarding optimization. You can, however, instruct the compiler to bypass this and generate an intermediate assembly file, too (Linux: -use-asm). In that case it'll use the assembly syntax typical for the used platform.
Anyways, that's less related to your problem but you kind of asked for it.

So, in short: You need to pick a platform independent assembler (syntax) and migrate your existing assembly files by hand.

Best regards,

Georg Zitzlsberger

0 Kudos
chekib
Beginner
802 Views
Thanks Georg, yes YASM would be defintely a good solution, and I expect that I would need a toolchain like:
yasm/icl to produce obj files, then use xlink to link my code into an executable.

Actually I don't want to use MS Visual studio to build my solution, and I want to use batch file/make file to build(e.g use Cmake), my question is: Can I still do this without the need to install MS visual studio?
I am asking this because when I tried to call icl.exe from cmd.exe I got this error:

C:\Program Files (x86)\Intel\Composer XE 2011 SP1\bin\ia32>
C:\Program Files (x86)\Intel\Composer XE 2011 SP1\bin\ia32>icl.exe sample.c
Intel C++ Compiler XE for applications running on IA-32, Version 12.1.5.344 Build 20120612
Copyright (C) 1985-2012 Intel Corporation. All rights reserved.

icl: error #10114: Microsoft Visual C++ not found in path

C:\Program Files (x86)\Intel\Composer XE 2011 SP1\bin\ia32>
C:\Program Files (x86)\Intel\Composer XE 2011 SP1\bin\ia32>


--Chekib

0 Kudos
Georg_Z_Intel
Employee
802 Views
Hello,

we provide links to invocation of command line shells for the different VS environments in the start menu:



If you use those instead everything is set-up correctly (also icl.exe is in %path%).

Best regards,

Georg Zitzlsberger
0 Kudos
Reply