From: Eric Biggers <ebiggers@kernel.org>
To: Stefan Kanthak <stefan.kanthak@nexgo.de>
Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/4] crypto: x86/sha256-ni - simplify do_4rounds
Date: Mon, 15 Apr 2024 15:46:29 -0700 [thread overview]
Message-ID: <20240415224629.GB5206@sol.localdomain> (raw)
In-Reply-To: <65E53E4DD09F41CDA7EBCBD970E23C23@H270>
On Tue, Apr 16, 2024 at 12:04:56AM +0200, Stefan Kanthak wrote:
> "Eric Biggers" <ebiggers@kernel.org> wrote:
>
> > On Mon, Apr 15, 2024 at 10:41:07PM +0200, Stefan Kanthak wrote:
> [...]
> >> At last the final change: write the macro straightforward and SIMPLE,
> >> closely matching NIST.FIPS.180-4.pdf and their order of operations.
> >>
> >> @@ ...
> >> +.macro sha256 m0 :req, m1 :req, m2 :req, m3 :req
> >> +.if \@ < 4
> >> + movdqu \@*16(DATA_PTR), \m0
> >> + pshufb SHUF_MASK, \m0 # \m0 = {w(\@*16), w(\@*16+1), w(\@*16+2), w(\@*16+3)}
> >> +.else
> >> + # \m0 = {w(\@*16-16), w(\@*16-15), w(\@*16-14), w(\@*16-13)}
> >> + # \m1 = {w(\@*16-12), w(\@*16-11), w(\@*16-10), w(\@*16-9)}
> >> + # \m2 = {w(\@*16-8), w(\@*16-7), w(\@*16-6), w(\@*16-5)}
> >> + # \m3 = {w(\@*16-4), w(\@*16-3), w(\@*16-2), w(\@*16-1)}
> >> + sha256msg1 \m1, \m0
> >> + movdqa \m3, TMP
> >> + palignr $4, \m2, TMP
> >> + paddd TMP, \m0
> >> + sha256msg2 \m3, \m0 # \m0 = {w(\@*16), w(\@*16+1), w(\@*16+2), w(\@*16+3)}
> >> +.endif
> >> + movdqa (\@-8)*16(SHA256CONSTANTS), MSG
> >> + paddd \m0, MSG
> >> + sha256rnds2 STATE0, STATE1 # STATE1 = {f', e', b', a'}
> >> + punpckhqdq MSG, MSG
> >> + sha256rnds2 STATE1, STATE0 # STATE0 = {f", e", b", a"},
> >> + # STATE1 = {h", g", d", c"}
> >> +.endm
> >>
> >> JFTR: you may simplify this further using .altmacro and generate \m0 to \m3
> >> as MSG%(4-\@&3), MSG%(5-\@&3), MSG%(6-\@&3) and MSG%(7-\@&3) within
> >> the macro, thus getting rid of its 4 arguments.
> >>
> >> @@ ...
> >> +.rept 4 # 4*4*4 rounds
> >> + sha256 MSG0, MSG1, MSG2, MSG3
> >> + sha256 MSG1, MSG2, MSG3, MSG0
> >> + sha256 MSG2, MSG3, MSG0, MSG1
> >> + sha256 MSG3, MSG0, MSG1, MSG2
> >> +.endr
> >
> > Could you please send a real patch, following
> > Documentation/process/submitting-patches.rst? It's hard to understand what
> > you're proposing here.
>
> 1) I replace your macro (which unfortunately follows Tim Chens twisted code)
> COMPLETELY with a clean and simple implementation: message schedule first,
> update of state variables last.
> You don't need ".if \i >= 12 && \i < 60"/".if \i >= 4 && \i < 52" at all!
It's probably intentional that the code does the message schedule computations a
bit ahead of time. This might improve performance by reducing the time spent
waiting for the message schedule.
It would be worth trying a few different variants on different CPUs and seeing
how they actually perform in practice, though.
>
> 2) I replace the .irp which invokes your macro with a .rept: my macro uses \@
> instead of an argument for the round number.
>
> <https://sourceware.org/binutils/docs/as.html#Macro>
The \@ feature is a bit obscure and maybe is best avoided.
- Eric
next prev parent reply other threads:[~2024-04-15 22:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-11 16:23 [PATCH v2 0/4] crypto: x86/sha256-ni - cleanup and optimization Eric Biggers
2024-04-11 16:23 ` [PATCH v2 1/4] crypto: x86/sha256-ni - convert to use rounds macros Eric Biggers
2024-04-11 16:23 ` [PATCH v2 2/4] crypto: x86/sha256-ni - rename some register aliases Eric Biggers
2024-04-11 16:23 ` [PATCH v2 3/4] crypto: x86/sha256-ni - optimize code size Eric Biggers
2024-04-11 16:23 ` [PATCH v2 4/4] crypto: x86/sha256-ni - simplify do_4rounds Eric Biggers
2024-04-15 20:41 ` Stefan Kanthak
2024-04-15 21:21 ` Eric Biggers
2024-04-15 22:04 ` Stefan Kanthak
2024-04-15 22:46 ` Eric Biggers [this message]
2024-04-16 0:17 ` Stefan Kanthak
2024-04-19 11:00 ` [PATCH v2 0/4] crypto: x86/sha256-ni - cleanup and optimization Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240415224629.GB5206@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stefan.kanthak@nexgo.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.