DirectXMath 库编译器指令

编译器指令优化 DirectXMath 库使用的功能。

指令 描述
_XM_NO_INTRINSICS_ 定义_XM_NO_INTRINSICS_时,无需使用任何特定于平台的内部函数即可实现 DirectXMath 操作。 相反,DirectXMath 只使用标准浮点运算。
默认情况下,未定义_XM_NO_INTRINSICS_。
此指令将替代所有其他指令。 因此,建议先检查_XM_NO_INTRINSICS_,然后再确定_XM_ARM_NEON_INTRINSICS_或_XM_SSE_INTRINSICS_的状态。
_XM_SSE_INTRINSICS_ 定义_XM_SSE_INTRINSICS_时,将编译代码,以在支持这些指令集的平台上使用支持 SSE 和 SSE2。
提供 SSE 内部函数的 Windows 版本同时支持 SSE 和 SSE2。
_XM_SSE_INTRINSICS_对不支持 SSE 和 SSE2 的系统没有影响。
默认情况下,_XM_SSE_INTRINSICS_是在用户针对 Windows 平台进行编译时定义的。
DirectXMath 使用标准编译器定义 (_M_IX86 /_M_AMD64) 来确定 Windows x86 或 Windows x64 目标。
_XM_ARM_NEON_INTRINSICS_ 这表示 DirectXMath 实现使用了 ARM-NEON 内部函数。 默认情况下,当用户在 ARM/ARM64 平台上为 Windows 进行编译时定义_XM_ARM_NEON_INTRINSICS_。 DirectXMath 使用标准编译器定义 (_M_ARM,_M_ARM64) 来确定此二进制目标。
ARM-NEON 内部函数支持是 DirectXMath 的新增功能,XNAMath 2.x 不支持。
_XM_SSE3_INTRINSICS_ DirectXMath 3.10 的新增功能。
指定此编译器指令时,将实现 DirectXMath 函数以在适用的情况下使用 SSE3 内部函数;否则,它使用 SSE/SSE2。
_XM_SSE4_INTRINSICS_ DirectMath 3.09 的新增功能。
指定此编译器指令时,将实现 DirectXMath 函数以在适用的情况下使用 SSE3 和 SSE4.1 内部函数;否则,它使用 SSE/SSE2。 指定此编译器指令时,它还意味着_XM_SSE3_INTRINSICS_和_XM_SSE_INTRINSICS_。
_XM_AVX_INTRINSICS_ DirectXMath 3.09 的新增功能。
使用 /arch:AVX 将启用此指令。
指定此编译器指令时,将实现 DirectXMath 函数,以在适用的情况下使用 SSE3、SSE4.1 和 AVX 128 位内部函数;否则,DirectXMath 使用 SSE/SSE2。 指定此编译器指令时,它还意味着_XM_SSE3_INTRINSICS、_XM_SSE4_INTRINSICS_和_XM_SSE_INTRINSICS_,并包含 SSE3 指令的一小部分。
XM_AVX2_INTRINSICS_ DirectXMath 3.11 的新增功能。
使用 /arch:AVX2 可启用此指令。 指定此编译器指令时,DirectXMath 函数会使用 AVX2、F16C/CVT16、FMA3、AVX 128 位、SSE4.1 和 SSE3 内部函数(如果适用)。 使用_XM_AVX2_INTRINSICS_时,这意味着_XM_F16C_INTRINSICS_、_XM_FMA3_INTRINSICS_、_XM_AVX_INTRINSICS_、_XM_SSE_INTRINSICS_、_XM_SSE3_INTRINSICS_和_XM_SSE4_INTRINSICS_。
_XM_F16C_INTRINSICS_ DirectXMath 3.09 的新增功能。
指定此编译器指令时,DirectXMath 函数将实现为使用 SSE3、SSE4.1、AVX 128 位和 F16C/CVT16 内部函数(如果适用);否则,DirectXMath 使用 SSE/SSE2。 使用_XM_F16C_INTRINSICS_时,这意味着_XM_AVX_INTRINSICS_、_XM_SSE_INTRINSICS_、_XM_SSE3_INTRINSICS_和_XM_SSE4_INTRINSICS_。
_XM_FMA3_INTRINSICS_ DirectXMath 3.11 的新增功能。
指定此编译器指令时,DirectXMath 函数将使用 SSE3、SSE4.1、AVX 128 位和 FMA3 内部函数(如果适用);否则,DirectXMath 使用 SSE/SSE2。 使用_XM_FMA3_INTRINSICS_时,这意味着_XM_AVX_INTRINSICS_、_XM_SSE_INTRINSICS_、_XM_SSE3_INTRINSICS_和_XM_SSE4_INTRINSICS_。
_XM_VECTORCALL_ 这允许对 Windows x86 或 Windows x64 目标使用__vectorcall调用约定。 当编译器支持此功能时,它默认为 _XM_VECTORCALL_=1。 可以手动将其设置为 _XM_VECTORCALL_=0 以始终禁用它。
ARM/ARM64 平台或托管 C++ 上的 Windows 不支持__vectorcall。
_XM_SVML_INTRINSICS_ DirectXMath 3.16 的新增功能。
在 VS 2019 或更高版本中,这使库能够使用适用于 x86/x64 的 Intel® 短矢量矩阵库。

 

DirectXMath 编程参考