x86_64 assembly pack: "optimize" for Knights Landing, add AVX-512 results.
authorAndy Polyakov <appro@openssl.org>
Thu, 20 Jul 2017 07:48:35 +0000 (09:48 +0200)
committerAndy Polyakov <appro@openssl.org>
Fri, 21 Jul 2017 12:07:32 +0000 (14:07 +0200)
commit64d92d74985ebb3d0be58a9718f9e080a14a8e7f
tree036456c8d139587371300824d273d1c500411d1a
parentbbb4ceb86eb6ea0300f744443c36fb6e980fff9d
x86_64 assembly pack: "optimize" for Knights Landing, add AVX-512 results.

"Optimize" is in quotes because it's rather a "salvage operation"
for now. Idea is to identify processor capability flags that
drive Knights Landing to suboptimial code paths and mask them.
Two flags were identified, XSAVE and ADCX/ADOX. Former affects
choice of AES-NI code path specific for Silvermont (Knights Landing
is of Silvermont "ancestry"). And 64-bit ADCX/ADOX instructions are
effectively mishandled at decode time. In both cases we are looking
at ~2x improvement.

AVX-512 results cover even Skylake-X :-)

Hardware used for benchmarking courtesy of Atos, experiments run by
Romain Dolbeau <romain.dolbeau@atos.net>. Kudos!

Reviewed-by: Rich Salz <rsalz@openssl.org>
crypto/aes/asm/aesni-x86_64.pl
crypto/chacha/asm/chacha-x86_64.pl
crypto/modes/asm/aesni-gcm-x86_64.pl
crypto/modes/asm/ghash-x86_64.pl
crypto/poly1305/asm/poly1305-x86_64.pl
crypto/sha/asm/sha1-x86_64.pl
crypto/sha/asm/sha512-x86_64.pl
crypto/x86_64cpuid.pl