Fri Oct 11 16:22:28 2002  J"orn Rennecke <joern.rennecke@superh.com>

	* interp.c (trap): Return int.  Take extra parameter for address
	of the trap instruction.  Changed all callers.
	Add case 33 for profiling.
	* gencode.c (trapa): Handle trap 33 using the trap function.
	Add read of vector for generic traps.

Wed Jul 17 19:36:38 2002  J"orn Rennecke <joern.rennecke@superh.com>

	* Makefile.in (interp.o): Depend on $(srcroot)/include/gdb/sim-sh.h.
	* interp.c: Include "gdb/sim-sh.h".
	(sim_store_register, sim_fetch_register): Use constants defined there.

Tue Jun 18 16:53:11 2002  J"orn Rennecke <joern.rennecke@superh.com>

	* interp.c (sim_resume): Fix setting of bus error for
	instruction fetch.

2002-06-16  Andrew Cagney  <ac131313@redhat.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

2002-06-08  Andrew Cagney  <cagney@redhat.com>

	* interp.c: Include "gdb/callback.h" and "gdb/remote-sim.h".

2001-01-30  Ben Elliston  <bje@redhat.com>

	* interp.c (sim_create_inferior): Record program arguments for
	later inspection by the trap handler.
	(count_argc): New function.
	(prog_argv): Declare static.
	(sim_write): Declare.
	(trap): Implement argc, argnlen and argn system calls. Do not
	abort on unknown system calls--simply return -1.
	* syscall.h (SYS_argc, SYS_argnlen, SYS_argn): Define.

2001-01-24  Alexandre Oliva  <aoliva@redhat.com>

	* interp.c (trap): Implement time.

2000-10-24  Ben Elliston  <bje@redhat.com>

	* gencode.c (tab): Delimit strings with commas where applicable.

Tue May 23 21:39:23 2000  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon May 15 22:04:51 2000  J"orn Rennecke <amylaar@cygnus.co.uk>

sh-dsp support, simulator speedup by using host byte order:

	* Makefile.in (interp.o): Depends on ppi.c .
	(ppi.c): New rule.
	* gencode.c (printonmatch, think, genopc): Deleted.
	(MAX_NR_STUFF): Now 42.
	(tab): Add SH-DSP CPU instructions.
	Amalgamate ldc / stc / lds / sts instructions with similar
	bit patterns.  Fix opcodes of stc Rm_BANK,@-<REG_N>.
	Fix semantics of lds.l @<REG_N>+,MACH (no sign extend).
	(movsxy_tab): New array.
	For movs, change MMMM field to GGGG, and mmmm field to MMMM.
	Added entries for movx, movy and parallel processing insns.
	(ppi_tab): New array.
	(qfunc): Stabilize sort.
	(expand_opcode): Handle [01][01]NN, [01][01]xx and [01][01]yy.
	Handle 'M', 'G' 's' 'X', 'a', 'Y' and 'A'.
	(dumptable): Now takes three arguments.  Changed all callers.
	Emit just one contigous jump table.
	(filltable): Now takes an argument.  Changed all callers.
	Make index static.
	(ppi_moves, expand_ppi_code, ppi_filltable, ppi_gensim): New functions.
	(gensim_caselist): New function, broken out of gensim.
	Handle opcode fields 'x', 'y', 's', 'M', 'G', 'X', 'a', and 'Y'.
	Handle ref '9'.
	(gensim): Handle 'N' in code field and '8' in refs field.
	Call gensim_caselist - twice.
	(ppi_index): New static variable.
	(main): Unsupport default action.
	Add dsp support for -x / -s option.  Add -p option.
	* interp.c (sh_jump_table, sh_dsp_table, ppi_table): Declare.
	(saved_state_type): Rearrange to allow amalgamated ldc / stc /
	lds / sts to work efficiently.
	(target_dsp): New static variable.
	(GBR, VBR, SSR, SPC, MACH, MACL): Reflect saved_state_type change.
	(FPUL, Rn_BANK, SET_Rn_BANK, M, Q, S, T, SR_BL, SR_RB): Likewise.
	(SR_MD, SR_RC, SET_SR_BIT, GET_SR, SET_RC, GET_FPSCR): Likewise.
	(RS, RE, MOD, MOD_ME, DSP_R): Likewise.
	(set_fpscr1): Likewise.  Use target_dsp to check for dsp.
	(MOD_MSi, SIG_BUS_FETCH): Deleted.
	(CREG, SREG, PR, SR_MASK_DMY, SR_MASK_DMX, SR_DMY): New macros.
	(SR_DMX, DSR, MOD_DELTA, GET_DSP_GRD): Likewise.
	(SET_MOD): Reflect saved_state_type change.  Set MOD_DELTA instead
	of MOD_MS, and encode SR_DMY / SR_DMX into high word of MOD_ME.
	(set_sr): Reflect saved_state_type change.  Fix SR_RB handling.
	Use SET_MOD.
	(MA, L, TL, TB): Now controlled by ACE_FAST.
	(SEXT32): Just cast to int.
	(SIGN32): Fixed to only shift by 31.
	(CHECK_INSN_PTR): SIGBUS at insn fetch now represented by insn_end 0.
	(ppi_insn): Declare.
	(ppi.c): Include.
	(init_dsp): Set target_dsp.  When it changes, switch end of
	sh_jump_table with sh_dsp_table.
	(sim_resume) Don't declare sh_jump_table0.  Use sh_jump_table instead.
	Don't Declare PR if it's #defined.
	Fix single-stepping (Was broken in Mar  6 16:59:10 patch).
	(sim_store_register, sim_read_register): Translate accesses to
	reflect saved_state_type change.

	* interp.c (set_sr): Set sr.
	(SET_RC, MOD, MOD_MS, MOD_ME, SET_MOD, MOD_MS, MOD_ME): New macros.
	(set_fpscr1): Don't bank-switch fpu registers when simulating sh-dsp.
	(DSP_R): Fix definition.
	(sim_resume): Remove outdated SET_SR use.

	* interp.c (saved_state): New members for struct member asregs:
	rs, re, insn_end, xram_start, yram_start.
	(struct loop_bounds): New struct.
	(SKIP_INSN): New macro.
	(get_loop_bounds): New function.
	(endianw): Renamed to global_endianw.
	(maskw): negated bits.
	(PC): Now insn_ptr.
	(SR_MASK_RC, SR_RC_INCREMENT, SR_RC, RAISE_EXCEPTION): New macros.
	(RS, RE, DSP_R, DSP_GRD, A1, A0, X0, X1, Y0, Y1, M0, A1G): Likewise.
	(M1, A0G, RIAT, PT2H, PH2T, SET_NIP, CHECK_INSN_PTR): Likewise.
	(SIG_BUS_FETCH): Likewise
	(raise_exception, riat_fast): New functions.
	(raise_buserror, sim_stop): Use raise_exception.
	(PROCESS_SPECIAL_ADDRESS): Use xram_start / yram_start.
	(BUSERROR, WRITE_BUSERROR, READ_BUSERROR):
	Reverse sense of mask argument.
	(FP_OP, set_dr): Use RAISE_EXCEPTION.
	(wlat_fast, wwat_fast, wbat_fast, rlat_fast, rwat_fast, rbat_fast):
	Declare.  Remove redundant masking.
	(wwat_fast, rwat_fast): Add argument endianw.  Changed callers.
	(MA): Updated for change pc -> PC.
	(Delay_Slot): Use RIAT.
	(empty): Deleted.
	(trap): Remove argument little_endian.  Add argument endianw.
	Changed all callers.  Use raise_exception.
	(macw): Add argument endainw.  Changed all callers.
	(init_dsp): New function, extended after broken out of init_pointers.
	(sim_resume): Replace pc with insn_ptr.  Replace little_endian with
	endianw.  Replace nia with nip.  Reverse sense of maskb / maskw /
	maskl.  Implement logic for zero-overhead loops.  Don't try to
	interpret garbage when getting a SIGBUS at insn fetch.
	(sim_open): Call init_dsp.
	* gencode.c (tab): Use SET_NIP instead of nia = .  Use PH2T / PT2H /
	RAISE_EXCEPTION where appropriate.
	Add extra cycles for brai, braf , bsr, bsrf, jmp, jsr.

	* interp.c (sim_store_register, sim_fetch_register):
	Do proper endianness switch.

	* interp.c (saved_state_type): New members for struct member asregs:
	xymem_select, xmem, ymem, xmem_offset, ymem_offset.
	(special_address): Delete.
	(BUSERROR): Now a two-argument predicate.
	(PROCESS_SPECIAL_ADDRESS, WRITE_BUSERROR, READ_BUSERROR): New macros.
	(wlat_little, wwat_little, wbat_any, wlat_big, wwat_big): Delete.
	(process_wlat_addr, process_wwat_addr): New functions.
	(process_wbat_addr, process_rlat_addr, process_rwat_addr): Likewise.
	(process_rbat_addr): Likewise.
	(wlat_fast, wwat_fast, wbat_fast): Use WRITE_BUSERROR.
	(rlat_little, rwat_little, rbat_any, rlat_big, rwat_big): Delete.
	(rlat_fast, rwat_fast, rbat_fast): Use READ_BUSERROR.
	(RWAT, RLAT, RBAT, WWAT, WLAT, WBAT): Delete SLOW versions.
	(do_rdat, trap): Delete SLOW code.
	(SEXT32, SIGN32): New macros.
	(swap, swap16): Now integer in - integer out.  Changed all callers.
	(strswaplen, strnswap): Delete SLOW versions.
	(init_pointers): Initialize dsp memory selection (preliminary).
	(sim_store_register, sim_fetch_register): Use swap instead of
	big / little endian read / write functions.

	* interp.c (maskl): Deleted.
	(endianw, endianb): New variables.
	(special_address): Now inline.
	(bp_holder): Put raising of buserror there, rename to:
	(raise_buserror).
	(BUSERROR): Now yields a value.  Changed all users.
	(wbat_big): Delete.
	(wlat_fast, wwat_fast, wbat_fast): New functions.
	(rlat_fast, rwat_fast, rbat_fast): Likewise.
	(RWAT, RLAT, RBAT, WWAT, WLAT, WBAT): Use new functions.
	(do_rdat, do_wdat): Likewise.  Take maskl argument instead of
	little_endian one.  Changed caller macros.
	(swap, swap16): Use w[rw]lat_big / w[rw]lat_little directly.
	(strswaplen, strnswap): New functions.
	(trap): Use them to fix up endian mismatches;
	disable SYS_execve and SYS_execv; fix double address translation for
	SYS_pipe and SYS_stat.
	(sym_write, sym_read): Add endianness translation.
	(sym_store_register, sym_fetch_register): Add maskl local variable.
	(sim_open): Set endianw and endianb.

Thu Sep  2 18:15:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Aug 25 07:55:23 1999  Brendan Kehoe  <brendan@cygnus.com>

	* gencode.c (fcnvds <DR_N>,FPUL): Rewrite to use a local anonymous
	union type, instead of casting to an int* then a float*.
	(fcnvsd FPUL,<DR_N>): Likewise.
	(flds <FREG_N>,FPUL): Likewise.
	(fsts FPUL,<FREG_N>): Likewise.

1999-05-08  Felix Lee  <flee@cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	
1999-04-02  Keith Seitz  <keiths@cygnus.com>

	* interp.c (POLL_QUIT_INTERVAL): Define. Used to tweak the
	frequency at which the poll_quit callback is called.
	(sim_resume): Use POLL_QUIT_INTERVAL instead of a
	hard-coded value.

Thu Sep 10 02:16:39 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* interp.c (saved_state.asregs): Add new member pad_dummy.
	(sim_store_register, sim_fetch_regsiter): Add 1 to rn for use
	as index into saved_state.asints.

Mon Jun 29 19:35:24 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* interp.c (sim_open): set endianness based on the ABFD if a -E
	option is not present and we have an ABFD.

Tue Apr 28 18:33:31 1998  Geoffrey Noer  <noer@cygnus.com>

        * configure: Regenerated to track ../common/aclocal.m4 changes.

Sun Apr 26 15:31:55 1998  Tom Tromey  <tromey@creche>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Sun Apr 26 15:19:48 1998  Tom Tromey  <tromey@cygnus.com>

	* acconfig.h: New file.
	* configure.in: Reverted change of Apr 24; use sinclude again.

Fri Apr 24 14:16:40 1998  Tom Tromey  <tromey@creche>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Fri Apr 24 11:18:35 1998  Tom Tromey  <tromey@cygnus.com>

	* configure.in: Don't call sinclude.

Sat Apr  4 20:36:25 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Fri Mar 27 16:15:52 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Mar 25 12:35:29 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Mar 18 12:38:12 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Feb 17 12:49:44 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_fetch_register, sim_store_register): Pass in
 	length parameter.  Return -1.

Sun Feb  1 16:47:51 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Sat Jan 31 18:15:41 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Jan 19 22:26:29 1998  Doug Evans  <devans@seba>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Dec 15 23:17:11 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Thu Dec  4 09:21:05 1997  Doug Evans  <devans@canuck.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Oct 22 14:43:00 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_load): Pass lma_p and sim_write args to
 	sim_load_file.

Fri Oct  3 09:28:00 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Sep 24 17:38:57 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Sep 23 11:04:38 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Sep 22 11:46:20 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Fri Sep 19 17:45:25 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Sep 15 17:36:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Sep  9 20:52:21 1997  Felix Lee  <flee@cygnus.com>

	* interp.c (sim_resume): poll_quit() at least once per call;
 	otherwise gdb can loop sim_resume() uninterruptably.

Thu Sep  4 17:21:23 1997  Doug Evans  <dje@seba>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Sep  2 13:15:27 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* gencode.c (tab): Order instructions according to SH3 document.

Wed Aug 27 18:13:22 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Tue Aug 26 10:41:55 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_kill): Delete.
	(sim_create_inferior): Add ABFD argument.
	(sim_load): Move setting of PC from here.
	(sim_create_inferior): To here.

Mon Aug 25 17:50:22 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Mon Aug 25 16:17:51 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_open): Add ABFD argument.

Mon Jun 23 15:49:14 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (get_dr): Avoid SIGFPE by moving integers instead of
 	FP's around.
	(set_dr): Ditto.
	
Mon Jun 23 15:02:40 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (XD, SET_XD): Delete.
  	(XF, SET_XF, XD_TO_XF): Define, move around registers in either
 	FP bank.
	
	* gencode.c (fmov): Update.

Sun Jun 22 19:33:33 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (set_fpscr1): From J"orn Rennecke
 	<amylaar@cygnus.co.uk>, Fix typo. Ditto for comment.
	
Tue Aug 12 00:19:11 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* interp.c (special_address): New function.
	(BUSERROR): Call it.  Added parameters bits_written and data.
	Changed all callers.
	* gencode.c (tab): Fixed ocbwb and pref.

Fri Jun 20 22:03:18 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* interp.c (do_wdat, do_wdat): Fix bug in register number calculation.

Thu Jun 19 00:28:08 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_create_inferior): Clear registers each time an
 	inferior is started.

Mon Jun 16 14:01:55 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (*FP, FP_OP, FP_CMP, FP_UNARY): Provide a hook for
 	when a host doesn't support IEEE FP.
	(*DP): Provide alternative definition that supports 64bit floating
 	point.
	(target_little_endian): Combine little_endian and little_endian_p.
	(saved_state_type): Make fpscr and sr simple integers.
	(SET_FPSCR, GET_FPSCR): Use macros to update fpscr register.
	(set_fpscr1): New function.  Handle swapping when PR / FR bits
 	changed. Call via *_FPSCR macro.
	(SET_SR*, GET_SR*): Use macro's to access the SR bits - avoids
 	endian problems.

	* gencode.c (tab): Update.
	
Sun Jun 15 15:22:52 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* gencode.c (main): Perform basic checks on tab entries.

	* Makefile.in (gencode): Always compile with -g.

Sat Jun 14 13:45:09 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* gencode.c (gensim): Move ref checking code to before `stuff'.
  	For branches with delay slots refs were not being checked.

	* interp.c (sim_resume): Use nia to specify the next instruction
 	address instead of overloading pc.
	(C): Delete definiton - refer to cycles directly.
	(SEXT12): New macro - sign extend a 12 bit quantity.
	(Delay_Slot): Rename from SL.

	* gencode.c (tab): Update/simplify.
	
	* gencode.c (gensim): Better formatting of output code.
	(gensim): Replace 10 with constant MAX_NR_STUFF- define as 15.
	(tab): Sort alphabetically.  Break `stuff' into multiple lines.

Fri Jun 13 22:10:13 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* gencode.c (braf, bsrf): Fix branch destination calculation to
	be in accordance with the documentation.

Fri Jun 13 15:33:53 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* interp.c (init_pointers): Fix little endian test.

Thu Jun  5 12:56:08 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* interp.c (init_pointers): SH4 hardware is always WORDS_BIT_ENDIAN.
	* gencode (fmov from/to memory): take endian_mismatch into account
	for 32 bit moves too.

Wed May 28 23:42:35 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

        * gencode.c (swap.b): Fix treatment of high word.

Wed May 28 23:42:35 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

        * sh/gencode.c,
        * interp.c: experimental SH4 support.
        DFmode moves are probaly broken for target little endian.

Tue May 20 10:23:28 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_open): Add callback argument.
	(sim_set_callbacks): Delete SIM_DESC argument.

Wed Apr 30 11:38:08 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (SIM_EXTRA_CLEAN): Define.
	(clean targets): Delete.
	(sh-clean): New target.

Thu Apr 24 00:39:51 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Apr 23 17:55:22 1997  Doug Evans  <dje@canuck.cygnus.com>

	* tconfig.in: New file.
	* interp.c (sim_open): Handle missing arg to -E.

Tue Apr 22 08:55:35 1997  Stu Grossman  (grossman@critters.cygnus.com)

	* Makefile.in:  Add clean targets.

Fri Apr 18 18:57:04 1997  Stu Grossman  (grossman@critters.cygnus.com)

	* interp.c:  Include float.h and define SIGTRAP if _WIN32.
	WIN32 -> _WIN32.
	* (trap):  Do do SYS_chown for _WIN32.

Fri Apr 18 13:33:09 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interp.c (sim_resume): Fix argument to poll_quit.

Fri Apr 18 14:14:49 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interp.c (sim_stop): New function.
	(sim_resume): Use poll_quit for polling.

Thu Apr 17 03:32:04 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (SIM_OBJS): Add sim-load.o.
	* interp.c (target_byte_order): Delete.
	(sim_kind, myname, little_endian_p): New static locals.
	(init_pointers): Use little_endian_p instead of target_byte_order.
	(sim_resume): Likewise.
	(sim_open): Set sim_kind, myname.  Set little_endian_p from -E arg.
	(sim_load): Return SIM_RC.  New arg abfd.  Call sim_load_file to
	load file into simulator.  Set start address from bfd.
	(sim_create_inferior): Return SIM_RC.  Delete arg start_address.

Mon Apr  7 15:45:02 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Wed Apr  2 15:06:28 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interp.c (sim_open): New arg `kind'.

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Apr  2 14:34:19 1997 Andrew Cagney <cagney@kremvax.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Mar 19 09:34:36 1997  Fred Fish  <fnf@cygnus.com>

	* interp.c (sim_do_command): Check for NULL command or empty
	string and handle it the same as a "help" command.  Use callback
 	to print error message for unrecognized commands.  Replace
	hardcoded tab in literal string with a \t.  Other minor code
 	cleanup.

Wed Mar 19 01:14:00 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Mar 17 15:10:07 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* configure: Re-generate.

Fri Mar 14 10:34:11 1997  Michael Meissner  <meissner@cygnus.com>

	* configure: Regenerate to track ../common/aclocal.m4 changes.

Thu Mar 13 13:00:00 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interp.c (sim_open): New SIM_DESC result.  Argument is now
	in argv form.
	(other sim_*): New SIM_DESC argument.

Tue Feb  4 13:33:30 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (@COMMON_MAKEFILE_FRAG): Use
	COMMON_{PRE,POST}_CONFIG_FRAG instead.
	* configure.in: sinclude ../common/aclocal.m4.
	* configure: Regenerated.

Thu Jan 23 11:46:23 1997  Stu Grossman  (grossman@critters.cygnus.com)

	* configure configure.in Makefile.in:  Update to new configure
	scheme which is more compatible with WinGDB builds.
	* configure.in:  Improve comment on how to run autoconf.
	* configure:  Re-run autoconf to get new ../common/aclocal.m4.
	* Makefile.in:  Use autoconf substitution to install common
	makefile fragment.

Wed Nov 20 02:04:32 1996  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in: Delete stuff moved to ../common/Make-common.in.
	(SIM_OBJS,SIM_EXTRA_LIBS): Define.
	* configure.in: Simplify using macros in ../common/aclocal.m4.
	Call AC_CHECK_HEADERS(unistd.h).
	* configure: Regenerated.
	* config.in: New file.
	* interp.c: #include "config.h".  #include <unistd.h> if present.
	(trap): Fetch errno value with callback->get_errno.

Tue Nov 12 13:34:00 1996  Dawn Perchik  <dawn@cygnus.com>   

	* interp.c: Don't include windows polling code if inside simluator.

Fri Sep 20 14:57:50 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* interp.c: Minor formatting improvements.
	(saved_state_type): Add bank registers.
	(bp_holder): New function, use to break on when debugging BUSERROR.
	(BUSERROR): Call it if bus error occurs.

Wed Jun 26 12:29:22 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

        * Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
        INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
        (docdir): Removed.
        * configure.in (AC_PREREQ): autoconf 2.5 or higher.
        (AC_PROG_INSTALL): Added.
        * configure: Rebuilt.

Thu May 16 15:44:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* interp.c (saved_state_type): Add memstalls field.
	(MA) Define macro.
	(sim_resume): New local variable memstalls.  Add it back in to
	saved_state at the end of the function.
	(sim_info): Report memstalls.
	* gencode.c (tab): Add MA() to the execution string of all
	instructions which access memory.

Wed Feb 21 12:16:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Regenerate with autoconf 2.7.

Tue Dec  5 16:38:55 1995  Stu Grossman  (grossman@cygnus.com)

	* gencode.c (mac.l):  Don't abort GDB if executing mac.l
	instruction (which is unimplemented).  Generate a SIGTRAP (in the
	simulated target) instead.

Mon Dec  4 12:22:24 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* gencode.c (tab): Added several sh3 opcodes.
	(think): Added printonmatch for A_SSR and A_SPC.
	* interp.c (SSR, SPC): Added definitions.
	(saved_state_type): Added ssr and spc registers.

Wed Nov 29 12:39:27 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* gencode.c (tab): In shad/shld definitions, negate R[m] before
	the and operation instead of after.  For shad delete cast.  For shld
	use UR instead of R and delete cast.

Fri Nov 17 12:48:55 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* gencode.c (tab): Add explicit NaN support for ftrc instruction.

Wed Nov 15 11:25:27 1995  Stu Grossman  (grossman@cygnus.com)

	* interp.c:  Make target_byte_order be extern to prevent SGI cc from
	issuing warnings about the use of common symbols.

Tue Nov 14 15:19:43 1995  Stu Grossman  (grossman@cygnus.com)

	* gencode.c:  jsr, bsr and bsrf actually save pc+4 in pr, and rts
	actually uses pr+0.

Sat Oct 21 13:01:18 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* sh/interp.c (sim_stop_reason): Catch SIGQUIT and indicate
	program exited.
	(sim_get_quit_code): Delete.
	
	* gencode.c (gensim): Indicate SIGILL instead of calling abort for
	default case.

Mon Oct 16 18:24:03 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* interp.c (saved_state_type): Move FP registers to immediately
	after SR.

Tue Oct 10 11:12:15 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (BISON): Remove macro.

Fri Oct  6 12:08:18 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* interp.c (trap, case SYS_utime): Cast second arg of utime to
	void * to avoid compiler error.
	
	* interp.c (callback): Remove last change.  It is initialized by
	a sim_set_callbacks call.
	
Thu Oct  5 14:13:29 1995  steve chamberlain  <sac@slash.cygnus.com>

	* interp.c (callback): Initialize to default callback.

Thu Sep 28 15:26:59 1995  steve chamberlain  <sac@slash.cygnus.com>

	* run.c: Moved to ../common.
	* interp.c (trap): Use gdb's callback interface.
	* Makefile.in: Updated.

Wed Sep 20 13:35:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New synonym for realclean.

Wed Sep 20 09:51:50 1995  steve chamberlain  <sac@slash.cygnus.com>

	* run.c (sim_callback_write_stdout):  New.
	* interp.c (trap): Call sim_callback_write_stdout when needed.

Mon Sep 18 18:42:27 1995  steve chamberlain  <sac@slash.cygnus.com>

	* interp.c (trap): Remove useless code.

Fri Sep 15 19:30:05 1995  steve chamberlain  <sac@slash.cygnus.com>

	* syscall.h: Copy from newlib.

Thu Sep 14 19:32:59 1995  Stu Grossman  (grossman@cygnus.com)

	* gencode.c:  Back up PC by 2 for breakpoints.
	* interp.c:  Move fp regs beyond pc/pr/etc to avoid confusing GDB,
	which expect pc to immediatly follow regs[].

Fri Sep  8 14:18:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Define CC_FOR_BUILD.  Don't call AC_PROG_INSTALL.
	* configure: Rebuild.
	* Makefile.in (INSTALL): Revert to using install.sh.
	(INSTALL_PROGRAM, INSTALL_DATA): Set to $(INSTALL).
	(INSTALL_XFORM, INSTALL_XFORM1): Restore.
	(CC_FOR_BUILD): Restore.
	(gencode): Build using $(CC_FOR_BUILD).
	(install): Don't install in $(tooldir).

Thu Sep  7 15:02:31 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	(Try to) Update to new bfd autoconf scheme.
	* run.c: Don't include sysdep.h.
	* Makefile.in (INSTALL{,_PROGRAM,_DATA}): Use autoconf computed value.
	(CC, CFLAGS, AR, RANLIB): Likewise.
	(HDEFINES, TDEFINES): Define.
	(CC_FOR_BUILD): Delete.
	(host_makefile_frag): Delete.
	(Makefile): Don't depend on frags.
	* configure.in (sysdep.h): Don't create symlink.
	(host_makefile_frag, frags): Deleted.
	(CC, CFLAGS, AR, RANLIB, INSTALL): Compute values.
	* configure: Regenerated.

Thu Aug 31 12:39:07 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* interp.c: Include <math.h>.

Wed Aug 30 22:05:17 1995  Jeff Law  (law@snake.cs.utah.edu)

	* Makefile.in (run): Link in math library too.
	* gencode.c (gensim): abort if an unknown opcode is encountered.
	* interp.c (FPSCR, FPUL): Define.
	(struct save_state): Add fields for floating point registers,
	FPSCR and FPUL.
	(sim_resume): Add 'F' for accessing floating point registers
	in the save state structure.
	* gencode.c: Add sh3e opcodes.
	(gensym): Define a buffer for int<->fp conversions.

Tue Aug 22 14:16:46 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* interp.c (trap): Use trap vector 34 for host system interface.
	* gencode.c: Add 34 to conditional which determines which traps
	will be handled by simulator.

Fri Aug 11 17:59:15 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* run.c: Include <signal.h>.  Define SIGQUIT if not defined.
	(main): New variables reason and sigrc.  After simulator exits,
	check to see if it exited because of a signal, and if so, then
	use the signal number as the return value.

Thu Aug  3 10:45:37 1995  Fred Fish  <fnf@cygnus.com>

	* Update all FSF addresses except those in COPYING* files.

Tue Jul 18 23:33:10 1995  Fred Fish  <fnf@fishbowl>

	* interp.c (trap): Only use SYS_execv if defined.  Might be
	implemented as execve(arg1,arg2,0), as with Unixware 2.0.
	(sim_resume): In sbit initializer, cast shifted arg to unsigned
	to avoid signed integer overflow.

Wed Jul  5 14:32:54 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (clean): Remove run, libsim.a.
	  (distclean, mostlyclean, realclean): Remove Makefile and 
	  autoconf files.

	* sh.mt: Removed.

	* Makefile.in, configure.in: converted to autoconf.
	* configure: New file, generated with autconf 2.4.

Fri Jun 30 16:51:38 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* interp.c (sim_open): If argument supplied, interpret as
	desired memory size.
	(parse_and_set_memory_size): New function.
	(sim_do_command): New function.

Thu Jun 29 10:02:28 1995  Fred Fish  <fnf@deneb.cygnus.com>

	* interp.c  (SYS_wait): Define as SYS_wait4 if available and
	SYS_wait is not already defined (SunOS 4.1.3 for example).
	(SYS_utime): Define as SYS_utimes if available and
	SYS_utime is not already defined.

Thu Jun 22 17:25:57 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* interp.c: Don't include sys/times.h or sys/param.h

Wed Jun 21 15:03:49 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* interp.c (SIGBUS, SIGTERM): Define if not.
	(sim_memory_size): default to 2^19 on PCs.
	(sim_resume): Poll for quits on win32.

Wed May 24 16:22:48 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* gencode.c (op_tab): Add SH3 support.

Wed May 24 14:07:11 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* gencode.c (tab): Add bsrf and braf.

Mon Apr 24 15:09:49 1995  Jason Molenda  (crash@cygnus.com)

	* configure.in: use ../../bfd/hosts/std-host.h, not 
	../bfd/hosts/std-host.h (which doesn't exist).

Mon Mar 27 10:32:34 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* run.c: parse arguments with getopt().

Sun Feb 26 15:27:24 1995  Steve Chamberlain  <sac@cygnus.com>

	* configure.in: Use ../../bfd/hosts/std-host.h if specific
	host unavailable.

Mon Jan 23 16:10:58 1995  Torbjorn Granlund  <tege@rtl.cygnus.com>

	* interp.c (macw): Sign extend MACH at bit 10 for non-saturating case.

Sun Jan 22 13:55:36 1995  Torbjorn Granlund  <tege@rtl.cygnus.com>

	* gencode.c (op_tab): Make MAC.W call macw, not abort.
	* interp.c (macw): New function.
	(S): New #define.

Sat Jan 21 15:52:30 1995  Torbjorn Granlund  <tege@rtl.cygnus.com>

	* gencode.c (op_tab): New code for ADDV and SUBV.
	Make MAC.L abort sicne it is not implemented.

	* interp.c (dmul): Handle the signed case by adjusting after unsigned multiply.
	Get rid of __GNUC__ conditional.

aThu Jan 19 05:50:50 1995  Torbjorn Granlund  <tege@rtl.cygnus.com>

	* gencode.c (op_tab): Also replace NEGC, and try again with SUBC.
	Change ADDC for symmetry.

	* gencode.c (op_tab): Replace code for ADDC and SUBC.

Mon Jan  9 15:43:53 1995  Stu Grossman  (grossman@cygnus.com)

	* interp.c:  Remove def of INLINE.  This comes from bfd.h.  Also,
	declare IOMEM before using it.

Wed Dec 28 21:25:31 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* interp.c (BUSERROR): New macro.
	([r|w][bwl]at[little|big]) New functions.
	(sim_resume): If GO32 check for interrupt every now
	and again.  Decrement PC if SIGBUS seen.
	* run.c (main):  Return result of simulated _exit.

Mon Dec  5 21:59:51 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (gencode): Allow build in different directory.

Wed Nov 30 17:47:13 1994  Jim Wilson  <wilson@chestnut.cygnus.com>

	* Makefile.in (gencode): Change $< to gencode.c for portability.

Wed Nov 23 21:31:55 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* interp.c ([wr][bwl]at): New functions.
	(trap): Cope with both byte modes.

Thu Sep  8 17:35:07 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* gencode.c (tab): Simulate T bit after a negc insn right.
	* interp.c (RSBAT): Sign extend the arg.
	(ACE_FAST): New macro.
	(sim_resume): Remove obsolete test of sim_timeout.
	
Fri Aug  5 14:12:31 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* interp.c (IOMEM): New function, simulates very basic I/O area of
	the SH.
	(WBAT, RBAT) : Call I/O functions.
	* gencode.c (tab): Special case trapa #3.

Mon Jun 27 18:04:54 1994  Steve Chamberlain  (sac@cirdan.cygnus.com)

	* run.c (main): Specify the file type again.

Thu May 26 19:04:37 1994  Steve Chamberlain  (sac@thepub.cygnus.com)

	* interp.c (trap): Fix irix incompatibility.
	* run.c (main): open without specifying file type.

Wed May 18 14:18:53 1994  Doug Evans  (dje@canuck.cygnus.com)

	* interp.c (sim_*): Make result void where there isn't one.
	(sim_set_pc): Delete.
	(sim_info): Delete printf_fn arg, all callers changed.
	Call printf_filtered instead.
	(sim_close): New function.
	(sim_load): New function.
	(sim_create_inferior): Renamed from sim_set_args, all callers changed.
	* run.c: #include <varargs.h>, "remote-sim.h".
	(printf_filtered): New function.

Wed Apr 27 12:03:48 1994  Steve Chamberlain  (sac@cygnus.com)

	* gencode.c (table): Get direction of some opcodes right.
        (trapa, rte): Implement fully.
	* interp.c (trap): Make stat call more portable.

Fri Feb 11 21:59:38 1994  Steve Chamberlain  (sac@sphagnum.cygnus.com)

	* gencode.c (main, gendefines): New -d option prints table of defines.
	* interp.c (trap): Add a load of system calls. 
	(sim_memory_size): Now default to 8Mbyte.
        (PARANOID): Keep vector of registers with undefined contents.

Mon Nov 15 14:37:18 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

	* gencode.c: mova uses aligned addresses
	* interp.c (trap): Return results in r0.

Tue Oct 26 10:38:55 1993  Doug Evans  (dje@canuck.cygnus.com)

	* Makefile.in (CSEARCH): Add -I$(srcdir)/../../gdb
	* interp.c: #include "remote-sim.h".
	(sim_resume): int result, new arg `siggnal'.
	(sim_write): Use SIM_ADDR for type of arg `addr'.
	(sim_read): Use SIM_ADDR for type of arg `addr'.
	Use unsigned char * for `buffer'.
	(sim_store_register): int result.
	(sim_fetch_register): Ditto.
	(sim_stop_reason): Renamed from sim_stop_signal.  New arg `reason'.
	(sim_set_pc): int result, use SIM_ADDR for type of arg `x'.
	(sim_info): int result, new args `verbose', `printf_fn'.
	(sim_kill): int result.
	(sim_open): int result, new arg `name'.
	* run.c: #include <stdio.h>
	(main): Update call to sim_info.

Sat Oct 23 15:09:29 1993  Doug Evans  (dje@canuck.cygnus.com)

	* interp.c (sim_stop_signal): Result is now enum sim_stop.

Fri Oct  8 10:47:09 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* gencode.c (table): Becomes unsigned.
	* interp.c (trap): Get right breakpoint SIGnum. (sim_write,
	sim_read): Return number of bytes copied.  (sim_store_register):
	Value passed by reference. (sim_kill, sim_open, sim_set_args): New functions.

Tue Sep  7 16:24:13 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* interp.c (sim_info): Fix small typo in printf string.

Thu Aug  5 11:37:48 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* interp.c (sim_resume): Set memory after pointers inited.

Mon Aug  2 14:13:22 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* interp.c (get_now): Use time system call.
	* Makefile.in: install correctly.

Tue Jul  6 10:30:46 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* run.c (main), interp.c (sim_set_timeout): Remove timeout
	functionality.

Thu Jun 24 13:29:57 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)

	* Makefile.in: don't run indent everytime; also add a space in the
	includes 

Thu Jun 17 18:30:42 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* gencode.c: Fix some opcodes.
	* interp.c: Support for profiling and portability fixes.
	* run.c (main): Get profiling args.

Wed May  5 13:17:22 1993  Steve Chamberlain  (sac@cygnus.com)

	* gencode.c (tab): Lint for sgi compiler
	* interp.c: Lint for sgi compiler.

Mon May  3 15:25:33 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* run.c (main): Support for resizing simulated RAM.	
	* Makefile.in: Support for broken makes.
	* interp.c, gencode.c: Lint.

Mon Apr 26 18:01:10 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* created

