diff --git a/i386-asm.c b/i386-asm.c index 3d87e92..473088b 100644 --- a/i386-asm.c +++ b/i386-asm.c @@ -423,7 +423,7 @@ static void parse_operand(TCCState *s1, Operand *op) if (op->e.v == (uint16_t)op->e.v) op->type |= OP_IM16; #ifdef TCC_TARGET_X86_64 - if (op->e.v != (int32_t)op->e.v) + if (op->e.v != (int32_t)op->e.v && op->e.v != (uint32_t)op->e.v) op->type = OP_IM64; #endif } diff --git a/tests/asmtest.S b/tests/asmtest.S index c19db06..59deb06 100644 --- a/tests/asmtest.S +++ b/tests/asmtest.S @@ -49,6 +49,8 @@ movw %ax, 0x100(%ebx,%edx,2) movw $0x1122,%si movl $0x112233,%edx +movl $0x80000000, %esi +movl $-0x7fffffff, %edi #ifdef __x86_64__ mov $0x11223344,%rbx movq $0x11223344,%rbx