From 36ee9a5a0ddfb9300a15088877e7a5bab0891578 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Thu, 29 Nov 2018 12:54:16 -1000 Subject: [PATCH] Pretend AMD XOP was never a thing. It's not clear that any AMD XOP code paths are being properly tested. AMD dropped XOP starting in Zen. Here's the one place I found (without looking too hard) where it seems there is a XOP code path in BoringSSL, in sha512-x86_64.pl. Most of the other XOP code was removed. ``` $code.=<<___ if ($avx && $SZ==8); test \$`1<<11`,%r10d # check for XOP jnz .Lxop_shortcut ``` Change-Id: Id3301b2c84648790d010dae546b8e21ece1c528d Reviewed-on: https://boringssl-review.googlesource.com/c/33405 Reviewed-by: David Benjamin Reviewed-by: Adam Langley Commit-Queue: Adam Langley --- crypto/cpu-intel.c | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/crypto/cpu-intel.c b/crypto/cpu-intel.c index 5c21f4a4..98d8d4e5 100644 --- a/crypto/cpu-intel.c +++ b/crypto/cpu-intel.c @@ -148,23 +148,6 @@ void OPENSSL_cpuid_setup(void) { int is_intel = ebx == 0x756e6547 /* Genu */ && edx == 0x49656e69 /* ineI */ && ecx == 0x6c65746e /* ntel */; - int is_amd = ebx == 0x68747541 /* Auth */ && - edx == 0x69746e65 /* enti */ && - ecx == 0x444d4163 /* cAMD */; - - int has_amd_xop = 0; - if (is_amd) { - // AMD-specific logic. - // See http://developer.amd.com/wordpress/media/2012/10/254811.pdf - OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000000); - uint32_t num_extended_ids = eax; - if (num_extended_ids >= 0x80000001) { - OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000001); - if (ecx & (1u << 11)) { - has_amd_xop = 1; - } - } - } uint32_t extended_features[2] = {0}; if (num_ids >= 7) { @@ -198,12 +181,9 @@ void OPENSSL_cpuid_setup(void) { edx &= ~(1u << 30); } - // The SDBG bit is repurposed to denote AMD XOP support. - if (has_amd_xop) { - ecx |= (1u << 11); - } else { - ecx &= ~(1u << 11); - } + // The SDBG bit is repurposed to denote AMD XOP support. Don't ever use AMD + // XOP code paths. + ecx &= ~(1u << 11); uint64_t xcr0 = 0; if (ecx & (1u << 27)) {