Share via


intrinsic

#pragma intrinsic(function1 [,function2, ...] )

Specifies that calls to functions specified in the pragma’s argument list are intrinsic. The compiler generates intrinsic functions as inline code, not as function calls. The library functions with intrinsic forms are listed below. Once an intrinsic pragma is seen, it takes effect at the first function definition containing a specified intrinsic function. The effect continues to the end of the source file or to the appearance of a function pragma specifying the same intrinsic function. The intrinsic pragma can be used only outside of a function definition — at the global level.

The following functions have intrinsic forms:

_disable

_enable

_inp

_inpw

_lrotl

_lrotr

_outp

_outpw

_rotl

_rotr

_strset

abs

fabs

labs

memcmp

memcpy

memset

strcat

strcmp

strcpy

strlen

Programs that use intrinsic functions are faster because they do not have the overhead of function calls but may be larger due to the additional code generated.

Note   The _alloca and setjmp functions are always generated inline; this behavior is not affected by the intrinsic pragma.

The floating-point functions listed below do not have true intrinsic forms. Instead they have versions that pass arguments directly to the floating-point chip rather than pushing them onto the program stack:

acos

asin

cosh

fmod

pow

sinh

tanh

The floating-point functions listed below have true intrinsic forms when you specify both the /Oi and /Og compiler options (or any option that includes /Og: /Ox, /O1, and /O2):

atan exp log10 sqrt
atan2 log sin tan
cos

You can use the /Op or /Za compiler option to override generation of true intrinsic floating-point options. In this case, the functions are generated as library routines that pass arguments directly to the floating-point chip instead of pushing them onto the program stack.