Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp1470431pxb; Wed, 12 Jan 2022 15:52:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJzjmFetisYXslP7ySp0PZFbZy+nOE5UBUuAarcqFnI+Y1AYE1JYjaYh60/CUGj+oFkGof9s X-Received: by 2002:a17:90b:1e07:: with SMTP id pg7mr2230092pjb.228.1642031529693; Wed, 12 Jan 2022 15:52:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642031529; cv=none; d=google.com; s=arc-20160816; b=npRTJiZe5hPFWNv/qjGId0hl5Ca+0l8V8m9dfABWUSHQkwUFZaaPPe2PHFXxO0OU9E VoFjprso5Sf6QoZa5wD6ihYFrv1ak9jGjfrL6xEuKuDe59Onpb3CILbwLzEEHJVJRXJr VK1h0hZ1PHksBbB4VY1xUIpXd22AYU5mVa+gtO/oQaTSpWQB0CK/yE3PIVES1mpZdLD8 CAPZsaIHVXnp15Gk7tg3fJWW8q1tW708Yx4tJC/uooacHH/mt8VRIr18MhdaBa1g6E7d EqEgAaUe6jlpI5+9YFpaL3RGzwLJ2h7spaZhSElXOSAavZ5DYE76vb9EWDI3map4Sm55 ++YA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=uN3kM6GMrmEJYYp9WKKcWc34gY32hgeCYuvQQOe90e8=; b=r9lA3jBMx1l006X0ZhIdK1VPfrox2p44bgLgH/uSYNYQWIxmfb7RIMEFNyct1o8BM/ 048eMW3d2GVE+qF63PJrqvEZWrW26eYnxfbfH7+0Y1rY+mmC618X69ggYsEF/iIRxg46 Aqa9grfQwA2QRsschfxG3/dzfubKR9rHe/9E3v3hqo/96chBi41R8WkH2QzFdVSBcOAR TrxflCAjrfcKMEAnJ2HWNb4DLnr+E8nTfx0pth7CbbkZGVLnZi6MEJWPD9wURXU+1f2s CEoDpzEXNCMKEHrDQNNGrWSu8mIxWjruCPlFCCBKZUyGgf12A7MxKeanZ7lLv9/oYTTx 4O1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=V4aeHa5Q; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 8si1199924pfm.274.2022.01.12.15.51.48; Wed, 12 Jan 2022 15:52:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=V4aeHa5Q; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356231AbiALScm (ORCPT + 99 others); Wed, 12 Jan 2022 13:32:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356295AbiALScJ (ORCPT ); Wed, 12 Jan 2022 13:32:09 -0500 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 927C2C061759; Wed, 12 Jan 2022 10:32:02 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 8C12CCE1E21; Wed, 12 Jan 2022 18:32:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC72AC36AE5; Wed, 12 Jan 2022 18:31:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1642012319; bh=SIOFpKrKnQowDOnmtxefi+bybl5zeZB6n3VbvATVFBY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=V4aeHa5QLi8d5BOg6sv0gr+x+PgLEzDphY5W9nRxsHjh6z4a/6EMHng9D75BAM6Ct zNP0R2wv/Frb46fN9k47C2rGg5Z4eRDU45dl2liVB9tycOqrsJLcjnR1ET4JSX14sV ANVlYcpU4KpPTW8Ymr0tMG7NqGErK0wEyelLvM92Qj10ktOFFrm8RAOAbdIoplI3mk 5SdR7b+RMwmWXQwkKn7vvl7Qib4xy9W29MrbwtCBeWkkLk+v/Vn32DaMTggmUi7aAw 1B5awF8+2fvKHU7F8hodfx9vInNNVpOFRAyWQMfoK0NaB6tdknpS3MpGI4/vknMPsV aIgS2bSCn6J+Q== Date: Wed, 12 Jan 2022 10:31:57 -0800 From: Eric Biggers To: "Jason A. Donenfeld" Cc: linux-crypto@vger.kernel.org, netdev@vger.kernel.org, wireguard@lists.zx2c4.com, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, geert@linux-m68k.org, tytso@mit.edu, gregkh@linuxfoundation.org, jeanphilippe.aumasson@gmail.com, ardb@kernel.org, Herbert Xu Subject: Re: [PATCH crypto 1/2] lib/crypto: blake2s-generic: reduce code size on small systems Message-ID: References: <20220111134934.324663-1-Jason@zx2c4.com> <20220111134934.324663-2-Jason@zx2c4.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220111134934.324663-2-Jason@zx2c4.com> Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On Tue, Jan 11, 2022 at 02:49:33PM +0100, Jason A. Donenfeld wrote: > Re-wind the loops entirely on kernels optimized for code size. This is > really not good at all performance-wise. But on m68k, it shaves off 4k > of code size, which is apparently important. > > Cc: Geert Uytterhoeven > Cc: Herbert Xu > Cc: Ard Biesheuvel > Signed-off-by: Jason A. Donenfeld > --- > lib/crypto/blake2s-generic.c | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/lib/crypto/blake2s-generic.c b/lib/crypto/blake2s-generic.c > index 75ccb3e633e6..990f000e22ee 100644 > --- a/lib/crypto/blake2s-generic.c > +++ b/lib/crypto/blake2s-generic.c > @@ -46,7 +46,7 @@ void blake2s_compress_generic(struct blake2s_state *state, const u8 *block, > { > u32 m[16]; > u32 v[16]; > - int i; > + int i, j; > > WARN_ON(IS_ENABLED(DEBUG) && > (nblocks > 1 && inc != BLAKE2S_BLOCK_SIZE)); > @@ -86,17 +86,23 @@ void blake2s_compress_generic(struct blake2s_state *state, const u8 *block, > G(r, 6, v[2], v[ 7], v[ 8], v[13]); \ > G(r, 7, v[3], v[ 4], v[ 9], v[14]); \ > } while (0) > - ROUND(0); > - ROUND(1); > - ROUND(2); > - ROUND(3); > - ROUND(4); > - ROUND(5); > - ROUND(6); > - ROUND(7); > - ROUND(8); > - ROUND(9); > - > + if (IS_ENABLED(CONFIG_CC_OPTIMIZE_FOR_SIZE)) { > + for (i = 0; i < 10; ++i) { > + for (j = 0; j < 8; ++j) > + G(i, j, v[j % 4], v[((j + (j / 4)) % 4) + 4], v[((j + 2 * (j / 4)) % 4) + 8], v[((j + 3 * (j / 4)) % 4) + 12]); > + } How about unrolling the inner loop but not the outer one? Wouldn't that give most of the benefit, without hurting performance as much? If you stay with this approach and don't unroll either loop, can you use 'r' and 'i' instead of 'i' and 'j', to match the naming in G()? Also, please wrap lines at 80 columns. - Eric