aboutsummaryrefslogtreecommitdiff
path: root/i386-asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'i386-asm.c')
-rw-r--r--i386-asm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/i386-asm.c b/i386-asm.c
index 136fe60..71c451a 100644
--- a/i386-asm.c
+++ b/i386-asm.c
@@ -733,7 +733,11 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
autosize = NBWLX-2;
#endif
if (s == autosize) {
- for(i = 0; s == autosize && i < nb_ops; i++) {
+ /* Check for register operands providing hints about the size.
+ Start from the end, i.e. destination operands. This matters
+ only for opcodes accepting different sized registers, lar and lsl
+ are such opcodes. */
+ for(i = nb_ops - 1; s == autosize && i >= 0; i--) {
if ((ops[i].type & OP_REG) && !(op_type[i] & (OP_CL | OP_DX)))
s = reg_to_size[ops[i].type & OP_REG];
}