Build: Require that _mm_set_epi64x() is usable to enable CLMUL support.
VS2013 doesn't have _mm_set_epi64x() so this way CLMUL gets disabled with VS2013. Thanks to Iouri Kharon for the bug report.
This commit is contained in:
parent
bad44cfe19
commit
52bc1ee34d
|
@ -434,8 +434,9 @@ if(HAVE_IMMINTRIN_H)
|
||||||
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
|
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
|
||||||
__attribute__((__target__(\"ssse3,sse4.1,pclmul\")))
|
__attribute__((__target__(\"ssse3,sse4.1,pclmul\")))
|
||||||
#endif
|
#endif
|
||||||
__m128i my_clmul(__m128i a, __m128i b)
|
__m128i my_clmul(__m128i a)
|
||||||
{
|
{
|
||||||
|
const __m128i b = _mm_set_epi64x(1, 2);
|
||||||
return _mm_clmulepi64_si128(a, b, 0);
|
return _mm_clmulepi64_si128(a, b, 0);
|
||||||
}
|
}
|
||||||
int main(void) { return 0; }
|
int main(void) { return 0; }
|
||||||
|
|
|
@ -938,6 +938,8 @@ AC_CHECK_DECL([_mm_movemask_epi8],
|
||||||
# For faster CRC on 32/64-bit x86 and E2K (see also crc64_fast.c):
|
# For faster CRC on 32/64-bit x86 and E2K (see also crc64_fast.c):
|
||||||
#
|
#
|
||||||
# - Check for the CLMUL intrinsic _mm_clmulepi64_si128 in <immintrin.h>.
|
# - Check for the CLMUL intrinsic _mm_clmulepi64_si128 in <immintrin.h>.
|
||||||
|
# Check also for _mm_set_epi64x for consistency with CMake build
|
||||||
|
# where it's needed to disable CLMUL with VS2013.
|
||||||
#
|
#
|
||||||
# - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works
|
# - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works
|
||||||
# together with _mm_clmulepi64_si128 from <immintrin.h>. The attribute
|
# together with _mm_clmulepi64_si128 from <immintrin.h>. The attribute
|
||||||
|
@ -965,13 +967,15 @@ else
|
||||||
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
|
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
|
||||||
__attribute__((__target__("ssse3,sse4.1,pclmul")))
|
__attribute__((__target__("ssse3,sse4.1,pclmul")))
|
||||||
#endif
|
#endif
|
||||||
__m128i my_clmul(__m128i a, __m128i b)
|
__m128i my_clmul(__m128i a)
|
||||||
{
|
{
|
||||||
|
const __m128i b = _mm_set_epi64x(1, 2);
|
||||||
return _mm_clmulepi64_si128(a, b, 0);
|
return _mm_clmulepi64_si128(a, b, 0);
|
||||||
}
|
}
|
||||||
]])], [
|
]])], [
|
||||||
AC_DEFINE([HAVE_USABLE_CLMUL], [1],
|
AC_DEFINE([HAVE_USABLE_CLMUL], [1],
|
||||||
[Define to 1 if _mm_clmulepi64_si128 is usable.
|
[Define to 1 if _mm_set_epi64x and
|
||||||
|
_mm_clmulepi64_si128 are usable.
|
||||||
See configure.ac for details.])
|
See configure.ac for details.])
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
], [
|
], [
|
||||||
|
|
Loading…
Reference in New Issue