summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2012-02-25 12:05:53 -0800
committerH. Peter Anvin <hpa@zytor.com>2012-02-25 12:13:50 -0800
commitc3bfc7f6437843c041e085ba6238e6b125f16ca0 (patch)
treeefa5dd948e25b91e330b7e49a4d6261324c97d5e
parentb496c68f912fd25caadf39748a187c15654a27f3 (diff)
downloadnasm-c3bfc7f6437843c041e085ba6238e6b125f16ca0.tar.gz
Clean up JMP/CALL patterns, especially for 64 bits
Clean up JMP/CALL patterns so they don't disassemble quite so uglily. Fix a CALL pattern which would have incorrectly generated a (harmless) REX.W prefix. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--insns.dat19
-rw-r--r--test/jmp64.asm4
2 files changed, 15 insertions, 8 deletions
diff --git a/insns.dat b/insns.dat
index c988afd9..70c121c8 100644
--- a/insns.dat
+++ b/insns.dat
@@ -244,16 +244,17 @@ CALL mem|far [m: o64 ff /3] X64
CALL mem16|far [m: o16 ff /3] 8086
CALL mem32|far [m: o32 ff /3] 386
CALL mem64|far [m: o64 ff /3] X64
-CALL mem|near [m: odf ff /2] 8086
-CALL mem16|near [m: o16 ff /2] 8086
-CALL mem32|near [m: o32 ff /2] 386,NOLONG
-CALL mem64|near [m: o64 ff /2] X64
+CALL mem|near [m: odf ff /2] 8086,ND
+CALL mem16|near [m: o16 ff /2] 8086,ND
+CALL mem32|near [m: o32 ff /2] 386,NOLONG,ND
+CALL mem64|near [m: o64nw ff /2] X64,ND
CALL reg16 [m: o16 ff /2] 8086
CALL reg32 [m: o32 ff /2] 386,NOLONG
CALL reg64 [m: o64nw ff /2] X64
CALL mem [m: odf ff /2] 8086
CALL mem16 [m: o16 ff /2] 8086
CALL mem32 [m: o32 ff /2] 386,NOLONG
+CALL mem [m: o64nw ff /2] X64
CALL mem64 [m: o64nw ff /2] X64
CBW void [ o16 98] 8086
CDQ void [ o32 99] 386
@@ -672,16 +673,17 @@ JMP mem|far [m: o64 ff /5] X64
JMP mem16|far [m: o16 ff /5] 8086
JMP mem32|far [m: o32 ff /5] 386
JMP mem64|far [m: o64 ff /5] X64
-JMP mem|near [m: odf ff /4] 8086
-JMP mem16|near [m: o16 ff /4] 8086
-JMP mem32|near [m: o32 ff /4] 386,NOLONG
-JMP mem64|near [m: o64nw ff /4] X64
+JMP mem|near [m: odf ff /4] 8086,ND
+JMP mem16|near [m: o16 ff /4] 8086,ND
+JMP mem32|near [m: o32 ff /4] 386,NOLONG,ND
+JMP mem64|near [m: o64nw ff /4] X64,ND
JMP reg16 [m: o16 ff /4] 8086
JMP reg32 [m: o32 ff /4] 386,NOLONG
JMP reg64 [m: o64nw ff /4] X64
JMP mem [m: odf ff /4] 8086
JMP mem16 [m: o16 ff /4] 8086
JMP mem32 [m: o32 ff /4] 386,NOLONG
+JMP mem [m: o64nw ff /4] X64
JMP mem64 [m: o64nw ff /4] X64
JMPE imm [i: odf 0f b8 rel] IA64
JMPE imm16 [i: o16 0f b8 rel] IA64
@@ -3316,6 +3318,7 @@ VPGATHERDQ ymmreg,mem64,ymmreg [rmv: vm32x vex.dds.256.66.0f38.w1 90 /r] FUTURE
VPGATHERQQ ymmreg,mem64,ymmreg [rmv: vm64y vex.dds.256.66.0f38.w1 91 /r] FUTURE,AVX2
;# Transactional Synchronization Extensions (TSX)
+XABORT imm [i: c6 f8 ib] FUTURE,RTM
XABORT imm8 [i: c6 f8 ib] FUTURE,RTM
XBEGIN imm [i: odf c7 f8 rel] FUTURE,RTM
XBEGIN imm|near [i: odf c7 f8 rel] FUTURE,RTM
diff --git a/test/jmp64.asm b/test/jmp64.asm
index f007b9ed..616b0e6a 100644
--- a/test/jmp64.asm
+++ b/test/jmp64.asm
@@ -4,12 +4,16 @@
jmp rcx
jmp [rax]
jmp qword [rax]
+ jmp near [rax]
+ jmp near qword [rax]
jmp far [rax]
jmp far dword [rax]
jmp far qword [rax]
call rcx
call [rax]
call qword [rax]
+ call near [rax]
+ call near qword [rax]
call far [rax]
call far dword [rax]
call far qword [rax]