x86-asm: Reject some invalid arith imm8 instruction
There were two errors in the arithmetic imm8 instruction. They accept only REGW, and in case the user write a xxxb opcode that variant needs to be rejected as well (it's not automatically rejected by REGW in case the destination is memory).
This commit is contained in:
@ -552,7 +552,14 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
||||
continue;
|
||||
s = (opcode - pa->sym) % NBWLX;
|
||||
if ((pa->instr_type & OPC_BWLX) == OPC_WLX)
|
||||
{
|
||||
/* We need to reject the xxxb opcodes that we accepted above.
|
||||
Note that pa->sym for WLX opcodes is the 'w' token,
|
||||
to get the 'b' token subtract one. */
|
||||
if (((opcode - pa->sym + 1) % NBWLX) == 0)
|
||||
continue;
|
||||
s++;
|
||||
}
|
||||
} else if (pa->instr_type & OPC_SHIFT) {
|
||||
if (!(opcode >= pa->sym && opcode < pa->sym + 7*NBWLX))
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user