Skip to content

Commit 540c477

Browse files
committed
Fix MSVC detection, fix GCC SVML incompatibility for integer divisions
1 parent 3d5929e commit 540c477

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

SIMD.h

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,7 +1272,8 @@ _SIMD_INL_ void SIMD_Type_t<double, XXX, double>::DivideInplaceRaw(double* to, c
12721272

12731273
//Get GCC/MSVC Compile Time SIMD Macros
12741274

1275-
#if defined(__MSVC__)
1275+
#if defined(_MSC_VER)
1276+
#define SVML_COMPATIBLE_COMPILER 1
12761277
#if defined(_M_IX86_FP)
12771278
#if _M_IX86_FP == 1
12781279
#define SSE_AVAILABLE 1
@@ -1325,7 +1326,9 @@ _SIMD_INL_ void SIMD_Type_t<double, XXX, double>::DivideInplaceRaw(double* to, c
13251326
#if defined(AVX512F_AVAILABLE)
13261327
#pragma message("AVX512F Available")
13271328
#endif
1328-
1329+
#if defined(SVML_COMPATIBLE_COMPILER)
1330+
#pragma message("SVML Compatible Compiler")
1331+
#endif
13291332
//print if none is available
13301333
#if !defined(SSE_AVAILABLE) && !defined(SSE2_AVAILABLE) && !defined(SSE4_1_AVAILABLE) && !defined(AVX_AVAILABLE) && !defined(AVX2_AVAILABLE) && !defined(AVX512F_AVAILABLE)
13311334
#pragma message("No SIMD Available")
@@ -1345,11 +1348,13 @@ _SIMD_INL_ void SIMD_Type_t<double, XXX, double>::DivideInplaceRaw(double* to, c
13451348
CREATE_INT128_OPERATOR_MINUS(64);
13461349

13471350
CREATE_INT128_OPERATOR_MULTIPLY(16);
1348-
1349-
CREATE_INT128_OPERATOR_DIVIDE(8);
1350-
CREATE_INT128_OPERATOR_DIVIDE(16);
1351-
CREATE_INT128_OPERATOR_DIVIDE(32);
1352-
CREATE_INT128_OPERATOR_DIVIDE(64);
1351+
1352+
#if defined(SVML_COMPATIBLE_COMPILER)
1353+
CREATE_INT128_OPERATOR_DIVIDE(8);
1354+
CREATE_INT128_OPERATOR_DIVIDE(16);
1355+
CREATE_INT128_OPERATOR_DIVIDE(32);
1356+
CREATE_INT128_OPERATOR_DIVIDE(64);
1357+
#endif
13531358
#endif
13541359

13551360
#if defined(SSE4_1_AVAILABLE)
@@ -1397,10 +1402,12 @@ _SIMD_INL_ void SIMD_Type_t<double, XXX, double>::DivideInplaceRaw(double* to, c
13971402
CREATE_DOUBLE_OPERATOR_MULTIPLY(256);
13981403
CREATE_DOUBLE_OPERATOR_DIVIDE(256);
13991404

1400-
CREATE_INT256_OPERATOR_DIVIDE(8);
1401-
CREATE_INT256_OPERATOR_DIVIDE(16);
1402-
CREATE_INT256_OPERATOR_DIVIDE(32);
1403-
CREATE_INT256_OPERATOR_DIVIDE(64);
1405+
#if defined(SVML_COMPATIBLE_COMPILER)
1406+
CREATE_INT256_OPERATOR_DIVIDE(8);
1407+
CREATE_INT256_OPERATOR_DIVIDE(16);
1408+
CREATE_INT256_OPERATOR_DIVIDE(32);
1409+
CREATE_INT256_OPERATOR_DIVIDE(64);
1410+
#endif
14041411
#endif
14051412

14061413
#if defined(SIMD_USE_TYPE_FLOAT_256)
@@ -1438,10 +1445,12 @@ _SIMD_INL_ void SIMD_Type_t<double, XXX, double>::DivideInplaceRaw(double* to, c
14381445
CREATE_FLOAT_OPERATOR_MULTIPLY(512);
14391446
CREATE_FLOAT_OPERATOR_DIVIDE(512);
14401447

1441-
CREATE_DOUBLE_OPERATOR_PLUS(512);
1442-
CREATE_DOUBLE_OPERATOR_MINUS(512);
1443-
CREATE_DOUBLE_OPERATOR_MULTIPLY(512);
1444-
CREATE_DOUBLE_OPERATOR_DIVIDE(512);
1448+
#if defined(SVML_COMPATIBLE_COMPILER)
1449+
CREATE_DOUBLE_OPERATOR_PLUS(512);
1450+
CREATE_DOUBLE_OPERATOR_MINUS(512);
1451+
CREATE_DOUBLE_OPERATOR_MULTIPLY(512);
1452+
CREATE_DOUBLE_OPERATOR_DIVIDE(512);
1453+
#endif
14451454
#endif
14461455

14471456
#if defined(SIMD_USE_TYPE_INT_512)

tests/simd_tests.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,14 +264,16 @@ BENCHMARK(BM_Plain_##SIMD_TYPE##WIDTH##_with_int8_t_##OP_NAME##_##ARRAY_SIZE)->U
264264
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 128, +=, Addition, 1000)
265265
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 128, -=, Subtraction, 1000)
266266
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 128, *=, Multiplication, 50)
267-
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 128, /=, Division, 50)
268-
267+
#if defined(SVML_COMPATIBLE_COMPILER)
268+
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 128, /=, DivisionSVML_Only, 50)
269+
#endif
269270
// Integer tests - Int256
270271
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 256, +=, Addition, 1000)
271272
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 256, -=, Subtraction, 1000)
272273
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 256, *=, Multiplication, 50)
273-
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 256, /=, Division, 50)
274-
274+
#if defined(SVML_COMPATIBLE_COMPILER)
275+
TEST_SIMD_INTEGER_OPERATION(int, int32_t, 256, /=, DivisionSVML_Only, 50)
276+
#endif
275277
// Float tests - Float256
276278
TEST_SIMD_FLOAT_OPERATION(float, 256, +=, Addition)
277279
TEST_SIMD_FLOAT_OPERATION(float, 256, -=, Subtraction)

0 commit comments

Comments
 (0)