On Thu, 22 Dec 2022 at 21:55, Philippe Mathieu-Daudé <phi...@linaro.org> wrote: > > ARM CPUs fetch instructions in little-endian. > > smpboot[] encoded instructions are written in little-endian. > > We call tswap32() on the array. tswap32 function swap a 32-bit > value if the target endianness doesn't match the host one. > Otherwise it is a NOP. > > * On a little-endian host, the array is stored as it. tswap32() > is a NOP, and the vCPU fetches the instructions as it, in > little-endian. > > * On a big-endian host, the array is stored as it. tswap32() > swap the instructions to little-endian, and the vCPU fetches > the instructions as it, in little-endian. > > Using tswap() on system emulation is a bit odd: while the target > particularities might change the system emulation, the host ones > (such its endianness) shouldn't interfere. > > We can simplify by using const_le32() to always store the > instructions in the array in little-endian, removing the need > for the dubious tswap().
The tswap() in boot.c is not dubious at all. We start with a 32-bit value in host order (i.e. a C constant), and we want a value in guest order so we can write it into memory as a byte array. The correct function for that task is tswap()... -- PMM