diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-i386-intel.c | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-jump.d | 16 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-jump.s | 8 |
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+$ |