aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-i386-intel.c5
-rw-r--r--gas/testsuite/gas/i386/x86-64-jump.d16
-rw-r--r--gas/testsuite/gas/i386/x86-64-jump.s8
4 files changed, 31 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index dba3faa..d309806 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,13 @@
2019-12-04 Jan Beulich <jbeulich@suse.com>
+ * config/tc-i386-intel.c (i386_intel_operand): Also handle DWORD
+ with 64-bit mode branches.
+ * testsuite/gas/i386/x86-64-jump.s: Extend Intel syntax branch
+ operand coverage.
+ * testsuite/gas/i386/x86-64-jump.d: Adjust expectations.
+
+2019-12-04 Jan Beulich <jbeulich@suse.com>
+
* config/tc-i386.c (output_insn): Don't consider Cpu* settings
when setting GNU_PROPERTY_X86_FEATURE_2_MMX.
diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c
index 49f558d..51fa38d 100644
--- a/gas/config/tc-i386-intel.c
+++ b/gas/config/tc-i386-intel.c
@@ -657,11 +657,12 @@ i386_intel_operand (char *operand_string, int got_a_float)
&& current_templates->start->name[3] == 0)
|| current_templates->start->base_opcode == 0x62 /* bound */)
suffix = WORD_MNEM_SUFFIX;
- else if (flag_code == CODE_16BIT
+ else if (flag_code != CODE_32BIT
&& (current_templates->start->opcode_modifier.jump == JUMP
|| current_templates->start->opcode_modifier.jump
== JUMP_DWORD))
- suffix = LONG_DOUBLE_MNEM_SUFFIX;
+ suffix = flag_code == CODE_16BIT ? LONG_DOUBLE_MNEM_SUFFIX
+ : WORD_MNEM_SUFFIX;
else if (got_a_float == 1) /* "f..." */
suffix = SHORT_MNEM_SUFFIX;
else
diff --git a/gas/testsuite/gas/i386/x86-64-jump.d b/gas/testsuite/gas/i386/x86-64-jump.d
index c771e5e..1a1521d 100644
--- a/gas/testsuite/gas/i386/x86-64-jump.d
+++ b/gas/testsuite/gas/i386/x86-64-jump.d
@@ -31,14 +31,22 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: e3 00 jrcxz 0x69 68: R_X86_64_PC8 \$\+0x1
[ ]*[a-f0-9]+: 90 nop
[ ]*[a-f0-9]+: 66 ff 13 callw \*\(%rbx\)
+[ ]*[a-f0-9]+: 66 ff 1b lcallw \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 1b lcall \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 13 callq \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 13 callq \*\(%rbx\)
[ ]*[a-f0-9]+: ff 1b lcall \*\(%rbx\)
[ ]*[a-f0-9]+: 66 ff 23 jmpw \*\(%rbx\)
+[ ]*[a-f0-9]+: 66 ff 2b ljmpw \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 2b ljmp \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 23 jmpq \*\(%rbx\)
+[ ]*[a-f0-9]+: ff 23 jmpq \*\(%rbx\)
[ ]*[a-f0-9]+: ff 2b ljmp \*\(%rbx\)
-[ ]*[a-f0-9]+: eb 00 jmp 0x76
+[ ]*[a-f0-9]+: eb 00 jmp 0x[0-9a-f]*
[ ]*[a-f0-9]+: 90 nop
-[ ]*[a-f0-9]+: 67 e3 00 jecxz 0x7a
+[ ]*[a-f0-9]+: 67 e3 00 jecxz 0x[0-9a-f]*
[ ]*[a-f0-9]+: 90 nop
-[ ]*[a-f0-9]+: e3 00 jrcxz 0x7d
+[ ]*[a-f0-9]+: e3 00 jrcxz 0x[0-9a-f]*
[ ]*[a-f0-9]+: 90 nop
-[ ]*[a-f0-9]+: eb 00 jmp 0x80
+[ ]*[a-f0-9]+: eb 00 jmp 0x[0-9a-f]*
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-jump.s b/gas/testsuite/gas/i386/x86-64-jump.s
index 96ae66e..104ed53 100644
--- a/gas/testsuite/gas/i386/x86-64-jump.s
+++ b/gas/testsuite/gas/i386/x86-64-jump.s
@@ -29,9 +29,17 @@
.intel_syntax noprefix
call word ptr [rbx]
+ call dword ptr [rbx]
call fword ptr [rbx]
+ call qword ptr [rbx]
+ call near ptr [rbx]
+ call far ptr [rbx]
jmp word ptr [rbx]
+ jmp dword ptr [rbx]
jmp fword ptr [rbx]
+ jmp qword ptr [rbx]
+ jmp near ptr [rbx]
+ jmp far ptr [rbx]
jmp $+2
nop
jecxz 3+$