From 429e6f78a88473208e96689afa2f6e91f07a4f8c Mon Sep 17 00:00:00 2001 From: Stephan Hartmann Date: Sat, 10 Apr 2021 17:02:49 +0000 Subject: [PATCH] GCC: fix vector types in pcscan * _mm_cmpeq_epi64 result is __m128i * maybe_ptrs is __m128i already and doesn't require cast Bug: 819294 Change-Id: I3f8c6cc327191827838e80aea1431ac09315fe88 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2817544 Reviewed-by: Anton Bikineev Commit-Queue: Stephan Hartmann Cr-Commit-Position: refs/heads/master@{#871265} --- diff --git a/base/allocator/partition_allocator/starscan/pcscan.cc b/base/allocator/partition_allocator/starscan/pcscan.cc index c7854ff..d5c0aea 100644 --- a/base/allocator/partition_allocator/starscan/pcscan.cc +++ b/base/allocator/partition_allocator/starscan/pcscan.cc @@ -1143,7 +1143,7 @@ const __m128i maybe_ptrs = _mm_loadu_si128(reinterpret_cast<__m128i*>(payload)); const __m128i vand = _mm_and_si128(maybe_ptrs, cage_mask); - const __m128d vcmp = _mm_cmpeq_epi64(vand, vbase); + const __m128i vcmp = _mm_cmpeq_epi64(vand, vbase); const int mask = _mm_movemask_pd(_mm_castsi128_pd(vcmp)); if (LIKELY(!mask)) continue; @@ -1153,15 +1153,14 @@ if (mask & 0b01) { quarantine_size += pcscan_task_.TryMarkObjectInNormalBuckets( - _mm_cvtsi128_si64(_mm_castpd_si128(maybe_ptrs))); + _mm_cvtsi128_si64(maybe_ptrs)); } if (mask & 0b10) { // Extraction intrinsics for qwords are only supported in SSE4.1, so // instead we reshuffle dwords with pshufd. The mask is used to move the // 4th and 3rd dwords into the second and first position. static constexpr int kSecondWordMask = (3 << 2) | (2 << 0); - const __m128i shuffled = - _mm_shuffle_epi32(_mm_castpd_si128(maybe_ptrs), kSecondWordMask); + const __m128i shuffled = _mm_shuffle_epi32(maybe_ptrs, kSecondWordMask); quarantine_size += pcscan_task_.TryMarkObjectInNormalBuckets( _mm_cvtsi128_si64(shuffled));