On 6/21/21 12:40 PM, Peter Maydell wrote:
On Mon, 21 Jun 2021 at 19:12, Richard Henderson
<richard.hender...@linaro.org> wrote:

On 6/21/21 7:01 AM, Peter Maydell wrote:
Side note: it's rather confusing that tcg_out_rev32() doesn't
emit a REV32 insn (it emits REV with sf==0).

Which is REV with SF=0 also has OPC=10, which is REV32.

No, REV32 has SF=1. The two operations are different:

  REV <Wd>, <Wn> -- swaps byte order of the bottom 32 bits
                    (zeroes the top half of Xd, as usual for Wn ops)
  REV32 <Xd>, <Xn> -- swaps byte order of bottom 32 bits and
                      also swaps byte order of top 32 bits
                      (ie it is a 64-bit to 64-bit operation
                       which does does two bswap32()s)

Ignore the assembler mnemonic and look at the opcode:

REV   Wd,Wn   = SF=0, OPC=10
REV32 Xd,Xn   = SF=1, OPC=10
REV   Xd,Xn   = SF=1, OPC=11

REV(Wd,Wd) = (uint32_t)REV32(Xd,Xd)
i.e. the usual interpretation of sf=0.


r~

Reply via email to