package/libabseil-cpp: fix build on x86 32-bit with AES

Since the bump to version 20260817.0, the AES-based hash for long
strings is used whenever __SSE4_2__ and __AES__ are defined. It relies
on _mm_cvtsi128_si64() and _mm_extract_epi64(), which are only
available on x86_64, so the build fails on 32-bit x86 for CPUs that
support SSE4.2 and AES:

  hash.cc:115:32: error: '_mm_cvtsi128_si64' was not declared in this scope

Add a patch from a pending upstream pull request restricting this code
path to x86_64.

Fixes:
https://autobuild.buildroot.org/results/48198506ef76c6ebad0a802cb1fdd5270494eae1

Assisted-by: Claude:claude-opus-5
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Yegor Yefremov
2026-09-25 15:35:36 +02:00
committed by Thomas Petazzoni
parent 66c1665642
commit 54ccee7e67

View File

@@ -0,0 +1,33 @@
From 66cd3bf8a9c19f03c5b0bf58031ab8176fb5608a Mon Sep 17 00:00:00 2001
From: Jaipaul Cheernam <jaipaul.cheernam@est.tech>
Date: Thu, 24 Sep 2026 14:59:26 +0000
Subject: [PATCH] Fix 32-bit x86 build of hash.cc
The x86 AES SIMD path in absl/hash/internal/hash.cc uses the 64-bit-only
_mm_cvtsi128_si64 and _mm_extract_epi64 intrinsics but is gated only on
__SSE4_2__ && __AES__, so 32-bit x86 builds fail to compile.
Require __x86_64__/_M_X64 for that path, matching the existing guard in
absl/crc/internal/crc32_x86_arm_combined_simd.h.
Fixes: https://github.com/abseil/abseil-cpp/issues/2176
Upstream: https://github.com/abseil/abseil-cpp/pull/2177
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
---
absl/hash/internal/hash.cc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/absl/hash/internal/hash.cc b/absl/hash/internal/hash.cc
index 43cb561..ef85625 100644
--- a/absl/hash/internal/hash.cc
+++ b/absl/hash/internal/hash.cc
@@ -28,7 +28,8 @@
#ifdef ABSL_AES_INTERNAL_HAVE_X86_SIMD
#error ABSL_AES_INTERNAL_HAVE_X86_SIMD cannot be directly set
-#elif defined(__SSE4_2__) && defined(__AES__)
+#elif defined(__SSE4_2__) && defined(__AES__) && \
+ (defined(__x86_64__) || defined(_M_X64))
#define ABSL_AES_INTERNAL_HAVE_X86_SIMD
#endif