Skip to content

Commit c592223

Browse files
committed
June 2017
1 parent b83bff1 commit c592223

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

Inc/DirectXMath.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#error DirectX Math requires C++
1818
#endif
1919

20-
#define DIRECTX_MATH_VERSION 310
20+
#define DIRECTX_MATH_VERSION 311
2121

2222
#if defined(_MSC_VER) && (_MSC_VER < 1800)
2323
#error DirectX Math Visual C++ 2013 or later.

Inc/DirectXMathMatrix.inl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiply
298298
#elif defined(_XM_SSE_INTRINSICS_)
299299
XMMATRIX mResult;
300300
// Splat the component X,Y,Z then W
301-
#if defined(_XM_AVX_INTRINSICS_)
301+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
302302
XMVECTOR vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 0);
303303
XMVECTOR vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 1);
304304
XMVECTOR vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 2);
@@ -322,7 +322,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiply
322322
vX = _mm_add_ps(vX,vY);
323323
mResult.r[0] = vX;
324324
// Repeat for the other 3 rows
325-
#if defined(_XM_AVX_INTRINSICS_)
325+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
326326
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 0);
327327
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 1);
328328
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 2);
@@ -342,7 +342,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiply
342342
vY = _mm_add_ps(vY,vW);
343343
vX = _mm_add_ps(vX,vY);
344344
mResult.r[1] = vX;
345-
#if defined(_XM_AVX_INTRINSICS_)
345+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
346346
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 0);
347347
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 1);
348348
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 2);
@@ -362,7 +362,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiply
362362
vY = _mm_add_ps(vY,vW);
363363
vX = _mm_add_ps(vX,vY);
364364
mResult.r[2] = vX;
365-
#if defined(_XM_AVX_INTRINSICS_)
365+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
366366
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 0);
367367
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 1);
368368
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 2);
@@ -479,7 +479,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiplyTranspose
479479
return mResult;
480480
#elif defined(_XM_SSE_INTRINSICS_)
481481
// Splat the component X,Y,Z then W
482-
#if defined(_XM_AVX_INTRINSICS_)
482+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
483483
XMVECTOR vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 0);
484484
XMVECTOR vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 1);
485485
XMVECTOR vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[0]) + 2);
@@ -503,7 +503,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiplyTranspose
503503
vX = _mm_add_ps(vX,vY);
504504
XMVECTOR r0 = vX;
505505
// Repeat for the other 3 rows
506-
#if defined(_XM_AVX_INTRINSICS_)
506+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
507507
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 0);
508508
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 1);
509509
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[1]) + 2);
@@ -523,7 +523,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiplyTranspose
523523
vY = _mm_add_ps(vY,vW);
524524
vX = _mm_add_ps(vX,vY);
525525
XMVECTOR r1 = vX;
526-
#if defined(_XM_AVX_INTRINSICS_)
526+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
527527
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 0);
528528
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 1);
529529
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[2]) + 2);
@@ -543,7 +543,7 @@ inline XMMATRIX XM_CALLCONV XMMatrixMultiplyTranspose
543543
vY = _mm_add_ps(vY,vW);
544544
vX = _mm_add_ps(vX,vY);
545545
XMVECTOR r2 = vX;
546-
#if defined(_XM_AVX_INTRINSICS_)
546+
#if defined(_XM_AVX_INTRINSICS_) && (!defined(_MSC_VER) || (_MSC_VER >= 1800))
547547
vX = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 0);
548548
vY = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 1);
549549
vZ = _mm_broadcast_ss(reinterpret_cast<const float*>(&M1.r[3]) + 2);

ReadMe.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ DirectXMath
44

55
Copyright (c) Microsoft Corporation. All rights reserved.
66

7-
January 2017
7+
June 2017
88

99
This package contains the DirectXMath library, an all inline SIMD C++ linear algebra library
1010
for use in games and graphics apps
@@ -59,6 +59,12 @@ https://opensource.microsoft.com/codeofconduct/
5959
RELEASE HISTORY
6060
---------------
6161

62+
June 2017 (3.11)
63+
AVX optimization of XMMatrixMultiply and XMMatrixMultiplyTranspose
64+
AVX2 optimization for XMVectorSplatX
65+
FMA3 optimization of XMVectorMultiplyAdd and XMVectorNegativeMultiplySubtract (implied by /arch:AVX2)
66+
Conformance fixes to support compilation with Clang 3.7
67+
6268
January 2017 (3.10)
6369
Added XMVectorSum for horizontal adds
6470
ARMv8 intrinsics use for ARM64 platform (division, rounding, half-precision conversion)

0 commit comments

Comments
 (0)