x86-64-asm: Fix ltr/str and push/pop operands

str accepts rm16/r32/r64, and push/pop defaults to 64 when given
memory operands (to 32 on i386).
This commit is contained in:
Michael Matz
2016-08-06 23:19:04 +02:00
parent 45b24c37a0
commit c0368604e1
3 changed files with 12 additions and 2 deletions

View File

@ -869,6 +869,9 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
if ((opcode == TOK_ASM_push || opcode == TOK_ASM_pop) &&
(ops[0].type & (OP_SEG | OP_IM8S | OP_IM32)))
s = 2;
else if ((opcode == TOK_ASM_push || opcode == TOK_ASM_pop) &&
(ops[0].type & OP_EA))
s = NBWLX - 2;
else
tcc_error("cannot infer opcode suffix");
}