From: Niels Möller Date: Mon, 27 Jan 2014 18:14:11 +0000 (+0100) Subject: Use pshufhw + pshuflw for 16-bit rotate. X-Git-Tag: nettle_3.0_release_20140607~158 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f51537c4e7c6e594adcb3d8ea817cbcd3db64bd1;p=thirdparty%2Fnettle.git Use pshufhw + pshuflw for 16-bit rotate. --- diff --git a/ChangeLog b/ChangeLog index d96a59db..7298cf30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2014-01-27 Niels Möller + * x86_64/chacha-core-internal.asm: Use pshufhw + pshuflw for the + 16-bit rotate. + * configure.ac (asm_replace_list): Added chacha-core-internal.asm. * x86_64/chacha-core-internal.asm: New file. diff --git a/x86_64/chacha-core-internal.asm b/x86_64/chacha-core-internal.asm index 744e0ddf..15e45718 100644 --- a/x86_64/chacha-core-internal.asm +++ b/x86_64/chacha-core-internal.asm @@ -26,15 +26,27 @@ define(, <%xmm2>) define(, <%xmm3>) define(, <%xmm4>) define(, <%xmm5>) - + +define(, ) + +C ROTL_BY_16(REG, TMP) +ifelse(USE_PSHUFW, , < +define(, < + pshufhw <$>0xb1, $1, $1 + pshuflw <$>0xb1, $1, $1 +>)>, < +define(, < + pslld <$>16, $1 + psrld <$>16, $2 + por $2, $1 +>) +>) C QROUND define(, < paddd X1, X0 pxor X0, X3 movaps X3, T0 - pslld <$>16, X3 - psrld <$>16, T0 - por T0, X3 + ROTL_BY_16(X3, T0) paddd X3, X2 pxor X2, X1