Home GnuPG

Add x86_64 support for AES-NI
d8bdfa42ed58Unpublished

Unpublished Commit · Learn More

Not On Permanent Ref: This commit is not an ancestor of any permanent ref.

Description

Add x86_64 support for AES-NI

* cipher/rijndael.c [ENABLE_AESNI_SUPPORT]: Enable USE_AESNI on x86-64.
(do_setkey) [USE_AESNI_is_disabled_here]: Use %[key] and %[ksch]
directly as registers instead of using temporary register %%esi.
[USE_AESNI] (do_aesni_enc_aligned, do_aesni_dec_aligned, do_aesni_cfb,
do_aesni_ctr, do_aesni_ctr_4): Use %[key] directly as register instead
of using temporary register %%esi.
[USE_AESNI] (do_aesni_cfb, do_aesni_ctr, do_aesni_ctr_4): Change %[key]
from generic "g" type to register "r".
* src/hwfeatures.c (_gcry_detect_hw_features) [__x86_64__]: Do not
clear AES-NI feature flag.

AES-NI assembler uses %%esi for key-material pointer register. However
%[key] can be marked as "r" (register) and automatically be 64bit on
x86-64 and be 32bit on i386.

So use %[key] for pointer register instead of %esi and that way make
same AES-NI code work on both x86-64 and i386.

[v2]

  • Add GNU style changelog
  • Fixed do_setkey changes, use %[ksch] for output instead of %[key]
  • Changed [key] assembler arguments from "g" to "r" to force use of registers in all cases (when tested v1, "g" did work as indented and %[key] mapped to register on i386 and x86-64, but that might not happen always).
  • Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>

Details

Provenance
jukiviliAuthored on Nov 16 2012, 9:44 AM
wernerCommitted on Nov 21 2012, 11:52 AM
Parents
rC9e1552517f68: Fix cpuid vendor-id check for i386 and x86-64
Branches
Unknown
Tags
Unknown

Event Timeline

Werner Koch <wk@gnupg.org> committed rCd8bdfa42ed58: Add x86_64 support for AES-NI (authored by Jussi Kivilinna <jussi.kivilinna@mbnet.fi>).Nov 21 2012, 11:52 AM