summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-08-28 17:35:25 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-08-28 17:35:25 -0700
commit7b4dc622c695213fa0ee5f8d0b74502412478375 (patch)
tree355609000a44a217a421f6553d1f7ad6d5a19918
parent5eff8912bcaede2183c6cca08df9c8535b574ad0 (diff)
downloadnasm-7b4dc622c695213fa0ee5f8d0b74502412478375.tar.gz
BR 2039212: Handle indirect far jumps in 64-bit mode
Handle indirect far jumps in 64-bit mode. Default to 64 bit unless overridden, for consistency with other jumps.
-rw-r--r--insns.dat8
-rw-r--r--test/far64.asm10
2 files changed, 16 insertions, 2 deletions
diff --git a/insns.dat b/insns.dat
index b68bf0aa..ee7f255e 100644
--- a/insns.dat
+++ b/insns.dat
@@ -210,9 +210,11 @@ CALL imm16:imm \320\1\x9A\31\30 8086,NOLONG
CALL imm:imm16 \320\1\x9A\31\30 8086,NOLONG
CALL imm32:imm \321\1\x9A\41\30 386,NOLONG
CALL imm:imm32 \321\1\x9A\41\30 386,NOLONG
-CALL mem|far \322\1\xFF\203 8086
+CALL mem|far \322\1\xFF\203 8086,NOLONG
+CALL mem|far \324\1\xFF\203 X64
CALL mem16|far \320\1\xFF\203 8086
CALL mem32|far \321\1\xFF\203 386
+CALL mem64|far \324\1\xFF\203 X64
CALL mem|near \322\1\xFF\202 8086
CALL mem16|near \320\1\xFF\202 8086
CALL mem32|near \321\1\xFF\202 386,NOLONG
@@ -632,9 +634,11 @@ JMP imm16:imm \320\1\xEA\31\30 8086,NOLONG
JMP imm:imm16 \320\1\xEA\31\30 8086,NOLONG
JMP imm32:imm \321\1\xEA\41\30 386,NOLONG
JMP imm:imm32 \321\1\xEA\41\30 386,NOLONG
-JMP mem|far \322\1\xFF\205 8086
+JMP mem|far \322\1\xFF\205 8086,NOLONG
+JMP mem|far \324\1\xFF\205 X64
JMP mem16|far \320\1\xFF\205 8086
JMP mem32|far \321\1\xFF\205 386
+JMP mem64|far \324\1\xFF\205 X64
JMP mem|near \322\1\xFF\204 8086
JMP mem16|near \320\1\xFF\204 8086
JMP mem32|near \321\1\xFF\204 386,NOLONG
diff --git a/test/far64.asm b/test/far64.asm
new file mode 100644
index 00000000..b7a5108e
--- /dev/null
+++ b/test/far64.asm
@@ -0,0 +1,10 @@
+;Testname=test; Arguments=-fbin -ofar64.bin; Files=.stdout .stderr far64.bin
+; BR 2039212
+ bits 64
+
+ call qword far [rax]
+ jmp qword far [rax]
+ call dword far [rax]
+ jmp dword far [rax]
+ call far [rax]
+ jmp far [rax]