mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-09-22 10:43:39 -04:00
A pattern for XCHG was incompletely macroized. This caused a fallthrough to the next pattern, reversing the operands, but would probably have had generated incorrect code in at least some cases. Beef up the xchg test. Reported-by: E. C. Masloch <pushbx@ulukai.org> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
152 lines
1.6 KiB
NASM
152 lines
1.6 KiB
NASM
;Testname=unoptimized; Arguments=-fbin -oxchg.bin -O0; Files=stdout stderr xchg.bin
|
|
;Testname=optimized; Arguments=-fbin -oxchg.bin -Ox; Files=stdout stderr xchg.bin
|
|
|
|
%macro x 2
|
|
xchg %1,%2
|
|
xchg %2,%1
|
|
xchg %2,%2
|
|
xchg %2,MEM
|
|
xchg MEM,%2
|
|
%endmacro
|
|
|
|
bits 16
|
|
%define MEM [bx]
|
|
x al,al
|
|
x al,cl
|
|
x al,dl
|
|
x al,bl
|
|
x al,ah
|
|
x al,ch
|
|
x al,dh
|
|
x al,bh
|
|
x ax,ax
|
|
x ax,cx
|
|
x ax,dx
|
|
x ax,bx
|
|
x ax,sp
|
|
x ax,bp
|
|
x ax,si
|
|
x ax,di
|
|
x bx,dx
|
|
x cx,dx
|
|
x eax,eax
|
|
x eax,ecx
|
|
x eax,edx
|
|
x eax,ebx
|
|
x eax,esp
|
|
x eax,ebp
|
|
x eax,esi
|
|
x eax,edi
|
|
x ebx,edx
|
|
x ecx,edx
|
|
|
|
bits 32
|
|
%define MEM [ebx]
|
|
align 64
|
|
x al,al
|
|
x al,cl
|
|
x al,dl
|
|
x al,bl
|
|
x al,ah
|
|
x al,ch
|
|
x al,dh
|
|
x al,bh
|
|
x ax,ax
|
|
x ax,cx
|
|
x ax,dx
|
|
x ax,bx
|
|
x ax,sp
|
|
x ax,bp
|
|
x ax,si
|
|
x ax,di
|
|
x bx,dx
|
|
x cx,dx
|
|
x eax,eax
|
|
x eax,ecx
|
|
x eax,edx
|
|
x eax,ebx
|
|
x eax,esp
|
|
x eax,ebp
|
|
x eax,esi
|
|
x eax,edi
|
|
x ebx,edx
|
|
x ecx,edx
|
|
|
|
bits 64
|
|
%define MEM [rbx]
|
|
align 64
|
|
x al,al
|
|
x al,cl
|
|
x al,dl
|
|
x al,bl
|
|
x al,ah
|
|
x al,ch
|
|
x al,dh
|
|
x al,bh
|
|
x al,spl
|
|
x al,bpl
|
|
x al,sil
|
|
x al,dil
|
|
x al,r8b
|
|
x al,r9b
|
|
x al,r10b
|
|
x al,r11b
|
|
x al,r12b
|
|
x al,r13b
|
|
x al,r14b
|
|
x al,r15b
|
|
x ax,ax
|
|
x ax,cx
|
|
x ax,dx
|
|
x ax,bx
|
|
x ax,sp
|
|
x ax,bp
|
|
x ax,si
|
|
x ax,di
|
|
x ax,r8w
|
|
x ax,r9w
|
|
x ax,r10w
|
|
x ax,r11w
|
|
x ax,r12w
|
|
x ax,r13w
|
|
x ax,r14w
|
|
x ax,r15w
|
|
x bx,dx
|
|
x cx,dx
|
|
x eax,eax
|
|
x eax,ecx
|
|
x eax,edx
|
|
x eax,ebx
|
|
x eax,esp
|
|
x eax,ebp
|
|
x eax,esi
|
|
x eax,edi
|
|
x eax,r8d
|
|
x eax,r9d
|
|
x eax,r10d
|
|
x eax,r11d
|
|
x eax,r12d
|
|
x eax,r13d
|
|
x eax,r14d
|
|
x eax,r15d
|
|
x ebx,edx
|
|
x ecx,edx
|
|
x rax,rax
|
|
x rax,rcx
|
|
x rax,rdx
|
|
x rax,rbx
|
|
x rax,rsp
|
|
x rax,rbp
|
|
x rax,rsi
|
|
x rax,rdi
|
|
x rax,r8
|
|
x rax,r9
|
|
x rax,r10
|
|
x rax,r11
|
|
x rax,r12
|
|
x rax,r13
|
|
x rax,r14
|
|
x rax,r15
|
|
x rbx,rdx
|
|
x rcx,rdx
|