diff options
Diffstat (limited to 'contrib/src/boost/uuid/detail/uuid_x86.hpp')
-rw-r--r-- | contrib/src/boost/uuid/detail/uuid_x86.hpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/contrib/src/boost/uuid/detail/uuid_x86.hpp b/contrib/src/boost/uuid/detail/uuid_x86.hpp index 5c73670..120b8d6 100644 --- a/contrib/src/boost/uuid/detail/uuid_x86.hpp +++ b/contrib/src/boost/uuid/detail/uuid_x86.hpp @@ -49,7 +49,7 @@ BOOST_FORCEINLINE __m128i load_unaligned_si128(const uint8_t* p) BOOST_NOEXCEPT return _mm_lddqu_si128(reinterpret_cast< const __m128i* >(p)); #elif !defined(BOOST_UUID_DETAIL_MSVC_BUG981648) return _mm_loadu_si128(reinterpret_cast< const __m128i* >(p)); -#elif BOOST_MSVC >= 1600 +#elif defined(BOOST_MSVC) && BOOST_MSVC >= 1600 __m128i mm = _mm_loadu_si128(reinterpret_cast< const __m128i* >(p)); // Make sure this load doesn't get merged with the subsequent instructions _ReadWriteBarrier(); @@ -68,7 +68,7 @@ inline bool uuid::is_nil() const BOOST_NOEXCEPT #if defined(BOOST_UUID_USE_SSE41) return _mm_test_all_zeros(mm, mm) != 0; #else - mm = _mm_cmpeq_epi8(mm, _mm_setzero_si128()); + mm = _mm_cmpeq_epi32(mm, _mm_setzero_si128()); return _mm_movemask_epi8(mm) == 0xFFFF; #endif } @@ -86,11 +86,11 @@ inline bool operator== (uuid const& lhs, uuid const& rhs) BOOST_NOEXCEPT __m128i mm_left = uuids::detail::load_unaligned_si128(lhs.data); __m128i mm_right = uuids::detail::load_unaligned_si128(rhs.data); - __m128i mm_cmp = _mm_cmpeq_epi32(mm_left, mm_right); - #if defined(BOOST_UUID_USE_SSE41) - return _mm_test_all_ones(mm_cmp) != 0; + __m128i mm = _mm_xor_si128(mm_left, mm_right); + return _mm_test_all_zeros(mm, mm) != 0; #else + __m128i mm_cmp = _mm_cmpeq_epi32(mm_left, mm_right); return _mm_movemask_epi8(mm_cmp) == 0xFFFF; #endif } |