When using immediate data for a fmovem.l to control register, and more than one register ist specified, only a single constant is written: fmovem.l #0xffffffff00000000,%fpsr/%fpcr nop result: 0: f23c 9800 0000 fmoveml #0,%fpsr/%fpcr 6: 0000 8: 4e71 nop Only the low 32-bit value was written. Specifying for example fmovem.l #0xffffffffffffffffffffffff,%fpsr/%fpcr/%fpiar nop does not work at all, because the constant overflows.
The IMM form only allows a single destination register. Both insns should be rejected.
Are you sure about this? I can't find any indication for that in the manual. Only register-direct are flagged as being allowed only for a single register. And actually, that is instruction is emulated, and also tested, by the FPSP060 support package: https://github.com/torvalds/linux/blob/1d94330a437a573cfdf848f6743b1ed169242c8a/arch/m68k/ifpsp060/src/ftest.S#L647