Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933594AbcKGTNq (ORCPT ); Mon, 7 Nov 2016 14:13:46 -0500 Received: from frisell.zx2c4.com ([192.95.5.64]:58978 "EHLO frisell.zx2c4.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933105AbcKGTNk (ORCPT ); Mon, 7 Nov 2016 14:13:40 -0500 From: "Jason A. Donenfeld" To: Herbert Xu , "David S. Miller" , linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, Martin Willi , Eric Biggers , =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Cc: "Jason A. Donenfeld" Subject: [PATCH v2] poly1305: generic C can be faster on chips with slow unaligned access Date: Mon, 7 Nov 2016 20:12:53 +0100 Message-Id: <20161107191253.17998-1-Jason@zx2c4.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161102175810.18647-1-Jason@zx2c4.com> References: <20161102175810.18647-1-Jason@zx2c4.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1702 Lines: 41 By using the unaligned access helpers, we drastically improve performance on small MIPS routers that have to go through the exception fix-up handler for these unaligned accesses. Signed-off-by: Jason A. Donenfeld --- crypto/poly1305_generic.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crypto/poly1305_generic.c b/crypto/poly1305_generic.c index 2df9835d..0b86f4e 100644 --- a/crypto/poly1305_generic.c +++ b/crypto/poly1305_generic.c @@ -66,9 +66,9 @@ static void poly1305_setrkey(struct poly1305_desc_ctx *dctx, const u8 *key) { /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ dctx->r[0] = (le32_to_cpuvp(key + 0) >> 0) & 0x3ffffff; - dctx->r[1] = (le32_to_cpuvp(key + 3) >> 2) & 0x3ffff03; - dctx->r[2] = (le32_to_cpuvp(key + 6) >> 4) & 0x3ffc0ff; - dctx->r[3] = (le32_to_cpuvp(key + 9) >> 6) & 0x3f03fff; + dctx->r[1] = (get_unaligned_le32(key + 3) >> 2) & 0x3ffff03; + dctx->r[2] = (get_unaligned_le32(key + 6) >> 4) & 0x3ffc0ff; + dctx->r[3] = (get_unaligned_le32(key + 9) >> 6) & 0x3f03fff; dctx->r[4] = (le32_to_cpuvp(key + 12) >> 8) & 0x00fffff; } @@ -138,9 +138,9 @@ static unsigned int poly1305_blocks(struct poly1305_desc_ctx *dctx, /* h += m[i] */ h0 += (le32_to_cpuvp(src + 0) >> 0) & 0x3ffffff; - h1 += (le32_to_cpuvp(src + 3) >> 2) & 0x3ffffff; - h2 += (le32_to_cpuvp(src + 6) >> 4) & 0x3ffffff; - h3 += (le32_to_cpuvp(src + 9) >> 6) & 0x3ffffff; + h1 += (get_unaligned_le32(src + 3) >> 2) & 0x3ffffff; + h2 += (get_unaligned_le32(src + 6) >> 4) & 0x3ffffff; + h3 += (get_unaligned_le32(src + 9) >> 6) & 0x3ffffff; h4 += (le32_to_cpuvp(src + 12) >> 8) | hibit; /* h *= r */ -- 2.10.2