On 8/24/18 6:17 AM, Roman Kapl wrote: > The TCG backend uses LOWREGMASK to get the low 7 bits of register numbers. > This > was defined as no-op for 32-bit x86, with the assumption that we have eight > registers anyway. This assumption is not true once we have xmm regs. > > Since LOWREGMASK was a no-op, xmm register indidices were wrong in opcodes and > have overflown into other opcode fields, wreaking havoc. > > To trigger these problems, you can try running the "movi d8, #0x0" AArch64 > instruction on 32-bit x86. "vpxor %xmm0, %xmm0, %xmm0" should be generated, > but instead TCG generated "vpxor %xmm0, %xmm0, %xmm2". > > Fixes: 770c2fc7bb ("Add vector operations") > Signed-off-by: Roman Kapl <r...@sysgo.com> > --- > > Note: It could also be possible to add a dedicated VEC_LOWREGMASK, but I don't > think it is better or signigicantly faster.
Agreed, this does seem to be the clearest solution. I've queued the patch with the "7" typo in the commit message fixed. r~