Intrinsic Functions

IBM C and C++ Compilers inlines some functions instead of generating a function call for them. Some of these functions are always inlined; others are inlined only when you compile with the optimization option on.

Note: The optimization options are /O or /Oc.

Functions that Are Inlined when Optimization Is On
When optimization is on (/O+), IBM C and C++ Compilers by default inlines (generates code instead of a function call) the following C library functions:

_clear87 _status87 strncmp wcslen
_control87 strcat strncpy wcsncat
memchr strchr strrchr wcsncmp
memcmp strcmp wcscat wcsncpy
memcpy strcpy wcschr wcsrchr
memmove strlen wcscmp  
memset strncat wcscpy  

The compiler inlines these functions when you include the appropriate header file that contains the function prototype and the #define and #pragma statements for the function.

If you program in C, you can override the inlining either by undefining the macro or by placing the name of the function in parentheses, thus disabling the preprocessor substitution. The function then remains a function call, and is not replaced by the code. The size of your object module is reduced, but your application program runs more slowly.

Note: The optimize-for-size compiler option (/Oc) also disables the inlining of non-intrinsic functions. It should be /O+ /Oc-.

Functions that Are Always Inlined
The following functions are built-in functions, meaning they do not have any backing library functions, and are always inlined:

abs _fasin _fyl2xp1 _llrotr _srotl
_alloca _fcos _f2xm1 _lrotl _srotr
_crotl _fcossin _inp _lrotr __sxchg
_crotr _fpatan _inpd __lxchg  
__cxchg _fptan _inpw _outp  
_disable _fsin _interrupt _outpd  
_enable _fsincos labs _outpw  
fabs _fsqrt llabs _rotl  
_facos _fyl2x _llrotl _rotr  

Do not parenthesize the names of these functions.

The built-in functions are all defined in <builtin.h>, in addition to the standard header definitions.