This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Tweak parsing of the h8sx rts/l insn
- From: Richard Sandiford <rsandifo at redhat dot com>
- To: binutils at sources dot redhat dot com
- Date: 09 Jun 2003 17:28:11 +0100
- Subject: Tweak parsing of the h8sx rts/l insn
This patch makes gas a bit less picky about rts/l syntax. Also, for
consistency with ldm and stm, it changes the disassembler so that it
doesn't print the register list in brackets.
Tested on h8300-elf. OK to install?
Richard
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.
Index: opcodes/h8300-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/h8300-dis.c,v
retrieving revision 1.13
diff -c -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.13 h8300-dis.c
*** opcodes/h8300-dis.c 3 Jun 2003 21:32:52 -0000 1.13
--- opcodes/h8300-dis.c 9 Jun 2003 16:25:47 -0000
*************** bfd_h8_disassemble (addr, info, mach)
*** 698,704 ****
outfn (stream, "er%d", regno[1]);
else
{
! outfn (stream, "(er%d-er%d)", regno[1] - regno[0],
regno[1]);
}
return qi->length;
--- 698,704 ----
outfn (stream, "er%d", regno[1]);
else
{
! outfn (stream, "er%d-er%d", regno[1] - regno[0],
regno[1]);
}
return qi->length;
Index: gas/config/tc-h8300.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-h8300.c,v
retrieving revision 1.30
diff -c -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.30 tc-h8300.c
*** gas/config/tc-h8300.c 5 Jun 2003 18:53:35 -0000 1.30
--- gas/config/tc-h8300.c 9 Jun 2003 16:25:47 -0000
*************** get_rtsl_operands (char *ptr, struct h8_
*** 1076,1104 ****
as_bad (_("expected register"));
return;
}
! if (type == 1)
{
! ptr += len;
! if (*ptr++ != '-')
! {
! as_bad (_("expected register list"));
! return;
! }
! 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)
{
as_bad (_("invalid register list"));
return;
--- 1076,1094 ----
as_bad (_("expected register"));
return;
}
! ptr += len;
! if (*ptr == '-')
{
! len = parse_reg (++ptr, &mode, &num2, SRC);
if (len == 0 || (mode & MODE) != REG)
{
as_bad (_("expected register"));
return;
}
ptr += len;
/* CONST_xxx are used as placeholders in the opcode table. */
num = num2 - num;
! if (num < 0 || num > 3)
{
as_bad (_("invalid register list"));
return;
*************** get_rtsl_operands (char *ptr, struct h8_
*** 1106,1111 ****
--- 1096,1106 ----
}
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;
Index: gas/testsuite/gas/h8300/h8300.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/h8300/h8300.exp,v
retrieving revision 1.3
diff -c -d -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 h8300.exp
*** gas/testsuite/gas/h8300/h8300.exp 30 Aug 2001 21:08:43 -0000 1.3
--- gas/testsuite/gas/h8300/h8300.exp 9 Jun 2003 16:25:48 -0000
*************** if [istarget h8300*-*-*] then {
*** 2167,2172 ****
--- 2167,2174 ----
do_h8300h_mov32bug
+ run_dump_test h8sx_rtsl
+
# Now some random tests
set svr4pic [expr [istarget *-*-elf*] || [istarget *-*-irix5*] ]
set empic [expr [istarget *-*-ecoff*] || [istarget *-*-ultrix*] || [istarget *-*-irix\[1-4\]*] ]
*** /dev/null Thu Apr 11 15:25:15 2002
--- gas/testsuite/gas/h8300/h8sx_rtsl.d Mon Jun 9 17:17:41 2003
***************
*** 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
*** /dev/null Thu Apr 11 15:25:15 2002
--- gas/testsuite/gas/h8300/h8sx_rtsl.s Mon Jun 9 17:13:40 2003
***************
*** 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)