mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-09-22 10:43:39 -04:00
Two fixes: 1. Optimization of [bx+0xFFFF] etc 0xFFFF is an sbyte under 16-bit semantics, so make sure to check it right. 2. Don't optimize displacements in -O0 Displacements that fit into an sbyte or can be removed should *not* be optimized in -O0. Implicit zero displacements are still optimized, e.g.: [eax] -> 0 bit displacement, [ebp] -> 8 bit displacement. However explicit displacements are not optimized: [eax+0] -> 32 bit displacement, [ebp+0] -> 32 bit displacement. Because #2 breaks compatibility with 0.98, I introduced a new optimization level: -OL, legacy.
38 lines
738 B
NASM
38 lines
738 B
NASM
;Testname=O0; Arguments=-O0 -fbin -ozero_displacement.bin; Files=stdout stderr zero_displacement.bin
|
|
;Testname=OL; Arguments=-OL -fbin -ozero_displacement.bin; Files=stdout stderr zero_displacement.bin
|
|
;Testname=O1; Arguments=-O1 -fbin -ozero_displacement.bin; Files=stdout stderr zero_displacement.bin
|
|
;Testname=Ox; Arguments=-Ox -fbin -ozero_displacement.bin; Files=stdout stderr zero_displacement.bin
|
|
|
|
bits 16
|
|
|
|
mov ax, [bx]
|
|
mov ax, [bx+0]
|
|
|
|
mov ax, [bx+di]
|
|
mov ax, [bx+di+0]
|
|
|
|
mov ax, [bp]
|
|
mov ax, [bp+0]
|
|
|
|
bits 32
|
|
|
|
mov eax, [eax]
|
|
mov eax, [eax+0]
|
|
|
|
mov eax, [eax+ebx]
|
|
mov eax, [eax+ebx+0]
|
|
|
|
mov eax, [ebp]
|
|
mov eax, [ebp+0]
|
|
|
|
bits 64
|
|
|
|
mov eax, [rax]
|
|
mov eax, [rax+0]
|
|
|
|
mov eax, [rax+rbx]
|
|
mov eax, [rax+rbx+0]
|
|
|
|
mov eax, [rbp]
|
|
mov eax, [rbp+0]
|