From 0613284fd49388e6d5938e76e471362485c6c93e Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 10 Jun 2003 07:27:56 +0000 Subject: [PATCH] opcodes/ * h8300-dis.c (bfd_h8_disassemble): Don't print brackets round rts/l and rte/l register lists. gas/ * config/tc-h8300.c (get_rtsl_operands): Accept unbracketed register lists. Allow single-register ranges. testsuite/ * gas/h8300/h8sx_rtsl.[sd]: New test. * gas/h8300/h8300.exp: Run it. --- gas/ChangeLog | 5 +++++ gas/config/tc-h8300.c | 23 +++++++++-------------- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/h8300/h8300.exp | 1 + gas/testsuite/gas/h8300/h8sx_rtsl.d | 14 ++++++++++++++ gas/testsuite/gas/h8300/h8sx_rtsl.s | 8 ++++++++ opcodes/ChangeLog | 5 +++++ opcodes/h8300-dis.c | 2 +- 8 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 gas/testsuite/gas/h8300/h8sx_rtsl.d create mode 100644 gas/testsuite/gas/h8300/h8sx_rtsl.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 9a3888fed89..9a69d58d7d3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2003-06-10 Richard Sandiford + + * config/tc-h8300.c (get_rtsl_operands): Accept unbracketed register + lists. Allow single-register ranges. + 2003-06-10 Richard Sandiford * config/tc-h8300.c (h8300sxnmode): New. diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 6e6a170a387..6a6e3a87a61 100644 --- a/gas/config/tc-h8300.c +++ b/gas/config/tc-h8300.c @@ -1091,29 +1091,19 @@ get_rtsl_operands (char *ptr, struct h8_op *operand) as_bad (_("expected register")); return; } - if (type == 1) + ptr += len; + if (*ptr == '-') { - ptr += len; - if (*ptr++ != '-') - { - as_bad (_("expected register list")); - return; - } - len = parse_reg (ptr, &mode, &num2, SRC); + len = parse_reg (++ptr, &mode, &num2, SRC); if (len == 0 || (mode & MODE) != REG) { as_bad (_("expected register")); return; } ptr += len; - if (*ptr++ != ')') - { - as_bad (_("expected closing paren")); - return; - } /* CONST_xxx are used as placeholders in the opcode table. */ num = num2 - num; - if (num < 1 || num > 3) + if (num < 0 || num > 3) { as_bad (_("invalid register list")); return; @@ -1121,6 +1111,11 @@ get_rtsl_operands (char *ptr, struct h8_op *operand) } else num2 = num, num = 0; + if (type == 1 && *ptr++ != ')') + { + as_bad (_("expected closing paren")); + return; + } operand[0].mode = RS32; operand[1].mode = RD32; operand[0].reg = num; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index d72b21abe17..4ea3d4b3277 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-06-10 Richard Sandiford + + * gas/h8300/h8sx_rtsl.[sd]: New test. + * gas/h8300/h8300.exp: Run it. + 2003-06-10 Richard Sandiford * gas/h8300/h8sx_disp2.[sd]: New test. diff --git a/gas/testsuite/gas/h8300/h8300.exp b/gas/testsuite/gas/h8300/h8300.exp index 8162f4847b2..e167a3f2c9f 100644 --- a/gas/testsuite/gas/h8300/h8300.exp +++ b/gas/testsuite/gas/h8300/h8300.exp @@ -2168,6 +2168,7 @@ if [istarget h8300*-*-*] then { do_h8300h_mov32bug run_dump_test h8sx_disp2 + run_dump_test h8sx_rtsl # Now some random tests set svr4pic [expr [istarget *-*-elf*] || [istarget *-*-irix5*] ] diff --git a/gas/testsuite/gas/h8300/h8sx_rtsl.d b/gas/testsuite/gas/h8300/h8sx_rtsl.d new file mode 100644 index 00000000000..648faf93d5d --- /dev/null +++ b/gas/testsuite/gas/h8300/h8sx_rtsl.d @@ -0,0 +1,14 @@ +# objdump: -dr + +.*: *file format elf32-h8300 + +Disassembly of section \.text: + +0+00 <\.text>: + *0: 54 00 * 54 00 * rts/l er0 + *2: 54 01 * 54 01 * rts/l er1 + *4: 54 03 * 54 03 * rts/l er3 + *6: 54 05 * 54 05 * rts/l er5 + *8: 54 16 * 54 16 * rts/l er5-er6 + *a: 54 25 * 54 25 * rts/l er3-er5 + *c: 54 34 * 54 34 * rts/l er1-er4 diff --git a/gas/testsuite/gas/h8300/h8sx_rtsl.s b/gas/testsuite/gas/h8300/h8sx_rtsl.s new file mode 100644 index 00000000000..b5f4788127a --- /dev/null +++ b/gas/testsuite/gas/h8300/h8sx_rtsl.s @@ -0,0 +1,8 @@ + .h8300sx + rts/l er0 + rts/l er1-er1 + rts/l (er3) + rts/l (er5-er5) + rts/l er5-er6 + rts/l er3-er5 + rts/l (er1-er4) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 820027807a3..afe48fd1d5a 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2003-06-10 Richard Sandiford + + * h8300-dis.c (bfd_h8_disassemble): Don't print brackets round + rts/l and rte/l register lists. + 2003-06-03 Nick Clifton * frv-desc.c: Regenerate. diff --git a/opcodes/h8300-dis.c b/opcodes/h8300-dis.c index 299267f4605..ea8d30b457c 100644 --- a/opcodes/h8300-dis.c +++ b/opcodes/h8300-dis.c @@ -698,7 +698,7 @@ bfd_h8_disassemble (addr, info, mach) outfn (stream, "er%d", regno[1]); else { - outfn (stream, "(er%d-er%d)", regno[1] - regno[0], + outfn (stream, "er%d-er%d", regno[1] - regno[0], regno[1]); } return qi->length; -- 2.30.2