public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* h8300-elf port: gas patches
@ 2001-08-28 15:30 Joern Rennecke
  2001-08-28 16:38 ` law
  0 siblings, 1 reply; 10+ messages in thread
From: Joern Rennecke @ 2001-08-28 15:30 UTC (permalink / raw)
  To: binutils, law; +Cc: amylaar

gas toplevel:

Tue Aug 28 22:34:44 2001  J"orn Rennecke <amylaar@redhat.com>

	* configure.in: Add case for h8300-*-elf.
	* configure: Regenerate.
	* tc-h8300.c: If OBJ_ELF, include elf/h8.h, and define
	assorted coff relocations to the corresponding elf relocations.
	(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, tc_headers_hook): Don't define for OBJ_ELF.
	(tc_reloc_mangle): Likewise.
	(md_convert_frag): First argument has type bfd* for OBJ_ELF.
	(md_section_align): For OBJ_ELF, just return size.
	(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 OBJ_ELF.
	* tc-h8300.h (TARGET_ARCH, TC_LINKRELAX_FIXUP): Define.
	(TC_MD_PCREL_FROM_SECTION_FIXED): Likewise.
	(TARGET_FORMAT): DEfine if OBJ_ELF.
	(TC_CONS_RELOC): Provide alternate definition for OBJ_ELF.
	(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 configure and deleted files omitted]

Index: configure.in
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/configure.in,v
retrieving revision 1.410
diff -p -r1.410 configure.in
*** configure.in	2001/08/11 18:27:00	1.410
--- configure.in	2001/08/28 21:11:05
*************** changequote([,])dnl
*** 291,296 ****
--- 291,297 ----
  
        h8300-*-rtems*)       fmt=coff ;;
        h8300-*-coff)         fmt=coff ;;
+       h8300-*-elf)          fmt=elf ;;
        h8500-*-rtems*)       fmt=coff ;;
        h8500-*-coff)         fmt=coff ;;
  
Index: config/tc-h8300.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/config/tc-h8300.c,v
retrieving revision 1.74
diff -p -r1.74 tc-h8300.c
*** config/tc-h8300.c	2001/03/15 04:23:32	1.74
--- config/tc-h8300.c	2001/08/28 21:11:05
***************
*** 1,5 ****
  /* tc-h8300.c -- Assemble code for the Hitachi H8/300
!    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000
     Free Software Foundation, Inc.
  
     This file is part of GAS, the GNU Assembler.
--- 1,5 ----
  /* tc-h8300.c -- Assemble code for the Hitachi H8/300
!    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001
     Free Software Foundation, Inc.
  
     This file is part of GAS, the GNU Assembler.
***************
*** 30,35 ****
--- 30,51 ----
  #include "opcode/h8300.h"
  #include <ctype.h>
  
+ #ifdef OBJ_ELF
+ #include "elf/h8.h"
+ 
+ #define R_MOV24B1 BFD_RELOC_H8_DIR24A8
+ #define R_MOVL1 BFD_RELOC_H8_DIR32A16
+ #define R_MOV24B1 BFD_RELOC_H8_DIR24A8
+ #define R_MOVL1 BFD_RELOC_H8_DIR32A16
+ #define R_RELLONG BFD_RELOC_32
+ #define R_MOV16B1 BFD_RELOC_H8_DIR16A8
+ #define R_RELWORD BFD_RELOC_16
+ #define R_RELBYTE BFD_RELOC_8
+ #define R_PCRWORD BFD_RELOC_16_PCREL
+ #define R_PCRBYTE BFD_RELOC_8_PCREL
+ #define R_JMPL1 BFD_RELOC_H8_DIR24R8
+ #endif
+ 
  const char comment_chars[] = ";";
  const char line_comment_chars[] = "#";
  const char line_separator_chars[] = "";
*************** build_bytes (this_try, operand)
*** 1081,1086 ****
--- 1097,1103 ----
  	  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)
*** 1090,1115 ****
  		       (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)
  	{
--- 1107,1146 ----
  		       (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)
*** 1300,1311 ****
--- 1331,1344 ----
    build_bytes (opcode, operand);
  }
  
+ #ifndef OBJ_ELF
  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)
*** 1314,1325 ****
--- 1347,1360 ----
    return 0;
  }
  
+ #ifndef OBJ_ELF
  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 ()
*** 1415,1421 ****
--- 1450,1460 ----
  
  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_section_align (seg, size)
*** 1428,1443 ****
--- 1467,1496 ----
       segT seg;
       valueT size;
  {
+ #ifdef OBJ_ELF
+   return size;
+ #else
    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)
*** 1449,1455 ****
        *buf++ = val;
        break;
      case 4:
!       *buf++ = (val >> 24);
        *buf++ = (val >> 16);
        *buf++ = (val >> 8);
        *buf++ = val;
--- 1502,1513 ----
        *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)
*** 1457,1462 ****
--- 1515,1523 ----
      default:
        abort ();
      }
+ #ifdef BFD_ASSEMBLER
+   return 0;
+ #endif
  }
  
  int
*************** long
*** 1482,1490 ****
--- 1543,1558 ----
  md_pcrel_from (fixP)
       fixS *fixP ATTRIBUTE_UNUSED;
  {
+ #ifdef OBJ_ELF
+   if (fixP->fx_r_type == BFD_RELOC_8_PCREL)
+     return 1;
+   if (fixP->fx_r_type == BFD_RELOC_16_PCREL)
+     return 2;
+ #endif
    abort ();
  }
  
+ #ifndef OBJ_ELF
  void
  tc_reloc_mangle (fix_ptr, intr, base)
       fixS *fix_ptr;
*************** tc_reloc_mangle (fix_ptr, intr, base)
*** 1547,1549 ****
--- 1615,1651 ----
    else
      intr->r_symndx = -1;
  }
+ #else /* OBJ_ELF */
+ 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.31
diff -p -r1.31 tc-h8300.h
*** config/tc-h8300.h	2001/03/15 04:23:32	1.31
--- config/tc-h8300.h	2001/08/28 21:11:05
***************
*** 24,29 ****
--- 24,35 ----
  
  #define TARGET_BYTES_BIG_ENDIAN 1
  
+ #define TARGET_ARCH bfd_arch_h8300
+ 
+ #ifdef OBJ_ELF
+ #define TARGET_FORMAT "elf32-h8300"
+ #endif
+ 
  #if ANSI_PROTOTYPES
  struct internal_reloc;
  #endif
*************** struct internal_reloc;
*** 43,54 ****
--- 49,70 ----
  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
+ 
+ #define TC_MD_PCREL_FROM_SECTION_FIXED
  
  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 ----
Index: testsuite/lib/gas-defs.exp
===================================================================
RCS file: /cvs/cvsfiles/devo/gas/testsuite/lib/gas-defs.exp,v
retrieving revision 1.46
diff -p -r1.46 gas-defs.exp
*** testsuite/lib/gas-defs.exp	2001/04/19 12:45:32	1.46
--- testsuite/lib/gas-defs.exp	2001/08/28 21:11:07
*************** proc regexp_diff { file_1 file_2 } {
*** 539,544 ****
--- 539,545 ----
              if ![regexp "^$line_b$" "$line_a"] {
  		send_log "regexp_diff match failure\n"
  		send_log "regexp \"^$line_b$\"\nline   \"$line_a\"\n"
+ 		verbose "regexp_diff match failure\n" 3
  		set differences 1
              }
          }
*** /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	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,2125 ----
+ #
+ # Some H8/300 tests
+ #
+ proc do_h8300_add_sub {} {
+     set testname "addsub.s: h8300 add/sub tests"
+     set x 0
+ 
+     gas_start "addsub.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 B210\[^\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 == 13] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_logical {} {
+     set testname "logical.s: h8300 logical tests"
+     set x 0
+ 
+     gas_start "logical.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1708\[^\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 == 11] then { pass $testname } else { fail $testname }
+ }
+ 
+ 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_bitops1 {} {
+     set testname "bitops1.s: h8300 bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407780\[^\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 == 15] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops2 {} {
+     set testname "bitops2.s: h8300 bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407700\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops3 {} {
+     set testname "bitops3.s: h8300 bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7F406090\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops4 {} {
+     set testname "bitops4.s: h8300 bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407500\[^\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 == 15] 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_h8300_compare {} {
+     set testname "compare.s: h8300 compare tests"
+     set x 0
+ 
+     gas_start "compare.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1D01\[^\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 == 3] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_decimal {} {
+     set testname "decimal.s: h8300 decimal tests"
+     set x 0
+ 
+     gas_start "decimal.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_incdec {} {
+     set testname "incdec.s: h8300 incdec tests"
+     set x 0
+ 
+     gas_start "incdec.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_divmul {} {
+     set testname "divmul.s: h8300 divmul tests"
+     set x 0
+ 
+     gas_start "divmul.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_misc {} {
+     set testname "misc.s: h8300 misc tests"
+     set x 0
+ 
+     gas_start "misc.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300 movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300_movb {} {
+     set testname "movb.s: h8300 movb tests"
+     set x 0
+ 
+     gas_start "movb.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_movw {} {
+     set testname "movw.s: h8300 movw tests"
+     set x 0
+ 
+     gas_start "movw.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_pushpop {} {
+     set testname "pushpop.s: h8300 pushpop tests"
+     set x 0
+ 
+     gas_start "pushpop.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_rotate_shift {} {
+     set testname "rotsh.s: h8300 rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotsh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_h8300h_add_sub {} {
+     set testname "addsubh.s: h8300h add/sub tests"
+     set x 0
+ 
+     gas_start "addsubh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79110020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A110000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 0B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79310010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A310000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 B210\[^\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 == 21] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_logical {} {
+     set testname "logicalh.s: h8300h logical tests"
+     set x 0
+ 
+     gas_start "logicalh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79610020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A610000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01F06611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 79410020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7A410000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01F06411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 79510020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7A510000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01F06511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 1790\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 17B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 1708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 1710\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 1730\[^\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 == 27] 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_bitops1 {} {
+     set testname "bitops1h.s: h8300h bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407780\[^\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 == 15] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops2 {} {
+     set testname "bitops2h.s: h8300h bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407700\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops3 {} {
+     set testname "bitops3h.s: h8300h bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7F406090\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops4 {} {
+     set testname "bitops4h.s: h8300h bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407500\[^\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 == 15] 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_h8300h_compare {} {
+     set testname "compareh.s: h8300h compare tests"
+     set x 0
+ 
+     gas_start "compareh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79200020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A200000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1F81\[^\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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_decimal {} {
+     set testname "decimalh.s: h8300h decimal tests"
+     set x 0
+ 
+     gas_start "decimalh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_incdec {} {
+     set testname "incdech.s: h8300h incdec tests"
+     set x 0
+ 
+     gas_start "incdech.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_divmul {} {
+     set testname "divmulh.s: h8300h divmul tests"
+     set x 0
+ 
+     gas_start "divmulh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01D05181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01D05301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01C05081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01C05201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_h8300h_misc {} {
+     set testname "misch.s: h8300h misc tests"
+     set x 0
+ 
+     gas_start "misch.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 7BD4598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01406900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01406F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01407800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01406D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 01406B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01406B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01406980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 01406F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01407800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 01406D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 01406B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005a 01406BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 21] then { pass $testname } else { fail $testname }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300h movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300h_movb {} {
+     set testname "movbh.s: h8300h movb tests"
+     set x 0
+ 
+     gas_start "movbh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 78106A28\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6A280000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106AA8\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 6AA80000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 16] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_movw {} {
+     set testname "movwh.s: h8300h movw tests"
+     set x 0
+ 
+     gas_start "movwh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 78106B20\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B200000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106BA0\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6BA00000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_movl {} {
+     set testname "movlh.s: h8300h movl tests"
+     set x 0
+ 
+     gas_start "movlh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F81\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7A000000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01006F10\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01007810\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01006D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01006B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01006B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 01006990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 01006F90\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01007890\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01006D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01006B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01006BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_pushpop {} {
+     set testname "pushpoph.s: h8300h pushpop tests"
+     set x 0
+ 
+     gas_start "pushpoph.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 01006D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_rotate_shift {} {
+     set testname "rotshh.s: h8300h rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotshh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 12B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 13B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1230\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1310\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 1330\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 1090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 10B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 1190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 11B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 1010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 1030\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1110\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1130\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 24] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_extend {} {
+     set testname "extendh.s: h8300h extend tests"
+     set x 0
+ 
+     gas_start "extendh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 17D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 17F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1750\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1770\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_add_sub {} {
+     set testname "addsubs.s: h8300s add/sub tests"
+     set x 0
+ 
+     gas_start "addsubs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79110020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A110000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 0B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79310010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A310000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 B210\[^\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 == 21] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_logical {} {
+     set testname "logicals.s: h8300s logical tests"
+     set x 0
+ 
+     gas_start "logicals.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79610020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A610000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01F06611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01410610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79410020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A410000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01F06411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 01410410\[^\n\]*\n"   { set x [expr $x+1] }
+ 
+ 	    -re " +\[0-9\]+ 0034 D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 79510020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 6511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003e 7A510000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 01F06511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 01410510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 1790\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 17B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 1708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 1710\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 1730\[^\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 == 30] 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_bitops1 {} {
+     set testname "bitops1s.s: h8300s bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7600"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007600"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +7200"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00007200"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A180080\[^\n\]*\n +\[0-9\]+ +6290"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A380001\[^\n\]*\n +\[0-9\]+ +00006290"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +7680"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00007680"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 7E407780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 6A100080\[^\n\]*\n +\[0-9\]+ +7780"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 6A300001\[^\n\]*\n +\[0-9\]+ +00007780"   { 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 == 25] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_bitops2 {} {
+     set testname "bitops2s.s: h8300s bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7480"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007480"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6780"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006780"   { set x [expr $x+1] }
+ 
+ 	    -re " +\[0-9\]+ 0030 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A100080\[^\n\]*\n +\[0-9\]+ +7580"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A300001\[^\n\]*\n +\[0-9\]+ +00007580"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E407700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +7700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00007700"   { 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_h8300s_bitops3 {} {
+     set testname "bitops3s.s: h8300s bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A180080\[^\n\]*\n +\[0-9\]+ +7100"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A380001\[^\n\]*\n +\[0-9\]+ +00007100"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6190"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006190"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A180080\[^\n\]*\n +\[0-9\]+ +7000"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A380001\[^\n\]*\n +\[0-9\]+ +00007000"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7F406090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A180080\[^\n\]*\n +\[0-9\]+ +6090"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A380001\[^\n\]*\n +\[0-9\]+ +00006090"   { 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_h8300s_bitops4 {} {
+     set testname "bitops4s.s: h8300s bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7400"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007400"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A100080\[^\n\]*\n +\[0-9\]+ +7300"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A300001\[^\n\]*\n +\[0-9\]+ +00007300"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +6390"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00006390"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 7E407500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 6A100080\[^\n\]*\n +\[0-9\]+ +7500"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 6A300001\[^\n\]*\n +\[0-9\]+ +00007500"   { 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 == 25] 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 }
+ }
+ 
+ proc do_h8300s_compare {} {
+     set testname "compares.s: h8300s compare tests"
+     set x 0
+ 
+     gas_start "compares.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79200020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A200000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1F81\[^\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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_decimal {} {
+     set testname "decimals.s: h8300s decimal tests"
+     set x 0
+ 
+     gas_start "decimals.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_incdec {} {
+     set testname "incdecs.s: h8300s incdec tests"
+     set x 0
+ 
+     gas_start "incdecs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_divmul {} {
+     set testname "divmuls.s: h8300s divmul tests"
+     set x 0
+ 
+     gas_start "divmuls.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01D05181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01D05301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01C05081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01C05201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_misc {} {
+     set testname "miscs.s: h8300s misc tests"
+     set x 0
+ 
+     gas_start "miscs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 7BD4598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01410700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0318\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01406900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01406F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01407800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01406D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01406B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 01406B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01416900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01416F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01417800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01416D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 01416B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 01416B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005e 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 0218\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 01406980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006e 01406F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 01407800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 007e 01406D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0082 01406B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0088 01406BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0090 01416980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0094 01416F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 009a 01417800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00a4 01416D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00a8 01416B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00ae 01416BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 36] then { pass $testname } else { fail $testname }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300s movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300s_movb {} {
+     set testname "movbs.s: h8300s movb tests"
+     set x 0
+ 
+     gas_start "movbs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 78106A28\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6A280000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106AA8\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 6AA80000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 16] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_movw {} {
+     set testname "movws.s: h8300s movw tests"
+     set x 0
+ 
+     gas_start "movws.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 78106B20\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B200000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106BA0\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6BA00000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ 
+ proc do_h8300s_movl {} {
+     set testname "movls.s: h8300s movl tests"
+     set x 0
+ 
+     gas_start "movls.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F81\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7A000000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01006F10\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01007810\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01006D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01006B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01006B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 01006990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 01006F90\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01007890\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01006D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01006B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01006BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_pushpop {} {
+     set testname "pushpops.s: h8300s pushpop tests"
+     set x 0
+ 
+     gas_start "pushpops.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 01006D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_rotate_shift {} {
+     set testname "rotshs.s: h8300s rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotshs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 12C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 12D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 12B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 12F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 13C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 13D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 13B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 13F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 1248\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 1250\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 1230\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1270\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 1348\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 1310\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1350\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1330\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1370\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 10C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 1090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 10D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 10B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 10F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003e 11C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 1190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 11D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 11B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 11F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 1048\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 1010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 1050\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 1030\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 1070\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 1148\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 1110\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005a 1150\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 1130\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005e 1170\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 48] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_extend {} {
+     set testname "extends.s: h8300s extend tests"
+     set x 0
+ 
+     gas_start "extends.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 17D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 17F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1750\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1770\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_mac {} {
+     set testname "macs.s: h8300s mac tests"
+     set x 0
+ 
+     gas_start "macs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+  	    -re " +\[0-9\]+ 0000 01A0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0324\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0335\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 01606D45\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0224\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0235\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_multiple {} {
+     set testname "multiples.s: h8300s multiple tests"
+     set x 0
+ 
+     gas_start "multiples.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 01106D71\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01206D72\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01306D73\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01106DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01206DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01306DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_mov32bug {} {
+     set testname "mov32bug.s: h8300h mov32bug test"
+     set x 0
+ 
+     if [gas_test_old "mov32bug.s" "" "Proper relocation for mov.l (part 1)"] then {
+         objdump_start_no_subdir "a.out" "-r"
+ 
+ 	while 1 {
+ 	    expect {
+ 		-re "00000002\[^\n\]*32\[^\n\]*_a.0x0*88ca6c00\[^\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.
+     objdump_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 1] 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	Thu Aug 16 19:54:13 2001
***************
*** 0 ****
--- 1,2125 ----
+ #
+ # Some H8/300 tests
+ #
+ proc do_h8300_add_sub {} {
+     set testname "addsub.s: h8300 add/sub tests"
+     set x 0
+ 
+     gas_start "addsub.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 B210\[^\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 == 13] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_logical {} {
+     set testname "logical.s: h8300 logical tests"
+     set x 0
+ 
+     gas_start "logical.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1708\[^\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 == 11] then { pass $testname } else { fail $testname }
+ }
+ 
+ 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_bitops1 {} {
+     set testname "bitops1.s: h8300 bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407780\[^\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 == 15] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops2 {} {
+     set testname "bitops2.s: h8300 bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407700\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops3 {} {
+     set testname "bitops3.s: h8300 bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7F406090\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_bitops4 {} {
+     set testname "bitops4.s: h8300 bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407500\[^\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 == 15] 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_h8300_compare {} {
+     set testname "compare.s: h8300 compare tests"
+     set x 0
+ 
+     gas_start "compare.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1D01\[^\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 == 3] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_decimal {} {
+     set testname "decimal.s: h8300 decimal tests"
+     set x 0
+ 
+     gas_start "decimal.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_incdec {} {
+     set testname "incdec.s: h8300 incdec tests"
+     set x 0
+ 
+     gas_start "incdec.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_divmul {} {
+     set testname "divmul.s: h8300 divmul tests"
+     set x 0
+ 
+     gas_start "divmul.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_misc {} {
+     set testname "misc.s: h8300 misc tests"
+     set x 0
+ 
+     gas_start "misc.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300 movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300_movb {} {
+     set testname "movb.s: h8300 movb tests"
+     set x 0
+ 
+     gas_start "movb.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_movw {} {
+     set testname "movw.s: h8300 movw tests"
+     set x 0
+ 
+     gas_start "movw.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_pushpop {} {
+     set testname "pushpop.s: h8300 pushpop tests"
+     set x 0
+ 
+     gas_start "pushpop.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300_rotate_shift {} {
+     set testname "rotsh.s: h8300 rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotsh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_h8300h_add_sub {} {
+     set testname "addsubh.s: h8300h add/sub tests"
+     set x 0
+ 
+     gas_start "addsubh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79110020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A110000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 0B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79310010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A310000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 B210\[^\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 == 21] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_logical {} {
+     set testname "logicalh.s: h8300h logical tests"
+     set x 0
+ 
+     gas_start "logicalh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79610020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A610000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01F06611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 79410020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7A410000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01F06411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 79510020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7A510000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01F06511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 1790\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 17B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 1708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 1710\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 1730\[^\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 == 27] 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_bitops1 {} {
+     set testname "bitops1h.s: h8300h bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407780\[^\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 == 15] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops2 {} {
+     set testname "bitops2h.s: h8300h bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E407700\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops3 {} {
+     set testname "bitops3h.s: h8300h bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7F406090\[^\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 == 12] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_bitops4 {} {
+     set testname "bitops4h.s: h8300h bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4h.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 7E407500\[^\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 == 15] 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_h8300h_compare {} {
+     set testname "compareh.s: h8300h compare tests"
+     set x 0
+ 
+     gas_start "compareh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79200020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A200000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1F81\[^\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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_decimal {} {
+     set testname "decimalh.s: h8300h decimal tests"
+     set x 0
+ 
+     gas_start "decimalh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_incdec {} {
+     set testname "incdech.s: h8300h incdec tests"
+     set x 0
+ 
+     gas_start "incdech.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_divmul {} {
+     set testname "divmulh.s: h8300h divmul tests"
+     set x 0
+ 
+     gas_start "divmulh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01D05181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01D05301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01C05081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01C05201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_h8300h_misc {} {
+     set testname "misch.s: h8300h misc tests"
+     set x 0
+ 
+     gas_start "misch.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 7BD4598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01406900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01406F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01407800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01406D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 01406B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01406B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01406980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 01406F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01407800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 01406D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 01406B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005a 01406BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 21] then { pass $testname } else { fail $testname }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300h movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300h_movb {} {
+     set testname "movbh.s: h8300h movb tests"
+     set x 0
+ 
+     gas_start "movbh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 78106A28\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6A280000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106AA8\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 6AA80000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 16] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_movw {} {
+     set testname "movwh.s: h8300h movw tests"
+     set x 0
+ 
+     gas_start "movwh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 78106B20\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B200000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106BA0\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6BA00000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_movl {} {
+     set testname "movlh.s: h8300h movl tests"
+     set x 0
+ 
+     gas_start "movlh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F81\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7A000000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01006F10\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01007810\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01006D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01006B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01006B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 01006990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 01006F90\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01007890\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01006D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01006B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01006BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_pushpop {} {
+     set testname "pushpoph.s: h8300h pushpop tests"
+     set x 0
+ 
+     gas_start "pushpoph.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 01006D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_rotate_shift {} {
+     set testname "rotshh.s: h8300h rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotshh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 12B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 13B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 1210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1230\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 1310\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 1330\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 1090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 10B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 1190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 11B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 1010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 1030\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1110\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1130\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 24] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_extend {} {
+     set testname "extendh.s: h8300h extend tests"
+     set x 0
+ 
+     gas_start "extendh.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 17D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 17F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1750\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1770\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_add_sub {} {
+     set testname "addsubs.s: h8300s add/sub tests"
+     set x 0
+ 
+     gas_start "addsubs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 8910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0819\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79110020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0912\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A110000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 0B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 0E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 9210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1889\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79310010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1901\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A310000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1A92\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1B04\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1B85\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1B96\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 1E89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 B210\[^\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 == 21] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_logical {} {
+     set testname "logicals.s: h8300s logical tests"
+     set x 0
+ 
+     gas_start "logicals.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 E910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1691\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79610020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A610000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01F06611\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 0610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01410610\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a C810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1498\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 79410020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 7A410000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01F06411\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 0410\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 01410410\[^\n\]*\n"   { set x [expr $x+1] }
+ 
+ 	    -re " +\[0-9\]+ 0034 D810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 1589\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 79510020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 6511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003e 7A510000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 01F06511\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 0510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 01410510\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 1788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 1790\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 17B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 1708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 1710\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 1730\[^\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 == 30] 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_bitops1 {} {
+     set testname "bitops1s.s: h8300s bitops tests #1"
+     set x 0
+ 
+     gas_start "bitops1s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7608\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407600\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7600"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007600"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 7208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D007200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F407200\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +7200"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00007200"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6298\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7D006290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7F406290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A180080\[^\n\]*\n +\[0-9\]+ +6290"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A380001\[^\n\]*\n +\[0-9\]+ +00006290"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 7688\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C007680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E407680\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +7680"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00007680"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 7788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 7C007780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 7E407780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 6A100080\[^\n\]*\n +\[0-9\]+ +7780"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 6A300001\[^\n\]*\n +\[0-9\]+ +00007780"   { 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 == 25] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_bitops2 {} {
+     set testname "bitops2s.s: h8300s bitops tests #2"
+     set x 0
+ 
+     gas_start "bitops2s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7488\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407480\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7480"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007480"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6788\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406780\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6780"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006780"   { set x [expr $x+1] }
+ 
+ 	    -re " +\[0-9\]+ 0030 7588\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7C007580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7E407580\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A100080\[^\n\]*\n +\[0-9\]+ +7580"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A300001\[^\n\]*\n +\[0-9\]+ +00007580"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 7708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C007700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E407700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +7700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00007700"   { 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_h8300s_bitops3 {} {
+     set testname "bitops3s.s: h8300s bitops tests #3"
+     set x 0
+ 
+     gas_start "bitops3s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7D007100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7F407100\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A180080\[^\n\]*\n +\[0-9\]+ +7100"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A380001\[^\n\]*\n +\[0-9\]+ +00007100"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6198\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6190"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006190"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 7008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7D007000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7F407000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A180080\[^\n\]*\n +\[0-9\]+ +7000"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A380001\[^\n\]*\n +\[0-9\]+ +00007000"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 6098\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7D006090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7F406090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A180080\[^\n\]*\n +\[0-9\]+ +6090"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A380001\[^\n\]*\n +\[0-9\]+ +00006090"   { 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_h8300s_bitops4 {} {
+     set testname "bitops4s.s: h8300s bitops tests #4"
+     set x 0
+ 
+     gas_start "bitops4s.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7408\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7C007400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 7E407400\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 6A100080\[^\n\]*\n +\[0-9\]+ +7400"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 6A300001\[^\n\]*\n +\[0-9\]+ +00007400"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 6708\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 7D006700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 7F406700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6A180080\[^\n\]*\n +\[0-9\]+ +6700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 6A380001\[^\n\]*\n +\[0-9\]+ +00006700"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 7308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 7C007300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 7E407300\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 6A100080\[^\n\]*\n +\[0-9\]+ +7300"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 6A300001\[^\n\]*\n +\[0-9\]+ +00007300"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 6398\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 7C006390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 7E406390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 6A100080\[^\n\]*\n +\[0-9\]+ +6390"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 6A300001\[^\n\]*\n +\[0-9\]+ +00006390"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 7508\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 7C007500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 7E407500\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 6A100080\[^\n\]*\n +\[0-9\]+ +7500"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0070 6A300001\[^\n\]*\n +\[0-9\]+ +00007500"   { 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 == 25] 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 }
+ }
+ 
+ proc do_h8300s_compare {} {
+     set testname "compares.s: h8300s compare tests"
+     set x 0
+ 
+     gas_start "compares.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 A800\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1C08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 79200020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 7A200000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1F81\[^\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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_decimal {} {
+     set testname "decimals.s: h8300s decimal tests"
+     set x 0
+ 
+     gas_start "decimals.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1F08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 2] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_incdec {} {
+     set testname "incdecs.s: h8300s incdec tests"
+     set x 0
+ 
+     gas_start "incdecs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 1B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 1BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0A08\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0B50\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 0BD0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0B70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 0BF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 10] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_divmul {} {
+     set testname "divmuls.s: h8300s divmul tests"
+     set x 0
+ 
+     gas_start "divmuls.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 5181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 5301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01D05181\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01D05301\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 5081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 5201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01C05081\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01C05201\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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_misc {} {
+     set testname "miscs.s: h8300s misc tests"
+     set x 0
+ 
+     gas_start "miscs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 7B5C598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 7BD4598F\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 0700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01410700\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 0318\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01406900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 01406F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01407800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01406D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 01406B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 01406B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01416900\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 01416F00\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01417800\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01416D00\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 01416B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 01416B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005e 0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0060 5670\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0062 5470\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0064 0180\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0066 0208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0068 0218\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006a 01406980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 006e 01406F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0074 01407800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 007e 01406D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0082 01406B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0088 01406BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0090 01416980\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0094 01416F80\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 009a 01417800\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00a4 01416D80\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00a8 01416B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 00ae 01416BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 36] then { pass $testname } else { fail $testname }
+ 
+     setup_xfail "h8300*-*-*"
+     fail "h8300s movfpe/movtpe tests"
+ }
+ 
+ proc do_h8300s_movb {} {
+     set testname "movbs.s: h8300s movb tests"
+     set x 0
+ 
+     gas_start "movbs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0C89\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 F810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 6818\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6E180010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 78106A28\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 6C18\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 2810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6A080000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6A280000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6898\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6E980010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106AA8\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6C98\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 3810\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 6A880000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 6AA80000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 16] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_movw {} {
+     set testname "movws.s: h8300s movw tests"
+     set x 0
+ 
+     gas_start "movws.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0D01\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 79000010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 6F100010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 78106B20\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 6D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 6B000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 6B200000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 6990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 6F900010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 78106BA0\[^\n\]*\n +\[0-9\]+ +00000020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 6D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 6B800000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 6BA00000\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ 
+ proc do_h8300s_movl {} {
+     set testname "movls.s: h8300s movl tests"
+     set x 0
+ 
+     gas_start "movls.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 0F81\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 7A000000\[^\n\]*\n +\[0-9\]+ +0040\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006910\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01006F10\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 01007810\[^\n\]*\n +\[0-9\]+ +6B200000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 01006D10\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 01006B00\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 01006B20\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 01006990\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 01006F90\[^\n\]*\n +\[0-9\]+ +0010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 01007890\[^\n\]*\n +\[0-9\]+ +6BA00000\[^\n\]*\n +\[0-9\]+ +0020\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 01006D90\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 01006B80\[^\n\]*\n +\[0-9\]+ +0000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 01006BA0\[^\n\]*\n +\[0-9\]+ +00000000\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 14] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_pushpop {} {
+     set testname "pushpops.s: h8300s pushpop tests"
+     set x 0
+ 
+     gas_start "pushpops.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 6D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 01006D70\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 6DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01006DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_rotate_shift {} {
+     set testname "rotshs.s: h8300s rotate and shift tests"
+     set x 0
+ 
+     gas_start "rotshs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 1288\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 12C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1290\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 12D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 12B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 12F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 1388\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000e 13C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 1390\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0012 13D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 13B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0016 13F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0018 1208\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001a 1248\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001c 1210\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 001e 1250\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0020 1230\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0022 1270\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0024 1308\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0026 1348\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0028 1310\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002a 1350\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002c 1330\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 002e 1370\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0030 1088\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0032 10C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0034 1090\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0036 10D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0038 10B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003a 10F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003c 1188\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 003e 11C8\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0040 1190\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0042 11D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0044 11B0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0046 11F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0048 1008\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004a 1048\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004c 1010\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 004e 1050\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0050 1030\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0052 1070\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0054 1108\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0056 1148\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0058 1110\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005a 1150\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005c 1130\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 005e 1170\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 48] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_extend {} {
+     set testname "extends.s: h8300s extend tests"
+     set x 0
+ 
+     gas_start "extends.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 17D0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 17F0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 1750\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 1770\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 4] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_mac {} {
+     set testname "macs.s: h8300s mac tests"
+     set x 0
+ 
+     gas_start "macs.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+  	    -re " +\[0-9\]+ 0000 01A0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0002 0324\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 0335\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0006 01606D45\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000a 0224\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 0235\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300s_multiple {} {
+     set testname "multiples.s: h8300s multiple tests"
+     set x 0
+ 
+     gas_start "multiples.s" "-al"
+ 
+     # Check each instruction bit pattern to verify it got
+     # assembled correctly.
+     while 1 {
+ 	expect {
+ 	    -re " +\[0-9\]+ 0000 01106D71\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0004 01206D72\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0008 01306D73\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 000c 01106DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0010 01206DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    -re " +\[0-9\]+ 0014 01306DF0\[^\n\]*\n"   { set x [expr $x+1] }
+ 	    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 == 6] then { pass $testname } else { fail $testname }
+ }
+ 
+ proc do_h8300h_mov32bug {} {
+     set testname "mov32bug.s: h8300h mov32bug test"
+     set x 0
+ 
+     if [gas_test_old "mov32bug.s" "" "Proper relocation for mov.l (part 1)"] then {
+         objdump_start_no_subdir "a.out" "-r"
+ 
+ 	while 1 {
+ 	    expect {
+ 		-re "00000002\[^\n\]*32\[^\n\]*_a.0x0*88ca6c00\[^\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.
+     objdump_finish
+ 
+     # Did we find what we were looking for?  If not, flunk it.
+     if [expr $x == 1] 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"
+ }

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-28 15:30 h8300-elf port: gas patches Joern Rennecke
@ 2001-08-28 16:38 ` law
  2001-08-28 16:57   ` Ian Lance Taylor
  2001-08-28 17:30   ` Joern Rennecke
  0 siblings, 2 replies; 10+ messages in thread
From: law @ 2001-08-28 16:38 UTC (permalink / raw)
  To: Joern Rennecke; +Cc: binutils, amylaar

  In message < 200108282230.f7SMUYB04610@phal.cambridge.redhat.com >you write:
  > gas toplevel:
  > 
  > Tue Aug 28 22:34:44 2001  J"orn Rennecke <amylaar@redhat.com>
  > 
  > 	* configure.in: Add case for h8300-*-elf.
  > 	* configure: Regenerate.
OK.

  > 	* tc-h8300.c: If OBJ_ELF, include elf/h8.h, and define
  > 	assorted coff relocations to the corresponding elf relocations.
OK.

  > 	(build_bytes): For OBJ_ELF, leave pcrel adjustment to
  > 	MD_PCREL_FROM_SECTION; use BFD_RELOC_8 for memory-indirect
  > 	addresses.
What is the point behind these changes?   Why in the world would we do
anything different for handling of PC-relative addresses between COFF
and ELF?

Similarly, using BFD_RELOC_8 seems really really really wrong.  There's
no way that can be correct.

R_MEM_INDIRECT performs two distinct, but equally important actions.

  1. The address of the symbol referenced by R_MEM_INDIRECT is placed
  into the next entry within the function vector.

  2. The address of that entry within the function vector is placed
  into the location requested by the reloc.

I don't see how BFD_RELOC_8 has any chance of performing both actions.


Remember, unless you have a good reason, the code for the ELF and the
COFF port should be the same.  Thus any difference is going to be looked
at very very closely.



  > 	Make prel relocation signed.
What was the point behind this change?  It may be right, it may not.  Either
way I'd like some explanation.


  > 	(tc_crawl_symbol_chain, tc_headers_hook): Don't define for OBJ_ELF.
  > 	(tc_reloc_mangle): Likewise.
And why would we define these to do anything different for ELF?  These seem
like gratutious changes which serve no meaningful purpose.  Please explain.


  > 	(md_convert_frag): First argument has type bfd* for OBJ_ELF.
Seems reasonable.

  > 	(md_section_align): For OBJ_ELF, just return size.
Why do something different here?   Worse yet, why do something different
than the vast majority of ports here?  Seems like another gratutious change.




  > 	(md_apply_fix): Returns int, secod parameter is valueT * for
  > 	BFD_ASSEMBLER.
OK.

  > 	Don't clobber most significant byte for 24 bit relocations.
Seems to me that if we don't want to do this for ELF, then we don't
want to do it for COFF either.

  > 	(md_pcrel_from): If OBJ_ELF, handle one and two byte cases.
I believe this goes away if you remove some of the gratutious changes
to build_bytes.

  > 	(tc_gen_reloc): New function for OBJ_ELF.
Probably OK.  Though I would ask why it is only needed for COFF.

  > 	* tc-h8300.h (TARGET_ARCH, TC_LINKRELAX_FIXUP): Define.
The change for TC_LINKRELAX_FIXUP seems clearly wrong since we're going
to want the linker to relax things.

  > 	(TC_MD_PCREL_FROM_SECTION_FIXED): Likewise.
Not OK until you've explained the related changes to write.c btter.

  > 	(TARGET_FORMAT): DEfine if OBJ_ELF.
OK

  > 	(TC_CONS_RELOC): Provide alternate definition for OBJ_ELF.
OK.

  > 	(RELOC_32): Don't define if OBJ_ELF.
Why bother with this change?  Does having RELOC_32 defined cause problems
with OBJ_ELF?  It would seem to me it's not used at all and could just
be deleted regardless of what object file is in use.


  > 
  > 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.
OK.

  > 	* gas/h8300/h8300-coff.exp, gas/h8300/h8300-elf.exp: New files.
Seems like major overkill/duplication.  If the only tests that are
different are the branch tests, then break just those out into separate
.exp files and keep all the others common.  It just seems silly to me
to have so much code duplicated.

  > 	* lib/gas-defs.exp: (regexp_diff) At verbosity 3, also show
  > 	where mismatch occurs due to regexp mismatch.
OK.


jeff

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-28 16:38 ` law
@ 2001-08-28 16:57   ` Ian Lance Taylor
  2001-08-29  9:11     ` law
  2001-08-28 17:30   ` Joern Rennecke
  1 sibling, 1 reply; 10+ messages in thread
From: Ian Lance Taylor @ 2001-08-28 16:57 UTC (permalink / raw)
  To: law; +Cc: Joern Rennecke, binutils

law@redhat.com writes:

>   > 	(tc_crawl_symbol_chain, tc_headers_hook): Don't define for OBJ_ELF.
>   > 	(tc_reloc_mangle): Likewise.
> And why would we define these to do anything different for ELF?  These seem
> like gratutious changes which serve no meaningful purpose.  Please explain.

Those functions are not used with BFD_ASSEMBLER.  The h8/300 is an old
SAC port which did not use BFD_ASSEMBLER.  Using ELF requires using
BFD_ASSEMBLER.

A slightly cleaner way to make the above change would be to not define
them for BFD_ASSEMBLER.  An even better way would be to first rewrite
the COFF port to use BFD_ASSEMBLER, and then write the ELF port.

Ian

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-28 16:38 ` law
  2001-08-28 16:57   ` Ian Lance Taylor
@ 2001-08-28 17:30   ` Joern Rennecke
  2001-08-29  9:09     ` law
  1 sibling, 1 reply; 10+ messages in thread
From: Joern Rennecke @ 2001-08-28 17:30 UTC (permalink / raw)
  To: law; +Cc: Joern Rennecke, binutils, amylaar

[tc-h8300.c]
>   > 	(build_bytes): For OBJ_ELF, leave pcrel adjustment to
>   > 	MD_PCREL_FROM_SECTION; use BFD_RELOC_8 for memory-indirect
>   > 	addresses.
> What is the point behind these changes?   Why in the world would we do
> anything different for handling of PC-relative addresses between COFF
> and ELF?

AFAICS MD_PCREL_FROM_SECTION is made to account for differences between the
relocation's address and the actual base address used by pc-relative addresses.
The h8-coff code has some FIXME comments that suggest that it doesn't
use the bfd infrastructure properly.  As h8-elf is a new port, I'm trying
to do this right now.

> Similarly, using BFD_RELOC_8 seems really really really wrong.  There's
> no way that can be correct.

The idea here is that the compiler makes the memory indirect addressing
explicit, i.e. it says that the address of the function is to be placed
into the zero page, and there is a symbol in front of the zero page location
where the address is placed, and the value of that symbol is used then
for memory-indirect addressing.
I've looked into the h8300h programming manual, and AFAICT this is actually
the semantics they meant @@ to have.

> R_MEM_INDIRECT performs two distinct, but equally important actions.
> 
>   1. The address of the symbol referenced by R_MEM_INDIRECT is placed
>   into the next entry within the function vector.
> 
>   2. The address of that entry within the function vector is placed
>   into the location requested by the reloc.

Yes, I understand that.  I think of it as a kludge that was necessary
beause coff doesn't allow you to use arbitrary sections to place data
in.
Elf doesn't have that limitation; and in the interest of interoperability
of tools, we should try to limit the number of special-case relocations
we use.

> I don't see how BFD_RELOC_8 has any chance of performing both actions.

1. Is mostly done by the compiler, with a little help from the linker to
concatenate all the section contents that go into the zero page.

>   > 	Make prel relocation signed.
> What was the point behind this change?  It may be right, it may not.  Either
> way I'd like some explanation.

The overflow check complains if it sees a negative offset for an unsigned
field.  AFAICR that check was missing for h8300-coff.  Or at least it
couldn't use the generic overflow check code.

>   > 	(tc_crawl_symbol_chain, tc_headers_hook): Don't define for OBJ_ELF.
>   > 	(tc_reloc_mangle): Likewise.
> And why would we define these to do anything different for ELF?  These seem
> like gratutious changes which serve no meaningful purpose.  Please explain.

The type object_headers is not available in th elf version.

>   > 	(md_section_align): For OBJ_ELF, just return size.
> Why do something different here?   Worse yet, why do something different
> than the vast majority of ports here?  Seems like another gratutious change.

I couldn't use the coff version because the symbols were not defined.
I am open to suggestions what should go there.

>   > 	Don't clobber most significant byte for 24 bit relocations.
> Seems to me that if we don't want to do this for ELF, then we don't
> want to do it for COFF either.

Well, AFAICT there were no 24 bit relocations that would be resolved at
assembly time; the coff port just defers most relocations, no matter if
you request relaxation or not.
The code as it is wouldn't complile for h8300-coff.

>   > 	(md_pcrel_from): If OBJ_ELF, handle one and two byte cases.
> I believe this goes away if you remove some of the gratutious changes
> to build_bytes.

No, this abort-ing implementation for h8300-coff only 'works' because no
pc-relative relocations are resolved at assembly time for h8300-coff.
> 
>   > 	(tc_gen_reloc): New function for OBJ_ELF.
> Probably OK.  Though I would ask why it is only needed for COFF.
For elf.  This is because the elf gas is a BFD_ASSEMBLER one, while the
coff gas isn't.

>   > 	* tc-h8300.h (TARGET_ARCH, TC_LINKRELAX_FIXUP): Define.
> The change for TC_LINKRELAX_FIXUP seems clearly wrong since we're going
> to want the linker to relax things.

The plan was to start out with never-relaxing, and get that to work;
then progress to relaxing if that was requested.  I'm not quite done with
debugging yet.

>   > 	(RELOC_32): Don't define if OBJ_ELF.
> Why bother with this change?  Does having RELOC_32 defined cause problems
> with OBJ_ELF?  It would seem to me it's not used at all and could just
> be deleted regardless of what object file is in use.

obj-elf.c includes aout64.h, where RELOC_32 is an enumeration value.
The definition in tc-h8300.h is numeric, and hence not suitable as
an enumberation tag.

>   > 	* gas/h8300/h8300-coff.exp, gas/h8300/h8300-elf.exp: New files.
> Seems like major overkill/duplication.  If the only tests that are
> different are the branch tests, then break just those out into separate
> .exp files and keep all the others common.  It just seems silly to me
> to have so much code duplicated.

But that's what I did.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-28 17:30   ` Joern Rennecke
@ 2001-08-29  9:09     ` law
  2001-08-29 11:50       ` Joern Rennecke
  0 siblings, 1 reply; 10+ messages in thread
From: law @ 2001-08-29  9:09 UTC (permalink / raw)
  To: Joern Rennecke; +Cc: binutils, amylaar

  In message < 200108290030.f7T0UZb05356@phal.cambridge.redhat.com >you write:
  > [tc-h8300.c]
  > >   > 	(build_bytes): For OBJ_ELF, leave pcrel adjustment to
  > >   > 	MD_PCREL_FROM_SECTION; use BFD_RELOC_8 for memory-indirect
  > >   > 	addresses.
  > > What is the point behind these changes?   Why in the world would we do
  > > anything different for handling of PC-relative addresses between COFF
  > > and ELF?
  > 
  > AFAICS MD_PCREL_FROM_SECTION is made to account for differences between the
  > relocation's address and the actual base address used by pc-relative addres
  > ses.
  > The h8-coff code has some FIXME comments that suggest that it doesn't
  > use the bfd infrastructure properly.  As h8-elf is a new port, I'm trying
  > to do this right now.
OK.  I understand your motivation now.  However, if I was going to try and
clean up the H8 port, I would clean up both the coff and elf ports together.

Regardless, I believe this issue has been addressed by fixing the documentation
for MD_PCREL_FROM_SECTION to match reality, so this specific issue has been
addressed.


  > > Similarly, using BFD_RELOC_8 seems really really really wrong.  There's
  > > no way that can be correct.
  > 
  > The idea here is that the compiler makes the memory indirect addressing
  > explicit, i.e. it says that the address of the function is to be placed
  > into the zero page, and there is a symbol in front of the zero page
  > location where the address is placed, and the value of that symbol is
  > used then for memory-indirect addressing.
  > I've looked into the h8300h programming manual, and AFAICT this is actually
  > the semantics they meant @@ to have.
That's not the semantics as I have always understood them.  Plus if you go
this direction, then you have to add more code to the compiler, assembler,
etc which is specific to the ELF port.  I think that's a bad idea.
 
  > > R_MEM_INDIRECT performs two distinct, but equally important actions.
  > > 
  > >   1. The address of the symbol referenced by R_MEM_INDIRECT is placed
  > >   into the next entry within the function vector.
  > > 
  > >   2. The address of that entry within the function vector is placed
  > >   into the location requested by the reloc.
  > 
  > Yes, I understand that.  I think of it as a kludge that was necessary
  > beause coff doesn't allow you to use arbitrary sections to place data
  > in.
Actually, it does.  It just has limitations on the total number of
sections you can use.

  > Elf doesn't have that limitation; and in the interest of interoperability
  > of tools, we should try to limit the number of special-case relocations
  > we use.
I don't think this is necessary or even wise.  R_MEM_INDIRECT is basically
the same as most PIC related relocations -- are you arguing that all the
GOT/PLT relocs that most ports use should be special cased in the compiler?
I didn't think so.

And again, I don't see how making the ELF and COFF ports handle this stuff
in a different way buys us anything in terms of long term maintenance.

  > >   > 	Make prel relocation signed.
  > > What was the point behind this change?  It may be right, it may not.  Eit
  > her
  > > way I'd like some explanation.
  > 
  > The overflow check complains if it sees a negative offset for an unsigned
  > field.  AFAICR that check was missing for h8300-coff.  Or at least it
  > couldn't use the generic overflow check code.
OK.  Consider this change approved.

  > 
  > >   > 	(tc_crawl_symbol_chain, tc_headers_hook): Don't define for OBJ_
  > ELF.
  > >   > 	(tc_reloc_mangle): Likewise.
  > > And why would we define these to do anything different for ELF?  These se
  > em
  > > like gratutious changes which serve no meaningful purpose.  Please explai
  > n.
  > 
  > The type object_headers is not available in th elf version.
OK.  So is object_headers a property of ELF/COFF or a property of 
BFD_ASSEMBLER or !BFD_ASSEMBLER?

  > 
  > >   > 	(md_section_align): For OBJ_ELF, just return size.
  > > Why do something different here?   Worse yet, why do something different
  > > than the vast majority of ports here?  Seems like another gratutious chan
  > ge.
  > 
  > I couldn't use the coff version because the symbols were not defined.
  > I am open to suggestions what should go there.
OK.  I see the problem here.

What I think would be better:

#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
alueT
md_section_align (seg, size)
     segT seg;
     valueT size;
{
  return ((size + (1 << section_alignment[(int) seg]) - 1)
          & (-1 << section_alignment[(int) seg]));
}
#endif



  > >   > 	Don't clobber most significant byte for 24 bit relocations.
  > > Seems to me that if we don't want to do this for ELF, then we don't
  > > want to do it for COFF either.
  > 
  > Well, AFAICT there were no 24 bit relocations that would be resolved at
  > assembly time; the coff port just defers most relocations, no matter if
  > you request relaxation or not.
  > The code as it is wouldn't complile for h8300-coff.
And the ELF port is going to defer most relocations just like the COFF
port.  Anything else is silly.

So if there aren't ever any 24bit relocs, then have both ports abort
or something like that if presented with a 24bit reloc that the 
assembler is expected to resolve.

  > >   > 	(md_pcrel_from): If OBJ_ELF, handle one and two byte cases.
  > > I believe this goes away if you remove some of the gratutious changes
  > > to build_bytes.
  > 
  > No, this abort-ing implementation for h8300-coff only 'works' because no
  > pc-relative relocations are resolved at assembly time for h8300-coff.
OK.  So treat this just like COFF.  THe set of relocs resolved by both
ports at assembly time should be the same.  Thus, if the abort is safe for
the h8300-coff, then it should be safe for h8300-elf.

  > >   > 	(tc_gen_reloc): New function for OBJ_ELF.
  > > Probably OK.  Though I would ask why it is only needed for COFF.
  > For elf.  This is because the elf gas is a BFD_ASSEMBLER one, while the
  > coff gas isn't.
OK.


  > >   > 	* tc-h8300.h (TARGET_ARCH, TC_LINKRELAX_FIXUP): Define.
  > > The change for TC_LINKRELAX_FIXUP seems clearly wrong since we're going
  > > to want the linker to relax things.
  > 
  > The plan was to start out with never-relaxing, and get that to work;
  > then progress to relaxing if that was requested.  I'm not quite done with
  > debugging yet.
It seems to me like doing things this way just made more work for yourself.
Please make the coff and elf ports work in the same manner.


  > 
  > >   > 	(RELOC_32): Don't define if OBJ_ELF.
  > > Why bother with this change?  Does having RELOC_32 defined cause problems
  > > with OBJ_ELF?  It would seem to me it's not used at all and could just
  > > be deleted regardless of what object file is in use.
  > 
  > obj-elf.c includes aout64.h, where RELOC_32 is an enumeration value.
  > The definition in tc-h8300.h is numeric, and hence not suitable as
  > an enumberation tag.
Ugh.  OK.


  > >   > 	* gas/h8300/h8300-coff.exp, gas/h8300/h8300-elf.exp: New files.
  > > Seems like major overkill/duplication.  If the only tests that are
  > > different are the branch tests, then break just those out into separate
  > > .exp files and keep all the others common.  It just seems silly to me
  > > to have so much code duplicated.
  > 
  > But that's what I did.
Err, no.  Keep all the existing tests which can be shared in h8300.exp.  Then
create h8300-coff.exp and h8300-elf.exp for those which can not be shared.
If you look at h8300-coff.exp you clearly didn't do that.  You'll find stuff
like arithmetic, logical, bit, etc tests instead of just the branching
tests.

jeff



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-28 16:57   ` Ian Lance Taylor
@ 2001-08-29  9:11     ` law
  0 siblings, 0 replies; 10+ messages in thread
From: law @ 2001-08-29  9:11 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: Joern Rennecke, binutils

  In message < si3d6bagb4.fsf@daffy.airs.com >you write:
  > Those functions are not used with BFD_ASSEMBLER.  The h8/300 is an old
  > SAC port which did not use BFD_ASSEMBLER.  Using ELF requires using
  > BFD_ASSEMBLER.
Understood.  Somehow in my mind I thought the old H8 assembler was still
a BFD assembler.  Ugh.  What a pain.


  > A slightly cleaner way to make the above change would be to not define
  > them for BFD_ASSEMBLER.
Right.

  > An even better way would be to first rewrite
  > the COFF port to use BFD_ASSEMBLER, and then write the ELF port.
Agreed.  More likely the COFF specific bits will bitrot over time as folks
switch to the ELF tools.  I don't expect to see much effort expended
bringing the H8 COFF port up to modern standards.

jeff


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-29  9:09     ` law
@ 2001-08-29 11:50       ` Joern Rennecke
  2001-08-30 10:24         ` law
  0 siblings, 1 reply; 10+ messages in thread
From: Joern Rennecke @ 2001-08-29 11:50 UTC (permalink / raw)
  To: law; +Cc: Joern Rennecke, binutils, amylaar

> Err, no.  Keep all the existing tests which can be shared in h8300.exp.  Then

I did.

> create h8300-coff.exp and h8300-elf.exp for those which can not be shared.
> If you look at h8300-coff.exp you clearly didn't do that.  You'll find stuff
> like arithmetic, logical, bit, etc tests instead of just the branching
> tests.

I only ran the specific tests, but you are right in that I've left a lot
of support procedures that are not needed.  I've fixed this now.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-29 11:50       ` Joern Rennecke
@ 2001-08-30 10:24         ` law
  2001-08-30 13:31           ` Joern Rennecke
  0 siblings, 1 reply; 10+ messages in thread
From: law @ 2001-08-30 10:24 UTC (permalink / raw)
  To: Joern Rennecke; +Cc: binutils, amylaar

  In message < 200108291850.f7TIogC01664@phal.cambridge.redhat.com >you write:
  > I only ran the specific tests, but you are right in that I've left a lot
  > of support procedures that are not needed.  I've fixed this now.
Thank you.  Can you resubmit the updated gas/testsuite changes?

jeff


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-30 10:24         ` law
@ 2001-08-30 13:31           ` Joern Rennecke
  2001-08-30 13:42             ` law
  0 siblings, 1 reply; 10+ messages in thread
From: Joern Rennecke @ 2001-08-30 13:31 UTC (permalink / raw)
  To: law; +Cc: binutils, amylaar

> 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"
+ }

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: h8300-elf port: gas patches
  2001-08-30 13:31           ` Joern Rennecke
@ 2001-08-30 13:42             ` law
  0 siblings, 0 replies; 10+ messages in thread
From: law @ 2001-08-30 13:42 UTC (permalink / raw)
  To: Joern Rennecke; +Cc: binutils, amylaar

  In message < 200108302031.f7UKV5c30624@phal.cambridge.redhat.com >you write:
  > 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.
These are basically OK.  The only change I would request:

  > + if [istarget h8300*-*-coff] then {

h8300-*-hms* and h8300-*-rtems* also use the COFF port, so this test should
probably be run for them too.  

Make that change and the testsuite bits are OK.

jeff

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2001-08-30 13:42 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-28 15:30 h8300-elf port: gas patches Joern Rennecke
2001-08-28 16:38 ` law
2001-08-28 16:57   ` Ian Lance Taylor
2001-08-29  9:11     ` law
2001-08-28 17:30   ` Joern Rennecke
2001-08-29  9:09     ` law
2001-08-29 11:50       ` Joern Rennecke
2001-08-30 10:24         ` law
2001-08-30 13:31           ` Joern Rennecke
2001-08-30 13:42             ` law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).