summaryrefslogtreecommitdiffstats
path: root/crypto/x86_64cpuid.pl
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2017-03-05 20:38:36 +0100
committerAndy Polyakov <appro@openssl.org>2017-03-07 11:19:20 +0100
commitc6e4fdbf8b44010ba12b72d519e437bbd2da71e6 (patch)
tree40d47f58b30dcef14e54eb7fbad46d91f908d812 /crypto/x86_64cpuid.pl
parentbf1c92faf6d3adba62165432164f5732da3d99c9 (diff)
crypto/x86_64cpuid.pl: move extended feature detection upwards.
Exteneded feature flags were not pulled on AMD processors, as result a number of extensions were effectively masked on Ryzen. It should have been reported for Excavator since it implements AVX2 extension, but apparently nobody noticed or cared... Reviewed-by: Rich Salz <rsalz@openssl.org> (cherry picked from commit f8418d87e191e46b81e1b9548326ab2876fa0907)
Diffstat (limited to 'crypto/x86_64cpuid.pl')
-rw-r--r--crypto/x86_64cpuid.pl18
1 files changed, 10 insertions, 8 deletions
diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl
index 6cb152148b..21d48ee6f9 100644
--- a/crypto/x86_64cpuid.pl
+++ b/crypto/x86_64cpuid.pl
@@ -70,6 +70,16 @@ OPENSSL_ia32_cpuid:
cpuid
mov %eax,%r11d # max value for standard query level
+ cmp \$7,%eax
+ jb .Lno_extended_info
+
+ mov \$7,%eax
+ xor %ecx,%ecx
+ cpuid
+ mov %ebx,8(%rdi)
+
+.Lno_extended_info:
+
xor %eax,%eax
cmp \$0x756e6547,%ebx # "Genu"
setne %al
@@ -134,14 +144,6 @@ OPENSSL_ia32_cpuid:
shr \$14,%r10d
and \$0xfff,%r10d # number of cores -1 per L1D
- cmp \$7,%r11d
- jb .Lnocacheinfo
-
- mov \$7,%eax
- xor %ecx,%ecx
- cpuid
- mov %ebx,8(%rdi)
-
.Lnocacheinfo:
mov \$1,%eax
cpuid