Compiler Usage Guidelines for 64-Bit Operating Systems on AMD64 ...
Compiler Usage Guidelines for 64-Bit Operating Systems on AMD64 ...
Compiler Usage Guidelines for 64-Bit Operating Systems on AMD64 ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<str<strong>on</strong>g>Compiler</str<strong>on</strong>g> <str<strong>on</strong>g>Usage</str<strong>on</strong>g> <str<strong>on</strong>g>Guidelines</str<strong>on</strong>g> <str<strong>on</strong>g>for</str<strong>on</strong>g> AMD<str<strong>on</strong>g>64</str<strong>on</strong>g> Plat<str<strong>on</strong>g>for</str<strong>on</strong>g>ms<br />
32035 Rev. 3.22 November 2007<br />
By default, GCC enables the -fexcepti<strong>on</strong>s opti<strong>on</strong> <str<strong>on</strong>g>for</str<strong>on</strong>g> languages like C++ that normally require<br />
excepti<strong>on</strong> handling. GCC disables the -fexcepti<strong>on</strong>s opti<strong>on</strong> <str<strong>on</strong>g>for</str<strong>on</strong>g> languages like C that do not normally<br />
require it. You may need, however, to enable this opti<strong>on</strong> when compiling C code that must<br />
interoperate properly with excepti<strong>on</strong> handlers written in C++. You may also wish to disable this<br />
opti<strong>on</strong> if you are compiling older C++ programs that do not use excepti<strong>on</strong> handling.<br />
4.9 Intel <str<strong>on</strong>g>Compiler</str<strong>on</strong>g>s (32-<str<strong>on</strong>g>Bit</str<strong>on</strong>g>) <str<strong>on</strong>g>for</str<strong>on</strong>g> Linux ®<br />
This secti<strong>on</strong> addresses errors and unexpected results that may be encountered when using 32-bit Intel<br />
compilers <str<strong>on</strong>g>for</str<strong>on</strong>g> Linux®.<br />
4.9.1 Compilati<strong>on</strong> Errors<br />
Are you using the right ANSI-compliant switch?<br />
Use the -ansi-alias- switch to compile Fortran programs that do not adhere to the ANSI Fortran-type<br />
alias rules.<br />
4.9.2 Link-Time Errors<br />
Are you trying to link C and Fortran code?<br />
If you are linking C and Fortran modules, and the link-time error is due to a mismatch of symbol<br />
names, use the -us switch with the Intel Fortran compiler. Using the -us switch appends an underscore<br />
to the symbol names derived from external variables or functi<strong>on</strong>s, causing them to match the C<br />
symbols.<br />
4.9.3 Compiled and Linked Code Generates Unexpected Results<br />
Are you generating vectorized floating-point code?<br />
For some loops, vectorizati<strong>on</strong> can cause a slight difference in results due to the reordering of floatingpoint<br />
operati<strong>on</strong>s. The switches -xK and -xW vectorize loops where possible. As a diagnostic step, try<br />
compiling without these switches.<br />
Does your program rely <strong>on</strong> some x87 features?<br />
Some Intel compiler switches instruct the compiler to use SSE2 registers and instructi<strong>on</strong>s. If the<br />
results of a program do not match your expectati<strong>on</strong>s when using SSE2 registers and instructi<strong>on</strong>s, the<br />
program may rely <strong>on</strong> some x87 features.<br />
As a diagnostic step, try building the program using x87 operati<strong>on</strong>s <str<strong>on</strong>g>for</str<strong>on</strong>g> floating-point computati<strong>on</strong>s,<br />
and see if the results are as expected. Not using the -xK and -xW switches recommended in the<br />
general per<str<strong>on</strong>g>for</str<strong>on</strong>g>mance guidelines causes the compiler to build the program using x87 operati<strong>on</strong>s <str<strong>on</strong>g>for</str<strong>on</strong>g><br />
floating-point computati<strong>on</strong>s.<br />
50 Troubleshooting and Portability Issues Chapter 4