Add x86_64 support for AES-NI
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Fri, 16 Nov 2012 08:44:54 +0000 (10:44 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 21 Nov 2012 10:52:04 +0000 (11:52 +0100)
commitd8bdfa42ed582655c180e7db9b16d4e756a12a6e
tree426d21eb013a1cd01e3c5cf03e33c6c496c17ce6
parent9e1552517f68459a165ddebbba85e7cf37ff4f0c
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>
cipher/rijndael.c
src/hwfeatures.c