This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: h8300-elf port: gas patches
- To: law at redhat dot com
- Subject: Re: h8300-elf port: gas patches
- From: Joern Rennecke <amylaar at redhat dot com>
- Date: Thu, 30 Aug 2001 21:31:05 +0100 (BST)
- Cc: binutils at sources dot redhat dot com, amylaar at cambridge dot redhat dot com
> 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"
+ }