sha/asm/keccak1600-x86_64.pl: remove redundant moves.
[openssl.git] / crypto / x86_64cpuid.pl
index 3082253aea947082d12b456e9399d20ea3c253aa..2467af7e9e70b695b74611d78fd79df36aeae590 100644 (file)
@@ -63,10 +63,12 @@ OPENSSL_rdtsc:
 .type  OPENSSL_ia32_cpuid,\@function,1
 .align 16
 OPENSSL_ia32_cpuid:
+.cfi_startproc
        mov     %rbx,%r8                # save %rbx
+.cfi_register  %rbx,%r8
 
        xor     %eax,%eax
-       mov     %eax,8(%rdi)            # clear 3rd word
+       mov     %eax,8(%rdi)            # clear extended feature flags
        cpuid
        mov     %eax,%r11d              # max value for standard query level
 
@@ -134,14 +136,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
@@ -171,6 +165,15 @@ OPENSSL_ia32_cpuid:
        or      %ecx,%r9d               # merge AMD XOP flag
 
        mov     %edx,%r10d              # %r9d:%r10d is copy of %ecx:%edx
+
+       cmp     \$7,%r11d
+       jb      .Lno_extended_info
+       mov     \$7,%eax
+       xor     %ecx,%ecx
+       cpuid
+       mov     %ebx,8(%rdi)            # save extended feature flags
+.Lno_extended_info:
+
        bt      \$27,%r9d               # check OSXSAVE bit
        jnc     .Lclear_avx
        xor     %ecx,%ecx               # XCR0
@@ -194,8 +197,10 @@ OPENSSL_ia32_cpuid:
        shl     \$32,%r9
        mov     %r10d,%eax
        mov     %r8,%rbx                # restore %rbx
+.cfi_restore   %rbx
        or      %r9,%rax
        ret
+.cfi_endproc
 .size  OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
 
 .globl  OPENSSL_cleanse