x86-asm: Fix signed constants and opcode order

Two things: negative constants were rejected (e.g. "add $-15,%eax").
Second the insn order was such that the arithmetic IM8S forms
weren't used (always the IM32 ones).  Switching them prefers those
but requires a fix for size calculation in case the opcodes were
OPC_ARITH and OPC_WLX (whose size starts with 1, not zero).
This commit is contained in:
Michael Matz
2016-05-14 04:33:41 +02:00
parent 080ec9fadd
commit 4f27e217a8
4 changed files with 12 additions and 3 deletions

View File

@ -156,6 +156,8 @@ movl %ebx, %fs
addl $0x123, %eax
add $0x123, %ebx
add $-16, %ecx
add $-0x123, %esi
addl $0x123, 0x100
addl $0x123, 0x100(%ebx)
addl $0x123, 0x100(%ebx,%edx,2)
@ -216,6 +218,8 @@ add (%ebx), %dl
div %bl
div %ecx, %eax
and $15,%bx
and $-20,%edx
shl %edx
shl $10, %edx
@ -690,3 +694,6 @@ ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9:
.type ft8,"function"
pause
.rept 6
nop
.endr