From bd93dc6923a9fe202401666a1f2749fbdced9971 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Wed, 11 May 2016 18:54:24 +0200 Subject: x86: Improve cmov handling cmov can accept multi sizes, but is also a OPC_TEST opcode, deal with this. --- i386-asm.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'i386-asm.c') diff --git a/i386-asm.c b/i386-asm.c index 435dd15..69514c0 100644 --- a/i386-asm.c +++ b/i386-asm.c @@ -659,6 +659,11 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode) } else if (pa->instr_type & OPC_TEST) { if (!(opcode >= pa->sym && opcode < pa->sym + NB_TEST_OPCODES)) continue; + /* cmovxx is a test opcode but accepts multiple sizes. + TCC doesn't accept the suffixed mnemonic, instead we + simply force size autodetection always. */ + if (pa->instr_type & OPC_WLX) + s = NBWLX - 1; } else if (pa->instr_type & OPC_B) { #ifdef TCC_TARGET_X86_64 /* Some instructions don't have the full size but only -- cgit v1.3.1