Re: [PATCH 08/17] alpha: Implement xor_unlock_is_negative_byte

From: Matthew Wilcox
Date: Fri Sep 15 2023 - 20:45:35 EST


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@xxxxxxxxxxxxx> 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?