libimf.a is the math library provided by Intel and libm.a is the math library provided with gcc*.
Both of these libraries are linked in by default on IA-32, Intel® EM64T, and Itanium® -based compilers. Both libraries are linked in because there are math functions supported by the GNU math library that are not in the Intel math library. This linking arrangement allows the GNU users to have all functions available when using ifort, with Intel optimized versions available when supported.
libimf.a is linked in before libm.a. If you link in libm.a first, it will change the versions of the math functions that are used.
libimf.a on the IA-32 Compiler
For the IA-32 compiler, libimf.a contains both generic math routines and versions of the math routines optimized for special use with the Intel Pentium® 4 and Intel® Xeon™ processors.
libimf.a on the Itanium-Based Compiler
For the Itanium-based compiler, libimf.a is optimized for use with the Itanium architecture. The compiler provides inlined versions of math library primitives and schedules the generated code with surrounding instructions. This can improve the performance of typical floating-point applications.
libimf.a on the Intel® EM64T-Based Compiler
For the Intel EM64T-based compiler, libimf.a contains both generic math routines and versions of the math routines optimized for special use with the Intel® EM64T processor.