Optimize AES-NI CTR mode.
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Thu, 29 Nov 2012 15:31:03 +0000 (17:31 +0200)
committerWerner Koch <wk@gnupg.org>
Thu, 29 Nov 2012 18:03:24 +0000 (19:03 +0100)
commit9ee9e25f519696d509b1a5c1cc04ab0121e98a51
tree8f98f5846582efd09259c86df8eaabfa3c647cf4
parent6765e0a8618000d3dc7bda035163e0708c43791b
Optimize AES-NI CTR mode.

* cipher/rijndael.c [USE_AESNI] (do_aesni_ctr, do_aesni_ctr_4): Make
handling of 64-bit overflow and carry conditional. Avoid generic to
vector register passing of value '1'. Generate and use '-1' instead.
--

We only need to handle 64-bit carry in few special cases, that happen very
rarely. So move carry handling to slow-path and only detect need for carry
handling on fast-path. Also avoid moving '1' from generic register to vector
register, as that might be slow on some CPUs. Instead generate '-1' with
SSE2 instructions and use subtraction instead of addition to increase IV.

Overall this gives ~8% improvement in speed for AES CTR mode on Intel
Sandy-Bridge.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
cipher/rijndael.c