aboutsummaryrefslogtreecommitdiff
path: root/sys/crypto/openssl/amd64/x86_64cpuid.S
diff options
context:
space:
mode:
Diffstat (limited to 'sys/crypto/openssl/amd64/x86_64cpuid.S')
-rw-r--r--sys/crypto/openssl/amd64/x86_64cpuid.S30
1 files changed, 28 insertions, 2 deletions
diff --git a/sys/crypto/openssl/amd64/x86_64cpuid.S b/sys/crypto/openssl/amd64/x86_64cpuid.S
index 727ea8450004..eee7d27331de 100644
--- a/sys/crypto/openssl/amd64/x86_64cpuid.S
+++ b/sys/crypto/openssl/amd64/x86_64cpuid.S
@@ -1,12 +1,12 @@
/* Do not modify. This file is auto-generated from x86_64cpuid.pl. */
+
.hidden OPENSSL_cpuid_setup
.section .init
call OPENSSL_cpuid_setup
.hidden OPENSSL_ia32cap_P
-.comm OPENSSL_ia32cap_P,16,4
-
+.comm OPENSSL_ia32cap_P,40,4
.text
.globl OPENSSL_atomic_add
@@ -164,6 +164,7 @@ OPENSSL_ia32_cpuid:
movl $7,%eax
xorl %ecx,%ecx
cpuid
+ movd %eax,%xmm1
btl $26,%r9d
jc .Lnotknights
andl $0xfff7ffff,%ebx
@@ -174,9 +175,31 @@ OPENSSL_ia32_cpuid:
jne .Lnotskylakex
andl $0xfffeffff,%ebx
+
.Lnotskylakex:
movl %ebx,8(%rdi)
movl %ecx,12(%rdi)
+ movl %edx,16(%rdi)
+
+ movd %xmm1,%eax
+ cmpl $0x1,%eax
+ jb .Lno_extended_info
+ movl $0x7,%eax
+ movl $0x1,%ecx
+ cpuid
+ movl %eax,20(%rdi)
+ movl %edx,24(%rdi)
+ movl %ebx,28(%rdi)
+ movl %ecx,32(%rdi)
+
+ andl $0x80000,%edx
+ cmpl $0x0,%edx
+ je .Lno_extended_info
+ movl $0x24,%eax
+ movl $0x0,%ecx
+ cpuid
+ movl %ebx,36(%rdi)
+
.Lno_extended_info:
btl $27,%r9d
@@ -195,6 +218,9 @@ OPENSSL_ia32_cpuid:
cmpl $6,%eax
je .Ldone
.Lclear_avx:
+ andl $0xff7fffff,20(%rdi)
+
+
movl $0xefffe7ff,%eax
andl %eax,%r9d
movl $0x3fdeffdf,%eax