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?