Директивы компилятора библиотеки DirectXMath

Директивы компилятора настраивают функции, которые использует библиотека DirectXMath.

Директива Описание
_XM_NO_INTRINSICS_ При определении _XM_NO_INTRINSICS_ операции DirectXMath реализуются без использования встроенных функций для конкретной платформы. Вместо этого DirectXMath использует только стандартные операции с плавающей запятой.
По умолчанию _XM_NO_INTRINSICS_ не определен.
Эта директива переопределяет все остальные директивы. Поэтому перед определением состояния _XM_ARM_NEON_INTRINSICS_ или _XM_SSE_INTRINSICS_ рекомендуется проверка для _XM_NO_INTRINSICS_.
_XM_SSE_INTRINSICS_ При определении _XM_SSE_INTRINSICS_ код компилируется для использования поддержки SSE и SSE2 на платформах, поддерживающих эти наборы инструкций.
Версии Windows, предоставляющие встроенные функции SSE, поддерживают как 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. По умолчанию _XM_ARM_NEON_INTRINSICS_ определяется при компиляции пользователей для платформы Windows на платформе ARM или ARM64. 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 реализуются для использования 128-разрядных встроенных функций SSE3, SSE4.1 и AVX. В противном случае 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_ Это позволяет использовать соглашение о вызовах __vectorcall для целевых объектов Windows x86 или Windows x64. По умолчанию используется значение _XM_VECTORCALL_=1, если компилятор поддерживает эту функцию. Вы можете вручную задать для него значение _XM_VECTORCALL_=0, чтобы всегда отключать его.
__vectorcall не поддерживается в Windows на платформе ARM/ARM64 или управляемом C++.
_XM_SVML_INTRINSICS_ Новые возможности для DirectXMath 3.16.
В VS 2019 или более поздней версии это позволяет библиотеке использовать библиотеку Intel® Short Vector Matrix Library для x86/x64.

 

Справочник по программированию DirectXMath