[PATCH 2/2] crc-intel-pclmul: split assembly block to ease register pressure
Jussi Kivilinna
jussi.kivilinna at iki.fi
Tue Jul 19 12:51:39 CEST 2016
* cipher/crc-intel-pclmul.c (crc32_less_than_16): Split inline
assembly block handling 4 byte input into multiple blocks.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
0 files changed
diff --git a/cipher/crc-intel-pclmul.c b/cipher/crc-intel-pclmul.c
index 2972fb4..7a344e2 100644
--- a/cipher/crc-intel-pclmul.c
+++ b/cipher/crc-intel-pclmul.c
@@ -747,22 +747,28 @@ crc32_less_than_16 (u32 *pcrc, const byte *inbuf, size_t inlen,
asm volatile ("movd %[crc], %%xmm0\n\t"
"movd %[in], %%xmm1\n\t"
"movdqa %[my_p], %%xmm5\n\t"
- "pxor %%xmm1, %%xmm0\n\t"
+ :
+ : [in] "m" (*inbuf),
+ [crc] "m" (*pcrc),
+ [my_p] "m" (consts->my_p[0])
+ : "cc" );
+
+ asm volatile ("pxor %%xmm1, %%xmm0\n\t"
"pshufb %[bswap], %%xmm0\n\t" /* [xx][00][00][00] */
"pclmulqdq $0x01, %%xmm5, %%xmm0\n\t" /* [00][xx][xx][00] */
"pclmulqdq $0x11, %%xmm5, %%xmm0\n\t" /* [00][00][xx][xx] */
+ :
+ : [bswap] "m" (*crc32_bswap_shuf)
+ : "cc" );
- /* store CRC in input endian */
+ asm volatile (/* store CRC in input endian */
"movd %%xmm0, %%eax\n\t"
"bswapl %%eax\n\t"
"movl %%eax, %[out]\n\t"
: [out] "=m" (*pcrc)
- : [in] "m" (*inbuf),
- [crc] "m" (*pcrc),
- [my_p] "m" (consts->my_p[0]),
- [bswap] "m" (*crc32_bswap_shuf)
- : "eax" );
+ :
+ : "eax", "cc" );
}
else
{
More information about the Gcrypt-devel
mailing list