Thread (36 messages) 36 messages, 4 authors, 2025-07-05

Re: [PATCH 0/5] powerpc: Implement masked user access

From: Segher Boessenkool <hidden>
Date: 2025-06-24 18:37:13
Also in: linux-fsdevel, linux-mm, lkml

Hi!

On Tue, Jun 24, 2025 at 05:50:01PM +0100, David Laight wrote:
On Tue, 24 Jun 2025 08:17:14 -0500
Segher Boessenkool [off-list ref] wrote:
quoted
On Tue, Jun 24, 2025 at 07:27:47AM +0200, Christophe Leroy wrote:
quoted
Ah ok, I overlooked that, I didn't know the cmove instruction, seem 
similar to the isel instruction on powerpc e500.  
cmove does a move (register or memory) when some condition is true.
The destination of x86 'cmov' is always a register (only the source can be
memory - an is probably always read).
Both source operands can be mem, right?  But probably not both at the
same time.
It is a also a computational instruction.
Terminology...

x86 is not a RISC architecture, or more generally, a load/store
architecture.

A computational instruction is one that doesn't touch memory or does a
branch, or some system function, some supervisor or hypervisor
instruction maybe.

x86 does not have many computational insns, most insns can touch
memory :-)

(The important thing is that most computational insns do not ever cause
exceptions, the only exceptions are if you divide by zero or
similar :-) )
It may well always do the register write - hard to detect.

There is a planned new instruction that would do a conditional write
to memory - but not on any cpu yet.
Interesting!  Instructions like the atomic store insns we got for p9,
maybe?  They can do minimum/maximum and various kinds of more generic
reductions and similar.
quoted
isel (which is base PowerPC, not something "e500" only) is a
computational instruction, it copies one of two registers to a third,
which of the two is decided by any bit in the condition register.
Does that mean it could be used for all the ppc cpu variants?
No, only things that implement architecture version of 2.03 or later.
That is from 2006, so essentially everything that is still made
implements it :-)

But ancient things do not.  Both 970 (Apple G5) and Cell BE do not yet
have it (they are ISA 2.01 and 2.02 respectively).  And the older p5's
do not have it yet either, but the newer ones do.

And all classic PowerPC is ISA 1.xx of course.  Medieval CPUs :-)
quoted
But sure, seen from very far off both isel and cmove can be used to
implement the ternary operator ("?:"), are similar in that way :-)
Which is exactly what you want to avoid speculation.
There are cheaper / simpler / more effective / better ways to get that,
but sure, everything is better than a conditional branch, always :-)


Segher
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help