Visual Studion 2005 支持的设备编译器的内在函数
下面的函数是支持所有设备编译器的公共内在函数:(位于头文件 <cmnintrin.h>)( x86, ARM, SH-4, MIPS )
__assume : 传递一个提示到优化器。
_debugbreak : 促使一个调试断点被插入。
__noop : 忽略函数及其参数。
_CacheRelease : 将被包含被指针引用地址的高速缓存线写入主存,然后标记高速缓存线为空。
_CacheWriteBack : 将被包含被指针引用地址的高速缓存线写入主存。
_CopyFloatFromInt32 : 复制一个整型值到一个浮点型寄存器。
_CopyInt32FromFloat : 复制一个浮点数到一个整型寄存器。
_CopyInt64FromDouble : 复制一个浮点双精度到一个长整型寄存器。
_CopyDoubleFromInt64 : 复制一个浮点双精度长整型到一个长整型寄存器。
_CountLeadingOnes, _CountLeadingOnes64 :返回从最高有效位的开始的连续 1 位的个数。
_CountLeadingSigns, _CountLeadingSigns64 : 返回从下一个最高有效位开始的连续的与符号位相符的位个数。
_CountLeadingZeros, _CountLeadingZeros64 : 返回从最高有效位开始的连续 0 位的个数。
_CountOneBits, _CountOneBit64 : 返回参数中 1 的位数个数。
_ICacheRefresh : 从指令高速缓存器释放包含指针引用地址的高速缓存线。
_isunordered : 比较两个双精度数,确定是否它们是无序的。
_isunorderedf : 比较两个浮点数,确定是否它们是无序的
_MulHigh, _MulUnsignedHigh : 返回两个参数相乘的高32位结果。
_prefetch :如果可能,将数据从主存载入高手缓存。
_ReadWriteBarrier : 在后续的内存访问开始之前,强制使之前的所有内存访问完成。
_WriteBarrier : 在后续的写操作开始之前,强制使之前的内存写操作完成。
_ReturnAddress : 在控制返回调用者之后,提供将被执行的调用函数中指令的地址。
__trap : 插入一个 trap 指令。
MulDiv : 将两个32位值相乘后除第三个32位值,返回结果值的最接近整数(四舍五入)。
以下宏用于测试设备内在函数:
_INTRINSIC_IS_HELPER(arg) : 确定指定的内在函数是否是 C 运行时库中的一个调用。
arg - 相关内在函数的名字。
_INTRINSIC_IS_INLINE(arg) :确定指定的内在函数是否可被编译扩展为一行或多行内联函数。
_INTRINSIC_IS_SAFE(arg) : 确定指定内在函数是否独立于操作系统。
_INTRINSIC_IS_SUPPORTED :确定指定内在函数是否被支持。
以下为设备编译识别的 ANSI C 和 Microsoft C++ 实现的预定义宏:
ANSI C :
__DATE__ : 当前源文件的编译日期,字符串格式为 mm dd yyyy 。
__FILE__ : 当前源文件名,扩展为带双引号的字符串。
__FUNCTION__ : 封闭函数名,仅在函数内有效。
__LINE__ : 当前源文件的行数,为十进制常整数,可以被 #line 指令改变。
__STDC__ : 指示完全符合ANSI C 标准。
__TIME__ : 当前源文件编译时间,格式为 hh:mm:ss 。
__TIMESTAMP__ : 源文件最后一次修改的时间戳,格式为 D M dd hh:mm:ss yyyy 。
(注:以上值,除了 __LINE__ 和 __FILE__ 外,在编译期间必须为常量。
MS 定义的宏:
_CHAR_UNSIGNED : 默认字符类型为无符号的。
__cplusplus : 仅为 C++ 程序定义。
_CPPRTTI :为代码编译 /GR(使用运行时类型信息) 定义。
_CPPUNWIND : 为代码编译 /GX(使用异常处理) 定义。
_MFC_VER : 定义 MFC 版本。MFC 6.0 或更高版本定义为 0x0600 。
_MSC_EXTENSIONS : 当以 /Za, /Ze(不使用原有扩展) 编译时定义,默认定义, 值为 1 。
_MSC_VER : 定义编译器版本,VC++ 6.0 或更高版本定义为 1200 。
_WIN32 : 为 Win32 应用程序定义,总是定义。
注:以上内容翻译整理来自微软 MSDN