From 003519a7c29470959d24bbf5a212d29919c40dc7 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 7 May 2005 13:30:02 +0000 Subject: [PATCH] gas/testsuite/ 2005-05-07 H.J. Lu PR 843 * gas/i386/i386.exp: Add x86-64-branch. * gas/i386/x86-64-branch.d: New. * gas/i386/x86-64-branch.s: New. opcodes/ 2005-05-07 H.J. Lu PR 843 * i386-dis.c (branch_v_mode): New. (indirEv): Use branch_v_mode instead of v_mode. (OP_E): Handle branch_v_mode. --- gas/testsuite/ChangeLog | 8 ++++++++ gas/testsuite/gas/i386/i386.exp | 1 + gas/testsuite/gas/i386/x86-64-branch.d | 13 +++++++++++++ gas/testsuite/gas/i386/x86-64-branch.s | 5 +++++ opcodes/ChangeLog | 7 +++++++ opcodes/i386-dis.c | 16 +++++++++++++++- 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/i386/x86-64-branch.d create mode 100644 gas/testsuite/gas/i386/x86-64-branch.s diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 1f4b1c942d..bcd4da6771 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2005-05-07 H.J. Lu + + PR 843 + * gas/i386/i386.exp: Add x86-64-branch. + + * gas/i386/x86-64-branch.d: New. + * gas/i386/x86-64-branch.s: New. + 2005-05-06 Jan Beulich * gas/macros/badarg.s: Add check for bad qualifier specification. diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 0922e747ca..34862a50ef 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -127,6 +127,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t run_list_test "x86-64-inval" "-al" run_list_test "x86-64-segment" "-al" run_list_test "x86-64-inval-seg" "-al" + run_dump_test "x86-64-branch" # For ELF targets verify that @unwind works. if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"] diff --git a/gas/testsuite/gas/i386/x86-64-branch.d b/gas/testsuite/gas/i386/x86-64-branch.d new file mode 100644 index 0000000000..7ddd6fe177 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-branch.d @@ -0,0 +1,13 @@ +#as: -J +#objdump: -drw +#name: x86-64 indirect branch + +.*: +file format elf64-x86-64 + +Disassembly of section .text: + +0+000 <.text>: +[ ]*0:[ ]+ff d0[ ]+callq[ ]+\*%rax +[ ]*2:[ ]+ff d0[ ]+callq[ ]+\*%rax +[ ]*4:[ ]+ff e0[ ]+jmpq[ ]+\*%rax +[ ]*6:[ ]+ff e0[ ]+jmpq[ ]+\*%rax diff --git a/gas/testsuite/gas/i386/x86-64-branch.s b/gas/testsuite/gas/i386/x86-64-branch.s new file mode 100644 index 0000000000..865c475901 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-branch.s @@ -0,0 +1,5 @@ +.text + callq *%rax + call *%rax + jmpq *%rax + jmp *%rax diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 30956eb81e..b76172ee40 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2005-05-07 H.J. Lu + + PR 843 + * i386-dis.c (branch_v_mode): New. + (indirEv): Use branch_v_mode instead of v_mode. + (OP_E): Handle branch_v_mode. + 2005-05-07 H.J. Lu * d10v-dis.c (dis_2_short): Support 64bit host. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 0014a706ad..15f43c30b2 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -197,7 +197,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define Eq OP_E, q_mode #define Edq OP_E, dq_mode #define Edqw OP_E, dqw_mode -#define indirEv OP_indirE, v_mode +#define indirEv OP_indirE, branch_v_mode #define indirEp OP_indirE, f_mode #define Ew OP_E, w_mode #define Ma OP_E, v_mode @@ -323,6 +323,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define dqw_mode 12 /* registers like dq_mode, memory like w_mode. */ #define f_mode 13 /* 4- or 6-byte pointer operand */ #define const_1_mode 14 +#define branch_v_mode 15 /* v_mode for branch. */ #define es_reg 100 #define cs_reg 101 @@ -3155,6 +3156,18 @@ OP_E (int bytemode, int sizeflag) else oappend (names32[rm + add]); break; + case branch_v_mode: + if (mode_64bit) + oappend (names64[rm + add]); + else + { + if ((sizeflag & DFLAG) || bytemode != branch_v_mode) + oappend (names32[rm + add]); + else + oappend (names16[rm + add]); + used_prefixes |= (prefixes & PREFIX_DATA); + } + break; case v_mode: case dq_mode: case dqw_mode: @@ -3256,6 +3269,7 @@ OP_E (int bytemode, int sizeflag) case dqw_mode: oappend ("WORD PTR "); break; + case branch_v_mode: case v_mode: case dq_mode: USED_REX (REX_MODE64);