• R
    tcg/i386: fix vector operations on 32-bit hosts · 93bf9a42
    Roman Kapl 提交于
    The TCG backend uses LOWREGMASK to get the low 3 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: 770c2fc7 ("Add vector operations")
    Signed-off-by: NRoman Kapl <rka@sysgo.com>
    Message-Id: <20180824131734.18557-1-rka@sysgo.com>
    Signed-off-by: NRichard Henderson <richard.henderson@linaro.org>
    93bf9a42
tcg-target.inc.c 115.6 KB