[openssl-commits] [openssl] master update
Andy Polyakov
appro at openssl.org
Wed Nov 8 20:45:59 UTC 2017
The branch master has been updated
via d6ee8f3dc4414cd97bd63b801f8644f0ff8a1f17 (commit)
from 1b6fa9fdf86fcfd5ce2a84d41388b79e328e14a3 (commit)
- Log -----------------------------------------------------------------
commit d6ee8f3dc4414cd97bd63b801f8644f0ff8a1f17
Author: Andy Polyakov <appro at openssl.org>
Date: Sun Nov 5 20:03:17 2017 +0100
OPENSSL_ia32cap: reserve for new extensions.
Reviewed-by: Rich Salz <rsalz at openssl.org>
-----------------------------------------------------------------------
Summary of changes:
crypto/cryptlib.c | 22 ++++++++++++++++------
crypto/x86_64cpuid.pl | 3 ++-
doc/man3/OPENSSL_ia32cap.pod | 5 +++++
3 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c
index eb24b27..c2bd219 100644
--- a/crypto/cryptlib.c
+++ b/crypto/cryptlib.c
@@ -61,16 +61,26 @@ void OPENSSL_cpuid_setup(void)
}
if ((env = strchr(env, ':'))) {
- unsigned int vecx;
+ IA32CAP vecx;
env++;
off = (env[0] == '~') ? 1 : 0;
- vecx = strtoul(env + off, NULL, 0);
- if (off)
- OPENSSL_ia32cap_P[2] &= ~vecx;
- else
- OPENSSL_ia32cap_P[2] = vecx;
+# if defined(_WIN32)
+ if (!sscanf(env + off, "%I64i", &vecx))
+ vecx = strtoul(env + off, NULL, 0);
+# else
+ if (!sscanf(env + off, "%lli", (long long *)&vecx))
+ vecx = strtoul(env + off, NULL, 0);
+# endif
+ if (off) {
+ OPENSSL_ia32cap_P[2] &= ~(unsigned int)vecx;
+ OPENSSL_ia32cap_P[3] &= ~(unsigned int)(vecx >> 32);
+ } else {
+ OPENSSL_ia32cap_P[2] = (unsigned int)vecx;
+ OPENSSL_ia32cap_P[3] = (unsigned int)(vecx >> 32);
+ }
} else {
OPENSSL_ia32cap_P[2] = 0;
+ OPENSSL_ia32cap_P[3] = 0;
}
} else {
vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl
index f228c24..7c8952e 100644
--- a/crypto/x86_64cpuid.pl
+++ b/crypto/x86_64cpuid.pl
@@ -68,7 +68,7 @@ OPENSSL_ia32_cpuid:
.cfi_register %rbx,%r8
xor %eax,%eax
- mov %eax,8(%rdi) # clear extended feature flags
+ mov %rax,8(%rdi) # clear extended feature flags
cpuid
mov %eax,%r11d # max value for standard query level
@@ -187,6 +187,7 @@ OPENSSL_ia32_cpuid:
and \$0xfff7ffff,%ebx # clear ADCX/ADOX flag
.Lnotknights:
mov %ebx,8(%rdi) # save extended feature flags
+ mov %ecx,12(%rdi)
.Lno_extended_info:
bt \$27,%r9d # check OSXSAVE bit
diff --git a/doc/man3/OPENSSL_ia32cap.pod b/doc/man3/OPENSSL_ia32cap.pod
index 7c5fde3..e4f5037 100644
--- a/doc/man3/OPENSSL_ia32cap.pod
+++ b/doc/man3/OPENSSL_ia32cap.pod
@@ -110,6 +110,10 @@ a.k.a. AVX512IFMA extension;
=item bit #64+31 denoting availability of AVX512VL extension;
+=item bit #64+41 denoting availability of VAES extension;
+
+=item bit #64+42 denoting availability of VPCLMULQDQ extension;
+
=back
To control this extended capability word use ':' as delimiter when
@@ -130,6 +134,7 @@ requirements are summarized in below table:
ADCX/ADOX | 2.23 | 2.10 | 3.3
AVX512 | 2.25 | 2.11.8 | see NOTES
AVX512IFMA | 2.26 | 2.11.8 | see NOTES
+ VAES | n/a | n/a |
=head1 NOTES
More information about the openssl-commits
mailing list