The branch master has been updated
       via  d6ee8f3dc4414cd97bd63b801f8644f0ff8a1f17 (commit)
      from  1b6fa9fdf86fcfd5ce2a84d41388b79e328e14a3 (commit)


- Log -----------------------------------------------------------------
commit d6ee8f3dc4414cd97bd63b801f8644f0ff8a1f17
Author: Andy Polyakov <[email protected]>
Date:   Sun Nov 5 20:03:17 2017 +0100

    OPENSSL_ia32cap: reserve for new extensions.
    
    Reviewed-by: Rich Salz <[email protected]>

-----------------------------------------------------------------------

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
 
_____
openssl-commits mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits

Reply via email to