This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]