[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZQT4/gA4vIa/7H6q@casper.infradead.org>
Date: Sat, 16 Sep 2023 01:38:22 +0100
From: Matthew Wilcox <willy@...radead.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org,
linux-arch@...r.kernel.org, Nicholas Piggin <npiggin@...il.com>
Subject: Re: [PATCH 08/17] alpha: Implement xor_unlock_is_negative_byte
On Fri, Sep 15, 2023 at 05:27:17PM -0700, Linus Torvalds wrote:
> On Fri, 15 Sept 2023 at 11:37, Matthew Wilcox (Oracle)
> <willy@...radead.org> wrote:
> >
> > + "1: ldl_l %0,%4\n"
> > + " xor %0,%3,%0\n"
> > + " xor %0,%3,%2\n"
> > + " stl_c %0,%1\n"
>
> What an odd thing to do.
>
> Why don't you just save the old value? That double xor looks all kinds
> of strange, and is a data dependency for no good reason that I can
> see.
>
> Why isn't this "ldl_l + mov %0,%2 + xor + stl_c" instead?
>
> Not that I think alpha matters, but since I was looking through the
> series, this just made me go "Whaa?"
Well, this is my first time writing Alpha assembler ;-) I stole this
from ATOMIC_OP_RETURN:
"1: ldl_l %0,%1\n" \
" " #asm_op " %0,%3,%2\n" \
" " #asm_op " %0,%3,%0\n" \
" stl_c %0,%1\n" \
" beq %0,2f\n" \
".subsection 2\n" \
"2: br 1b\n" \
".previous" \
but yes, mov would do the trick here. Is it really faster than xor?
Powered by blists - more mailing lists