[PATCH] cipher: prefer 128-bit blocksize in inline block helpers

Jussi Kivilinna jussi.kivilinna at iki.fi
Thu Jul 23 13:30:48 CEST 2026


* cipher/cipher-internal.h (_gcry_blocksize_shift, cipher_block_add)
(cipher_block_cpy, cipher_block_xor, cipher_block_xor_2dst)
(cipher_block_xor_n_copy_2, cipher_block_bswap): Mark 8-byte blocksize
branch with UNLIKELY.
--

Inline block helpers branch on blocksize 8 versus 16. 128-bit ciphers
dominate, so mark 8-byte branch unlikely and let compiler lay out
16-byte path as fall-through.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 cipher/cipher-internal.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/cipher/cipher-internal.h b/cipher/cipher-internal.h
index 7a10de6e..8e6cbffc 100644
--- a/cipher/cipher-internal.h
+++ b/cipher/cipher-internal.h
@@ -804,7 +804,7 @@ static inline unsigned int _gcry_blocksize_shift(gcry_cipher_hd_t c)
 {
   /* Only blocksizes 8 and 16 are used. Return value in such way
    * that compiler can optimize calling functions based on this.  */
-  return c->spec->blocksize == 8 ? 3 : 4;
+  return UNLIKELY(c->spec->blocksize == 8) ? 3 : 4;
 }
 
 
@@ -839,7 +839,7 @@ cipher_block_add(void *_dstsrc, unsigned int add, size_t blocksize)
   byte *dstsrc = _dstsrc;
   u64 s[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       buf_put_be64(dstsrc + 0, buf_get_be64(dstsrc + 0) + add);
     }
@@ -863,7 +863,7 @@ cipher_block_cpy(void *_dst, const void *_src, size_t blocksize)
   const byte *src = _src;
   u64 s[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       buf_put_he64(dst + 0, buf_get_he64(src + 0));
     }
@@ -888,7 +888,7 @@ cipher_block_xor(void *_dst, const void *_src1, const void *_src2,
   u64 s1[2];
   u64 s2[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       buf_put_he64(dst + 0, buf_get_he64(src1 + 0) ^ buf_get_he64(src2 + 0));
     }
@@ -924,7 +924,7 @@ cipher_block_xor_2dst(void *_dst1, void *_dst2, const void *_src,
   u64 d2[2];
   u64 s[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       d2[0] = buf_get_he64(dst2 + 0) ^ buf_get_he64(src + 0);
       buf_put_he64(dst2 + 0, d2[0]);
@@ -961,7 +961,7 @@ cipher_block_xor_n_copy_2(void *_dst_xor, const void *_src_xor,
   u64 sx[2];
   u64 sdc[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       sc[0] = buf_get_he64(src_cpy + 0);
       buf_put_he64(dst_xor + 0,
@@ -995,7 +995,7 @@ cipher_block_bswap (void *_dst_bswap, const void *_src_bswap,
   const byte *src_bswap = _src_bswap;
   u64 t[2];
 
-  if (blocksize == 8)
+  if (UNLIKELY(blocksize == 8))
     {
       buf_put_le64(dst_bswap, buf_get_be64(src_bswap));
     }
-- 
2.53.0




More information about the Gcrypt-devel mailing list