0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-07-24 10:25:42 -04:00

insns.dat: add MOVSX -> CBW/CWDE/CDQE optimiztion; add MOVZX[D]

Add MOVSX[D] -> CBW/CWDE/CDQE optimization patterns when the suitable
form of the AX register are referenced.

Add MOVZX reg64,rm32 pattern which converts to a 32-bit MOV.

Add MOVZXD reg64,rm32 alias pattern for consistency.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
H. Peter Anvin 2024-08-04 16:21:52 -07:00
parent de84c3dcc0
commit 19a6fca486
2 changed files with 40 additions and 1 deletions

33
test/movszx.asm Normal file
View File

@ -0,0 +1,33 @@
bits 64
movsx ax,al
movsx eax,al
movsx eax,ax
movsx rax,al
movsx rax,ax
movsx rax,eax
movsxd rax,eax
movsx cx,cl
movsx ecx,cl
movsx ecx,cx
movsx rcx,cl
movsx rcx,cx
movsx rcx,ecx
movsxd rcx,ecx
movzx ax,al
movzx eax,al
movzx eax,ax
movzx rax,al
movzx rax,ax
movzx rax,eax
movzxd rax,eax
movzx cx,cl
movzx ecx,cl
movzx ecx,cx
movzx rcx,cl
movzx rcx,cx
movzx rcx,ecx
movzxd rcx,ecx

View File

@ -881,19 +881,25 @@ MOVSD void [ o32 a5] 386,NOAPX
MOVSQ void [ o64 a5] X86_64,LONG,NOAPX
MOVSW void [ o16 a5] 8086,NOAPX
MOVSX reg16,mem [rm: o16 0f be /r] 386,SB
MOVSX reg_ax,reg_al [--: o16 98] 8086,OPT,ND
MOVSX reg16,reg8 [rm: o16 0f be /r] 386
MOVSX reg32,rm8 [rm: o32 0f be /r] 386
MOVSX reg_eax,reg_ax [--: o32 98] 386,OPT,ND
MOVSX reg32,rm16 [rm: o32 0f bf /r] 386
MOVSX reg64,rm8 [rm: o64 0f be /r] X86_64,LONG
MOVSX reg64,rm16 [rm: o64 0f bf /r] X86_64,LONG
MOVSXD reg_rax,reg_eax [--: o64 98] X86_64,LONG,OPT,ND
MOVSXD reg64,rm32 [rm: o64 63 /r] X86_64,LONG
MOVSX reg64,rm32 [rm: o64 63 /r] X86_64,LONG,ND
MOVSX reg_rax,reg_eax [--: o64 98] X86_64,LONG,ND
MOVSX reg64,rm32 [rm: o64 63 /r] X86_64,LONG,OPT,ND
MOVZX reg16,mem [rm: o16 0f b6 /r] 386,SB
MOVZX reg16,reg8 [rm: o16 0f b6 /r] 386
MOVZX reg32,rm8 [rm: o32 0f b6 /r] 386
MOVZX reg32,rm16 [rm: o32 0f b7 /r] 386
MOVZX reg64,rm8 [rm: o64 0f b6 /r] X86_64,LONG
MOVZX reg64,rm16 [rm: o64 0f b7 /r] X86_64,LONG
MOVZXD reg64,rm32 [rm: o32 8b /r] X86_64,LONG,ND
MOVZX reg64,rm32 [rm: o32 8b /r] X86_64,LONG,ND
MUL rm8 [m: f6 /4] 8086
MUL rm16 [m: o16 f7 /4] 8086
MUL rm32 [m: o32 f7 /4] 386