Compatibility Issue detected: Intel C++ compiler does not support _M_IX86_FP macro

Compatibility Issue detected: Intel C++ compiler does not support _M_IX86_FP macro

Sergey Kostrov's picture

Compatibility Issue detected: Intel C++ compiler does not support _M_IX86_FP macro. Take a look at 'Predefined Macros' topic on MSDN for more information.

...
_M_IX86_FP - Expands to a value indicating which /arch compiler option was used:

0 if /arch was not used.
1 if /arch:SSE was used.
2 if /arch:SSE2 was used.

See /arch (Minimum CPU Architecture) for more information.
...

6 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.
Judith Ward (Intel)'s picture

 

Thank you for reporting this. I have entered this as DPD200248334 in our internal bug tracking database.

BTW, it looks like Microsoft sets the value of this macro to 2 (not 0) if /arch is not specified... At least that's what i saw with MSVC++ 2008.

Judy

Sergey Kostrov's picture

I actually detected that issue with VS 2005. I will do verifications with VS 2008, VS 2010 and VS 2012 some time later. Thanks, Judy!

Sergey Kostrov's picture

Outputs for the Test Case 4 ( VS 2010 ):

cl.exe /MD Test016.cpp
...
_M_IX86_FP : [ 0 ]
...

cl.exe /MD /arch:SSE Test016.cpp
...
_M_IX86_FP : [ 1 ]
...

cl.exe /MD /arch:SSE2 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSE3 Test016.cpp
...
_M_IX86_FP : [ 0 ]
...

cl.exe /MD /arch:SSSE3 Test016.cpp
...
_M_IX86_FP : [ 0 ]
...

cl.exe /MD /arch:SSE4.1 Test016.cpp
...
_M_IX86_FP : [ 0 ]
...

cl.exe /MD /arch:SSE4.2 Test016.cpp
...
_M_IX86_FP : [ 0 ]
...

cl.exe /MD /arch:AVX Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

Sergey Kostrov's picture

Outputs for the Test Case 4 ( VS 2012 ):

cl.exe /MD Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSE Test016.cpp
...
_M_IX86_FP : [ 1 ]
...

cl.exe /MD /arch:SSE2 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSE3 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSSE3 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSE4.1 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:SSE4.2 Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

cl.exe /MD /arch:AVX Test016.cpp
...
_M_IX86_FP : [ 2 ]
...

Sergey Kostrov's picture

Here are a couple of comments:

- I don't see a consistency with outputs and by some unexplained reason they are different ( just compare results... )

- Why does the macro have FP inside? ( Note: I would translate FP to as Floating-Point )

- I think Intel C++ compiler team should consider its own macro, something like, __INTEL_ISA_, or so

I will proceed with my own simple workaround based on an external macro and it will be initialized to an instruction set code ( like, SSE, SSE2, etc ) in a command line of a C++ compiler.

Login to leave a comment.