Hi!

On Fri, Sep 12, 2025 at 08:21:10PM +0100, Mark Cave-Ayland wrote:
> Whilst the patch is fairly complete, the problem I have is that there
> doesn't appear to be a concise list of CPUs that use BLRM (as opposed to
> proper LE memory accesses) when MSR_LE is enabled.

*All* older PowerPC have everything on the system busses in BE, and
when the CPU has MSR[LE]=1 it just swaps some lanes somewhere where
stuff is transfered to the execution cores.  Exactly how this is done
is quite funky, but not-naturally-aligned accesses in LE mode always
were disallowed anyway!

I'm not sure how LE is done on 970 (aka "G5"), a 64-bit core (it is
derived from GQ, POWER4+).

For the more current cores, since Power8 all LE and misaligned accesses
are supported with hardly any delay at all (sometimes the hardware needs
to do two memory accesses, but there is no exception and interrupt
caused, etc.)  And the hardware does a real shift, a big fat barrel
shifter in the load/store unit.

Oh, and also since P8 instructions in LE mode are stored byteswapped in
memory, too (older CPUs had instructions in BE always).  This is done
somewhere between the instruction cache and predecode.

> From what I can gather all 64-bit CPUs use proper LE memory accesses, but

They don't.

> it's not clear whether for 32-bit CPUs the use of BLRM can be derived from
> the PVR or other CPU registers.

It is still not clear to me what "BLRM" really means.

> Can anyone provide any insight as to which CPUs make use of BLRM for MSR_LE?

*All* CPUs that use the 6xx bus simply swap *and duplicate* some byte
lanes, in such a way that all naturally aligned accesses work as-if a
"real LE access" was done.  You can investigate it on real hardware by
seeing what happens to weird accesses.  There was something on the
Dolphin (GCN and Wii emulator) mailing lists some years ago you might
be able to find (I fail to currently, but I didn't look very far).

Btw:

>   g2               PVR 00810011

That is mpc82xx, which uses a "603e" core.  *All* 603 and 604 are called
G2 (G1 was 601, G3 is 740/750, G4 is 7400/7450 (two quite different
cores!), G5 is 970).


Segher

Reply via email to