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]

Re: h8300-elf port: gas patches


> Thank you.  Can you resubmit the updated gas/testsuite changes?

Here they are:

gas toplevel:

Thu Aug 30 21:20:47 2001  J"orn Rennecke <amylaar@redhat.com>

	* tc-h8300.c (build_bytes): For OBJ_ELF, leave pcrel adjustment to
	MD_PCREL_FROM_SECTION; use BFD_RELOC_8 for memory-indirect
	addresses.
	Make prel relocation signed.
	(tc_crawl_symbol_chain): Don't define for BFD_ASSEMBLER.
	(tc_headers_hook, tc_reloc_mangle): Likewise.
	(md_convert_frag): First argument has type bfd* for OBJ_ELF.
	(md_section_align): For OBJ_ELF, use bfd_get_section_alignment.
	(md_apply_fix): Returns int, secod parameter is valueT * for
	BFD_ASSEMBLER.
	Don't clobber most significant byte for 24 bit relocations.
	(md_pcrel_from): If OBJ_ELF, handle one and two byte cases.
	(tc_gen_reloc): New function for BFD_ASSEMBLER.
	* tc-h8300.h (TC_CONS_RELOC): Provide alternate definition for OBJ_ELF.
	(TC_LINKRELAX_FIXUP): Define.
	(RELOC_32): Don't define if OBJ_ELF.

gas/testsuite:

	* gas/h8300/h8300.exp (do_h8300_cbranch): Remove invocation.
	(do_h8300_branch, do_h8300h_cbranch, do_h8300h_branch): Likewise.
	(do_h8300s_cbranch, do_h8300s_branch, ffxx1): Likwise.
	* gas/h8300/h8300-coff.exp, gas/h8300/h8300-elf.exp: New files.
	* gas/h8300/branch-elf.s, gas/h8300/branchh-elf.s: Likewise.
	* gas/h8300/branchs-elf.s, gas/h8300/ffxx1-elf.d: Likewise.
	* gas/h8300/ffxx1-elf.s: Likewise.
	* gas/h8300/branch.s, gas/h8300/branchh.s: Move to:
	* gas/h8300/branch-coff.s, gas/h8300/branchh-coff.s
	* gas/h8300/branchs.s, gas/h8300/ffxx1.d: Move to:
	* gas/h8300/branchs-coff.s, gas/h8300/ffxx1-coff.d .
	* gas/h8300/ffxx1.s: Move to:
	* gas/h8300/ffxx1-coff.s .
	* lib/gas-defs.exp: (regexp_diff) At verbosity 3, also show
	where mismatch occurs due to regexp mismatch.

[diffs for deleted files omitted]

Index: config/tc-h8300.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/config/tc-h8300.c,v
retrieving revision 1.76
diff -p -r1.76 tc-h8300.c
*** config/tc-h8300.c	2001/08/29 18:55:48	1.76
--- config/tc-h8300.c	2001/08/30 19:30:46
*************** build_bytes (this_try, operand)
*** 1110,1115 ****
--- 1110,1116 ----
  	  int where = size16 ? 2 : 1;
  	  int size = size16 ? 2 : 1;
  	  int type = size16 ? R_PCRWORD : R_PCRBYTE;
+ 	  fixS *fixP;
  
  	  check_operand (operand + i, size16 ? 0x7fff : 0x7f, "@");
  
*************** build_bytes (this_try, operand)
*** 1119,1144 ****
  		       (unsigned long) operand->exp.X_add_number);
  	    }
  
  	  operand[i].exp.X_add_number -= 1;
  	  operand[i].exp.X_add_number =
  	    ((operand[i].exp.X_add_number & 0xff) ^ 0x80) - 0x80;
  
! 	  fix_new_exp (frag_now,
! 		       output - frag_now->fr_literal + where,
! 		       size,
! 		       &operand[i].exp,
! 		       1,
! 		       type);
  	}
        else if (x & MEMIND)
  	{
  	  check_operand (operand + i, 0xff, "@@");
  	  fix_new_exp (frag_now,
  		       output - frag_now->fr_literal + 1,
  		       1,
  		       &operand[i].exp,
  		       0,
  		       R_MEM_INDIRECT);
  	}
        else if (x & ABSJMP)
  	{
--- 1120,1159 ----
  		       (unsigned long) operand->exp.X_add_number);
  	    }
  
+ #ifndef OBJ_ELF
  	  operand[i].exp.X_add_number -= 1;
+ #endif
  	  operand[i].exp.X_add_number =
  	    ((operand[i].exp.X_add_number & 0xff) ^ 0x80) - 0x80;
  
! 	  fixP = fix_new_exp (frag_now,
! 			      output - frag_now->fr_literal + where,
! 			      size,
! 			      &operand[i].exp,
! 			      1,
! 			      type);
! 	  fixP->fx_signed = 1;
  	}
        else if (x & MEMIND)
  	{
  	  check_operand (operand + i, 0xff, "@@");
+ #ifdef OBJ_ELF
+           /* The compiler should put the address in a special section.
+ 	     We expect to actually see the address of the address.  */
  	  fix_new_exp (frag_now,
  		       output - frag_now->fr_literal + 1,
  		       1,
  		       &operand[i].exp,
  		       0,
+ 		       BFD_RELOC_8);
+ #else
+ 	  fix_new_exp (frag_now,
+ 		       output - frag_now->fr_literal + 1,
+ 		       1,
+ 		       &operand[i].exp,
+ 		       0,
  		       R_MEM_INDIRECT);
+ #endif
  	}
        else if (x & ABSJMP)
  	{
*************** md_assemble (str)
*** 1329,1340 ****
--- 1344,1357 ----
    build_bytes (opcode, operand);
  }
  
+ #ifndef BFD_ASSEMBLER
  void
  tc_crawl_symbol_chain (headers)
       object_headers *headers ATTRIBUTE_UNUSED;
  {
    printf (_("call to tc_crawl_symbol_chain \n"));
  }
+ #endif
  
  symbolS *
  md_undefined_symbol (name)
*************** md_undefined_symbol (name)
*** 1343,1354 ****
--- 1360,1373 ----
    return 0;
  }
  
+ #ifndef BFD_ASSEMBLER
  void
  tc_headers_hook (headers)
       object_headers *headers ATTRIBUTE_UNUSED;
  {
    printf (_("call to tc_headers_hook \n"));
  }
+ #endif
  
  /* Various routines to kill one day */
  /* Equal to MAX_PRECISION in atof-ieee.c */
*************** tc_aout_fix_to_chars ()
*** 1444,1450 ****
--- 1463,1473 ----
  
  void
  md_convert_frag (headers, seg, fragP)
+ #ifdef OBJ_ELF
+      bfd *headers ATTRIBUTE_UNUSED;
+ #else
       object_headers *headers ATTRIBUTE_UNUSED;
+ #endif
       segT seg ATTRIBUTE_UNUSED;
       fragS *fragP ATTRIBUTE_UNUSED;
  {
*************** md_convert_frag (headers, seg, fragP)
*** 1452,1457 ****
--- 1475,1490 ----
    abort ();
  }
  
+ #ifdef BFD_ASSEMBLER
+ valueT
+ md_section_align (segment, size)
+      segT segment;
+      valueT size;
+ {
+   int align = bfd_get_section_alignment (stdoutput, segment);
+   return ((size + (1 << align) - 1) & (-1 << align));
+ }
+ #else
  valueT
  md_section_align (seg, size)
       segT seg;
*************** md_section_align (seg, size)
*** 1460,1472 ****
--- 1493,1516 ----
    return ((size + (1 << section_alignment[(int) seg]) - 1)
  	  & (-1 << section_alignment[(int) seg]));
  }
+ #endif
  
+ #ifdef BFD_ASSEMBLER
+ int
+ md_apply_fix (fixP, valp)
+      fixS *fixP;
+      valueT *valp;
+ #else
  void
  md_apply_fix (fixP, val)
       fixS *fixP;
       long val;
+ #endif
  {
    char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+ #ifdef BFD_ASSEMBLER
+   long val = *valp;
+ #endif
  
    switch (fixP->fx_size)
      {
*************** md_apply_fix (fixP, val)
*** 1478,1484 ****
        *buf++ = val;
        break;
      case 4:
!       *buf++ = (val >> 24);
        *buf++ = (val >> 16);
        *buf++ = (val >> 8);
        *buf++ = val;
--- 1522,1533 ----
        *buf++ = val;
        break;
      case 4:
! #ifdef OBJ_ELF
!       if (fixP->fx_r_type != BFD_RELOC_H8_DIR24R8
! 	  && fixP->fx_r_type != BFD_RELOC_H8_DIR24R8)
! #endif
! 	*buf = (val >> 24);
!       buf++;
        *buf++ = (val >> 16);
        *buf++ = (val >> 8);
        *buf++ = val;
*************** md_apply_fix (fixP, val)
*** 1486,1491 ****
--- 1535,1543 ----
      default:
        abort ();
      }
+ #ifdef BFD_ASSEMBLER
+   return 0;
+ #endif
  }
  
  int
*************** long
*** 1511,1519 ****
--- 1563,1578 ----
  md_pcrel_from (fixP)
       fixS *fixP ATTRIBUTE_UNUSED;
  {
+ #ifdef OBJ_ELF
+   if (fixP->fx_r_type == BFD_RELOC_8_PCREL)
+     return 1 + fixP->fx_where + fixP->fx_frag->fr_address;
+   if (fixP->fx_r_type == BFD_RELOC_16_PCREL)
+     return 2 + fixP->fx_where + fixP->fx_frag->fr_address;
+ #endif
    abort ();
  }
  
+ #ifndef BFD_ASSEMBLER
  void
  tc_reloc_mangle (fix_ptr, intr, base)
       fixS *fix_ptr;
*************** tc_reloc_mangle (fix_ptr, intr, base)
*** 1576,1578 ****
--- 1635,1671 ----
    else
      intr->r_symndx = -1;
  }
+ #else /* BFD_ASSEMBLER */
+ arelent *
+ tc_gen_reloc (section, fixp)
+      asection *section ATTRIBUTE_UNUSED;
+      fixS *fixp;
+ {
+   arelent *rel;
+   bfd_reloc_code_real_type r_type;
+ 
+   rel = (arelent *) xmalloc (sizeof (arelent));
+   rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+   *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+   rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
+   rel->addend = fixp->fx_offset;
+ 
+   r_type = fixp->fx_r_type;
+ 
+ #define DEBUG 0
+ #if DEBUG
+   fprintf (stderr, "%s\n", bfd_get_reloc_code_name (r_type));
+   fflush(stderr);
+ #endif
+   rel->howto = bfd_reloc_type_lookup (stdoutput, r_type);
+   if (rel->howto == NULL)
+     {
+       as_bad_where (fixp->fx_file, fixp->fx_line,
+ 		    _("Cannot represent relocation type %s"),
+ 		    bfd_get_reloc_code_name (r_type));
+       return NULL;
+     }
+ 
+   return rel;
+ }
+ #endif
Index: config/tc-h8300.h
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/config/tc-h8300.h,v
retrieving revision 1.32
diff -p -r1.32 tc-h8300.h
*** config/tc-h8300.h	2001/08/29 18:55:48	1.32
--- config/tc-h8300.h	2001/08/30 19:56:11
*************** struct internal_reloc;
*** 49,60 ****
--- 49,68 ----
  extern void tc_reloc_mangle
    PARAMS ((struct fix *, struct internal_reloc *, bfd_vma));
  
+ #ifdef OBJ_ELF
+ #define TC_CONS_RELOC          (Hmode ? BFD_RELOC_32 : BFD_RELOC_16)
+ #else
  #define TC_CONS_RELOC          (Hmode ? R_RELLONG: R_RELWORD)
+ #endif
  
+ #define TC_LINKRELAX_FIXUP(SEG) 0
+ 
  #define DO_NOT_STRIP 0
  #define LISTING_HEADER "Hitachi H8/300 GAS "
  #define NEED_FX_R_TYPE 1
+ #ifndef OBJ_ELF
  #define RELOC_32 1234
+ #endif
  
  extern int Hmode;
  extern int Smode;
Index: testsuite/gas/h8300/h8300.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/testsuite/gas/h8300/h8300.exp,v
retrieving revision 1.14
diff -p -r1.14 h8300.exp
*** testsuite/gas/h8300/h8300.exp	2000/06/29 23:44:24	1.14
--- testsuite/gas/h8300/h8300.exp	2001/08/28 21:11:07
*************** if [istarget h8300*-*-*] then {
*** 2111,2122 ****
      # Test the basic h8300 instruction parser
      do_h8300_add_sub
      do_h8300_logical
-     do_h8300_cbranch
      do_h8300_bitops1
      do_h8300_bitops2
      do_h8300_bitops3
      do_h8300_bitops4
-     do_h8300_branch
      do_h8300_compare
      do_h8300_decimal
      do_h8300_incdec
--- 2111,2120 ----
*************** if [istarget h8300*-*-*] then {
*** 2130,2141 ****
      # Now test the h8300h instruction parser
      do_h8300h_add_sub
      do_h8300h_logical
-     do_h8300h_cbranch
      do_h8300h_bitops1
      do_h8300h_bitops2
      do_h8300h_bitops3
      do_h8300h_bitops4
-     do_h8300h_branch
      do_h8300h_compare
      do_h8300h_decimal
      do_h8300h_incdec
--- 2128,2137 ----
*************** if [istarget h8300*-*-*] then {
*** 2151,2162 ****
      # Now test the h8300s instruction parser
      do_h8300s_add_sub
      do_h8300s_logical
-     do_h8300s_cbranch
      do_h8300s_bitops1
      do_h8300s_bitops2
      do_h8300s_bitops3
      do_h8300s_bitops4
-     do_h8300s_branch
      do_h8300s_compare
      do_h8300s_decimal
      do_h8300s_incdec
--- 2147,2156 ----
*************** if [istarget h8300*-*-*] then {
*** 2178,2183 ****
      set empic [expr [istarget *-*-ecoff*] || [istarget *-*-ultrix*] || [istarget *-*-irix\[1-4\]*] ]
      set aout [expr [istarget *-*-bsd*] || [istarget *-*-netbsd*]]
  
-     run_dump_test "ffxx1"
      gas_test "cmpsi2.s" "" "" "cmpsi2.s"
  }
--- 2172,2176 ----
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branch-elf.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,13 ----
+ 	.section zpage
+ vector:
+ 	.word h8300_branches
+ 	.text
+ h8300_branches:
+ 	bsr h8300_branches
+ 	jmp h8300_branches
+ 	jmp @r0
+ 	jmp @@vector:8
+ 	jsr h8300_branches
+ 	jsr @r0
+ 	jsr @@vector:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branchh-elf.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,12 ----
+ 	.h8300h
+ 	.text
+ h8300h_branches:
+ 	bsr h8300h_branches:8
+ 	bsr h8300h_branches:16
+ 	jmp h8300h_branches
+ 	jmp @er0
+ 	jmp @@16:8
+ 	jsr h8300h_branches
+ 	jsr @er0
+ 	jsr @@16:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branchs-elf.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,12 ----
+ 	.h8300s
+ 	.text
+ h8300s_branches:
+ 	bsr h8300s_branches:8
+ 	bsr h8300s_branches:16
+ 	jmp h8300s_branches
+ 	jmp @er0
+ 	jmp @@16:8
+ 	jsr h8300s_branches
+ 	jsr @er0
+ 	jsr @@16:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/ffxx1-elf.d	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,22 ----
+ #objdump: --prefix-addresses -dr
+ #name: FFxx1
+ 
+ # Test for FFxx:8 addressing.
+ 
+ .*:     file format .*h8300.*
+ 
+ Disassembly of section .text:
+ 0+0000 <reset> 04 00             orc	#0x0,ccr
+ 			0: R_H8_DIR16	.text[+]0x400
+ 	...
+ 0+0400 <main> f8 7f             mov.b	#0x7f,r0l
+ 0+0402 <main[+](0x|)2> 28 bb             mov.b	@0xbb:8,r0l
+ 0+0404 <main[+](0x|)4> 6a 88 ff b9       mov.b	r0l,@0xffb9:16
+ 0+0408 <main[+](0x|)8> f8 01             mov.b	#0x1,r0l
+ 0+040a <loop> 6a 88 ff bb       mov.b	r0l,@0xffbb:16
+ 0+040e <delay> 79 01 00 00       mov.w	#0x0,r1
+ 0+0412 <deloop> 0b 01             adds	#0x1,er1
+ 0+0414 <deloop[+](0x|)2> 46 fc             bne	.-4 \(412\)
+ 0+0416 <deloop[+](0x|)4> 12 88             rotl	r0l
+ 0+0418 <deloop[+](0x|)6> 40 f0             bra	.-16 \(40a\)
+ 	...
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/ffxx1-elf.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,20 ----
+ 	.equ    p6ddr,  0xffb9          ;0x7f for output 
+ 	.equ    p6dr,    0xffbb
+ 	.equ    seed,    0x01
+ 	.text
+ 	.org    0
+ reset:  .word   main            ;reset vector 
+ ;
+ 	.org    0x400
+ main:   mov.b   #0x7f,r0l       ;port 6 ddr = 7F 
+ 	mov.b   @0xffbb:8,r0l   ;***test***
+ 	mov.b   r0l,@p6ddr:16
+ ;
+ 	mov.b   #seed,r0l       ;start with 0000001
+ loop:   mov.b   r0l,@p6dr:16    ;output to port 6 
+ delay:  mov.w   #0x0000,r1
+ deloop: adds.w  #1,r1
+ 	bne     deloop:8        ;not = 0
+ 	rotl    r0l
+         bra     loop:8
+ 	.word	0
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/h8300-elf.exp	Wed Aug 29 19:48:46 2001
***************
*** 0 ****
--- 1,280 ----
+ #
+ # Some H8/300 elf tests
+ #
+ proc do_h8300_cbranch {} {
+     set testname "cbranch.s: h8300 conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranch.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 40FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 40FC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 41FA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 41F8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 42F6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 43F4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 44F2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 44F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 45EE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 45EC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 46EA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 47E8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 48E6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 49E4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4AE2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4BE0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4CDE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4DDC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4EDA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4FD8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 20] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_branch {} {
+     set testname "branch.s: h8300 branch tests"
+     set x 0
+ 
+     gas_start "branch-elf.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 55FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 5B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 5F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 7] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_cbranch {} {
+     set testname "cbranchh.s: h8300h conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranchh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 40FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 40FC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 41FA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 41F8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 42F6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 43F4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 44F2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 44F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 45EE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 45EC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 46EA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 47E8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 48E6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 49E4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4AE2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4BE0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4CDE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4DDC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4EDA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4FD8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 5800FFD4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 5800FFD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 5810FFCC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 5810FFC8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 5820FFC4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 5830FFC0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 5840FFBC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 5840FFB8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 5850FFB4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 5850FFB0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 5860FFAC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 5870FFA8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 5880FFA4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 5890FFA0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 58A0FF9C\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 58B0FF98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 58C0FF94\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006c 58D0FF90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 58E0FF8C\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 58F0FF88\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 40] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_branch {} {
+     set testname "branchh.s: h8300h branch tests"
+     set x 0
+ 
+     gas_start "branchh-elf.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 55FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5C00FFFA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5B10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 5F10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 8] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_cbranch {} {
+     set testname "cbranchs.s: h8300s conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranchs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 40FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 40FC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 41FA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 41F8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 42F6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 43F4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 44F2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 44F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 45EE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 45EC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 46EA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 47E8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 48E6\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 49E4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4AE2\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4BE0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4CDE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4DDC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4EDA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4FD8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 5800FFD4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 5800FFD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 5810FFCC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 5810FFC8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 5820FFC4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 5830FFC0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 5840FFBC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 5840FFB8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 5850FFB4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 5850FFB0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 5860FFAC\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 5870FFA8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 5880FFA4\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 5890FFA0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 58A0FF9C\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 58B0FF98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 58C0FF94\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006c 58D0FF90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 58E0FF8C\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 58F0FF88\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 40] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_branch {} {
+     set testname "branchs.s: h8300s branch tests"
+     set x 0
+ 
+     gas_start "branchs-elf.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 55FE\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5C00FFFA\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5B10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 5F10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 8] then { pass $testname } else { fail $testname }
+ }
+ 
+ if [istarget h8300*-*-elf] then {
+     # Test the basic h8300 instruction parser
+     do_h8300_cbranch
+     do_h8300_branch
+ 
+     # Now test the h8300h instruction parser
+     do_h8300h_cbranch
+     do_h8300h_branch
+ 
+     # Now test the h8300s instruction parser
+     do_h8300s_cbranch
+     do_h8300s_branch
+ 
+     # Now some random tests
+     run_dump_test "ffxx1-elf"
+ }
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branch-coff.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,10 ----
+ 	.text
+ h8300_branches:
+ 	bsr h8300_branches
+ 	jmp h8300_branches
+ 	jmp @r0
+ 	jmp @@16:8
+ 	jsr h8300_branches
+ 	jsr @r0
+ 	jsr @@16:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branchh-coff.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,12 ----
+ 	.h8300h
+ 	.text
+ h8300h_branches:
+ 	bsr h8300h_branches:8
+ 	bsr h8300h_branches:16
+ 	jmp h8300h_branches
+ 	jmp @er0
+ 	jmp @@16:8
+ 	jsr h8300h_branches
+ 	jsr @er0
+ 	jsr @@16:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/branchs-coff.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,12 ----
+ 	.h8300s
+ 	.text
+ h8300s_branches:
+ 	bsr h8300s_branches:8
+ 	bsr h8300s_branches:16
+ 	jmp h8300s_branches
+ 	jmp @er0
+ 	jmp @@16:8
+ 	jsr h8300s_branches
+ 	jsr @er0
+ 	jsr @@16:8
+ 
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/ffxx1-coff.d	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,23 ----
+ #objdump: --prefix-addresses -dr
+ #name: FFxx1
+ 
+ # Test for FFxx:8 addressing.
+ 
+ .*:     file format .*h8300.*
+ 
+ Disassembly of section .text:
+ 	...
+ 			0: 16	main
+ 0+0400 <main> f8 7f             mov.b	#0x7f,r0l
+ 0+0402 <main[+](0x|)2> 28 bb             mov.b	@0xbb:8,r0l
+ 0+0404 <main[+](0x|)4> 6a 88 ff b9       mov.b	r0l,@0xffb9:16
+ 0+0408 <main[+](0x|)8> f8 01             mov.b	#0x1,r0l
+ 0+040a <loop> 6a 88 ff bb       mov.b	r0l,@0xffbb:16
+ 0+040e <delay> 79 01 00 00       mov.w	#0x0,r1
+ 0+0412 <deloop> 0b 01             adds	#0x1,er1
+ 0+0414 <deloop[+](0x|)2> 46 00             bne	.0 \(416\)
+ 			415: DISP8	deloop[+]0xffffffff
+ 0+0416 <deloop[+](0x|)4> 12 88             rotl	r0l
+ 0+0418 <deloop[+](0x|)6> 40 00             bra	.0 \(41a\)
+ 			419: DISP8	loop[+]0xffffffff
+ 	...
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/ffxx1-coff.s	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,20 ----
+ 	.equ    p6ddr,  0xffb9          ;0x7f for output 
+ 	.equ    p6dr,    0xffbb
+ 	.equ    seed,    0x01
+ 	.text
+ 	.org    0
+ reset:  .word   main            ;reset vector 
+ ;
+ 	.org    0x400
+ main:   mov.b   #0x7f,r0l       ;port 6 ddr = 7F 
+ 	mov.b   @0xffbb:8,r0l   ;***test***
+ 	mov.b   r0l,@p6ddr:16
+ ;
+ 	mov.b   #seed,r0l       ;start with 0000001
+ loop:   mov.b   r0l,@p6dr:16    ;output to port 6 
+ delay:  mov.w   #0x0000,r1
+ deloop: adds.w  #1,r1
+ 	bne     deloop:8        ;not = 0
+ 	rotl    r0l
+         bra     loop:8
+ 	.word	0
*** /dev/null	Thu Aug 24 10:00:32 2000
--- testsuite/gas/h8300/h8300-coff.exp	Wed Aug 29 19:48:55 2001
***************
*** 0 ****
--- 1,280 ----
+ #
+ # Some H8/300 coff tests
+ #
+ proc do_h8300_cbranch {} {
+     set testname "cbranch.s: h8300 conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranch.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 4200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 4300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 4600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 4700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 4800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 4900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4A00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4C00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4E00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 20] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_branch {} {
+     set testname "branch.s: h8300 branch tests"
+     set x 0
+ 
+     gas_start "branch-coff.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 5B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 5F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 7] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_cbranch {} {
+     set testname "cbranchh.s: h8300h conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranchh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 4200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 4300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 4600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 4700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 4800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 4900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4A00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4C00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4E00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 58000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 58000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 58100000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 58100000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 58200000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 58300000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 58400000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 58400000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 58500000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 58500000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 58600000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 58700000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 58800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 58900000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 58A00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 58B00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 58C00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006c 58D00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 58E00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 58F00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 40] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_branch {} {
+     set testname "branchh.s: h8300h branch tests"
+     set x 0
+ 
+     gas_start "branchh-coff.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5C000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 5F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 8] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_cbranch {} {
+     set testname "cbranchs.s: h8300s conditional branch tests"
+     set x 0
+ 
+     gas_start "cbranchs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 4000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 4100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 4200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 4300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 4400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 4500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 4600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 4700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 4800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 4900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 4A00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 4B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 4C00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 4D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 4E00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 4F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 58000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 58000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 58100000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 58100000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 58200000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 58300000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 58400000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 58400000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 58500000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 58500000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 58600000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 58700000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 58800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 58900000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 58A00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 58B00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 58C00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006c 58D00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 58E00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 58F00000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 40] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_branch {} {
+     set testname "branchs.s: h8300s branch tests"
+     set x 0
+ 
+     gas_start "branchs-coff.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5C000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 5A000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5B00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5E000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 5D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 5F00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    timeout 				{ perror "timeout\n; break }
+ 	    eof					{ break }
+ 	}
+     }
+ 
+     # This was intended to do any cleanup necessary.  It kinda looks like it
+     # isn't needed, but just in case, please keep it in for now.
+     gas_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 8] then { pass $testname } else { fail $testname }
+ }
+ 
+ if [istarget h8300*-*-coff] then {
+     # Test the basic h8300 instruction parser
+     do_h8300_cbranch
+     do_h8300_branch
+ 
+     # Now test the h8300h instruction parser
+     do_h8300h_cbranch
+     do_h8300h_branch
+ 
+     # Now test the h8300s instruction parser
+     do_h8300s_cbranch
+     do_h8300s_branch
+ 
+     # Now some random tests
+     run_dump_test "ffxx1-coff"
+ }


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