Wed May 29 22:57:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ChangeLog.00, ChangeLog: ChangeLog from gdb-4.16 becomes
        ChangeLog.00

Thu Apr  4 15:17:22 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* INSTALL: Fix some long lines and remove x86 specific options in
	the examples.

Sun Mar 31 15:47:33 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

        * INSTALL: Update to reflect gdb-4.16.

        * RUN: Update to reflect gdb-4.16.  Review notes on building a BSD
        runtime environment.

	* README: Point out copyright status of simulator in introduction.

Thu Mar  7 19:53:49 1996  Michael Meissner  <meissner@cygnus.com>

	* emul_netbsd.c: Only include sys/mount.h if HAVE_SYS_MOUNT_H is
	defined.
	* configure.in: Test for sys/mount.h.
	* configure,config.in: Regenerate.

Thu Feb 22 22:48:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* README, RUN, INSTALL: Update to reflect announcement
	* psim: PSIM 1.0.1 released

Thu Feb 22 14:01:56 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_bugapi.c (emul_bugapi_do_read): New function to handle
	reads.
	(emul_bugapi_instruction_call): Add support for .INCHR/.INLN
	system calls.

	* emul_bugapi.c (emul_bugapi_do_write): Call flush_stdoutput.
	* emul_netbsd.c (do_write): Call flush_stdoutput.

	* main.c (flush_stdoutput): Do fflush (stdout).
	* sim_calls.c (flush_stdoutput): Do gdb_flush (gdb_stdout);
	* sim_callbacks.h (flush_stdoutput): Declare.

Wed Feb 21 10:39:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_bugapi.c (bug_mapping): New structure to map bug system
	call numbers to a string.
	(toplevel): Add remaining bugapi system calls.
	(emul_bugapi_instruction_name): Map bugapi system call number to a
	string.
	(emul_bugapi_do_write): Common code to process write system calls.
	(emul_bugapi_instruction_call): If os-emul tracing is on, trace
	the system call.  Use the name to print unknown system call.
	Correct implementation of _OUTLN.  Add support for _OUTSTR and
	_PCRLR system calls.

Wed Feb 21 17:07:27 1996  Andrew Cagney  <cagney@highland.com.au>

	* NOTES: New file.  Ramblings on why things were done they way
 	they were.
	
	* psim.c (psim_options): Didn't enter the model value into the
 	device tree as a string.
	
  	* cpu.c (cpu_synchronize_context): Wrong test for conditional
 	flush of cache.

	* emul_generic.c (emul_add_tree_hardware): reg value didn't match
 	bus address.
	
	* ppc-opcode-flat: new file. Generate an instruction decode
 	function like ppc-opcode-complex but use switch statements.

	* INSTALL: document new opcode file, add example configurations.

Tue Feb 20 18:42:31 1996  Andrew Cagney  <cagney@highland.com.au>

	* main.c (main): rename psim instance (system) to simulation and
 	make global.
	* main.c (error): print out performance even when an error occures.

	* emul_bugapi.c (emul_bugapi_create): Fix argument passing.

	* emul_generic.c (emul_add_tree_hardware): Move hardware devices
 	to 0x80000000 from 0x400000.

Mon Feb 19 22:54:40 1996  Andrew Cagney  <cagney@highland.com.au>

	* ppc-instructions (TLB Invalidate Entry, TLB Invalidate ALL):
        Implement by passing on request to all processors.
	* ppc-instructions (TLB Synchronize): Implement as empty, processor
	tlb's are always in sync.

	* cpu.c (cpu_page_tlb_invalidate_all): New function.  Pass on TLB
        invalidate request to processors VM sub-system.
	* cpu.c (cpu_page_tlb_invalidate_entry): Ditto.

	* vm.c (vm_page_tlb_invalidate_all): New function. Mark all page
        TLB entries as invalid.
	* vm.c (vm_page_tlb_invalidate_entry): New function. Ditt but only
	invalidate one TLB entry.

	* psim.c (psim_init): Invalidate TLB's before (re)starting.

Mon Feb 19 21:25:56 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_generic.c (emul_add_tree_options): Add argument
        oea_interrupt_prefix (0 or 1) that specifies the prefix MSR[IP]
        and hence the location of the interrupt vectors.  Add this to the
        device tree.

	* emul_chirp.c (emul_chirp_create): Allow configuration of
        floating-point and interrupt prefix (default 0) using the above.

	* emul_netbsd.c (emul_netbsd_create): Pass dummy arg for
        interrupt-prefix.

	* emul_bugapi.c (emul_bugapi_create): Allow configuration of
        interrupt prefix (default 1) and configure interrupt table traps
        accordingly.

	* emul_generic.c (emul_add_tree_hardware): Include a small eeprom
        in the list of devices.

	* device_table.c: For moment fake eeprom device by a memory
        device.  In future will need a proper eeprom device.

Tue Feb 20 17:01:26 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config.in: Regenerated.

Fri Feb 16 10:42:27 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* psim.c: Include options.h so print_options is declared.

Thu Feb 15 18:10:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_netbsd.c (toplevel): Do not include sys/resource.h if the
	system doesn't have it, and turn off getrusage processing.
	(write_rusage): #ifdef out if we don't have getrusage.
	(do_getrusage): Define as 0 if we don't have getrusage.

Wed Feb 14 17:38:12 1996  J. T. Conklin  <jtc@cygnus.com>

	* configure.in (AC_HEADER_DIRENT): Add, so that we can figure out
	where the directory functions are declared.
	* configure: Regenerate

	* emul_netbsd.c: Use the macros defined by configure to find the
	appropriate directory functions.

Thu Feb  8 00:53:13 1996  Andrew Cagney  <cagney@highland.com.au>

	* configure.in (xor_endian): Trace setting of xor-endian flag.

Wed Feb  7 18:20:56 1996  Andrew Cagney  <cagney@highland.com.au>

	* psim.c (psim_usage): Extend documentation.

	* ppc-instructions (model-print): fix typo.

Sun Feb  4 23:58:02 1996  Andrew Cagney  <cagney@highland.com.au>

	* configure.in (with-smp): Default configuration allow up to
	five processors (but enable only one).

	* emul_bugapi.c (emul_bugapi_create): If floating-point is
	allowed, enable the floating point instruction set in the
	msr.

Tue Jan 30 22:52:32 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_chirp.c (chirp_emul_seek, chirp_emul_read,
        chirp_emul_write): Tolerate invalid ihandles.

	* device.c (device_instance_create, device_instance_delete):
	init/delete instance name

	* emul_chirp.c (emul_chirp_instruction_call): Read the nr args and
        returns when determining the service.

	* emul_chirp.c (chirp_read_t2h_args): Allow variable number of
        args for the method "call-method".

	* emul_chirp.c (chirp_emul_getprop): Tolerate a n_returns of zero
        - should be one. Some OpenBoot code doesn't pass correct arg.

	* emul_chirp.c (chirp_emul_getprop): Trace more property types.

Tue Jan 30 19:12:29 1996  Andrew Cagney  <cagney@highland.com.au>

	* RUN: New file. Describe how to run PSIM
	* INSTALL: New file. Describe how to install PSIM
	* README: New file. Overview PSIM.
	* BUGS: New file. Briefly discuss bugs and limitations
	
Wed Jan 24 20:28:08 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_bugapi.c (OEA_START_ADDRESS): Put it back to 0x100000,
        wasn't correctly using GLD.

Mon Jan 22 22:44:13 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_generic.c (emul_add_tree_options): Make default number of
	active processors 1 (even when SMP enabled).

Mon Jan 22 22:37:34 1996  Andrew Cagney  <cagney@highland.com.au>

	* device_table.c (icu_io_read_buffer_callback): Add extra register
        (at addr + 4) that returns number of processors.

	* emul_generic.c (emul_add_tree_hardware): Update device node to
        match.

Mon Jan 22 22:00:42 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_bugapi.c (OEA_START_ADDRESS): Change to 0x4000 so that it
        matches gas-960116/ld.

Fri Jan 19 00:32:27 1996  Andrew Cagney  <cagney@highland.com.au>

	* psim-960119 released - psim-1.0b01.

Fri Jan 19 00:32:27 1996  Andrew Cagney - aka Noid  <cagney@highland.au.com>

	* psim.c (psim_create): Re-order so that all options are set
        before the CPU's are created.  Was breaking mon_create();

	* psim.c (psim_create): Tidy up conflicting configuration errors.

	* debug.c: Add missing print-info entry to trace table.

	* os_emul.c (os_emul_create): Fix `-e' option. Was looking under
        wrong name.

	* psim.c (psim_options): Fix `-r' option. Was entering under wrong
        name.

Thu Jan 18 20:33:48 1996  Andrew Cagney  <cagney@highland.com.au>

	* vm.c (om_unpack_bats): Fix checking of bat bits.

	* emul_chirp.c (emul_chirp_create): Store address of OB in memory
 	in the os_emul_data structure.

	* emul_bugapi.c (emul_bugapi_create): Store the address of the
 	bugapi code (in main memory) in the os_emul_data structure.

Thu Jan 18 01:14:55 1996  Andrew Cagney  <cagney@highland.com.au>

	* vm.c (om_translate_effective_to_real): Fix trace output.

Wed Jan 17 22:21:55 1996  Andrew Cagney  <cagney@highland.com.au>

	* device_table.c (generic_device_init_address): Create memory from
        information obtained from `reg' property.
	* device_table.c (vm_init_address_callback): Use information
        obtained from properties.
	* emul_netbsd.c (emul_netbsd_create): Update to create device and
        property entries to match

Tue Jan 16 09:50:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* idecode_expression.h (ALU_END): Add ITRACE of the result.

	* ppc-instructions (Equivalent): Enable this instruction.
	(Add to Minus One Extended): Ditto.
	(Subtract from Minus One Extended): Ditto.
	(Add/And/Or/Xor Immediate): Add alu trace of result.
	(Add/And/Or/Xor Shifted Immediate): Ditto.
	(And/Or/Equivalent/Nand/Nor): Ditto.
	(And/Or with Complement): Ditto.
	(Extend Sign Byte/Half Word): Ditto.
	(Count Leading Zeros): Ditto.
	(Shift Right Algerbraic Word): Ditto.
	(Shift Right Algerbraic Word Immediate): Ditto.

Tue Jan  9 15:10:27 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_bugapi.c (emul_bugapi_instruction_call) : Make format type
 	correct.
	* emul_chirp.c (map_over_chirp_note) : Ditto
	* emul_chirp.c (chirp_emul_test) : Ditto
	* device_table.c (register_init): Ditto

Tue Jan  9 14:16:26 1996  Andrew Cagney  <cagney@highland.com.au>

	* configure.in: Make disable-sim-switch default.  Switch only
 	useful if using --enable-sim-opcode=ppc-opcode-stupid and then
 	only marginally so.

Mon Jan  8 12:17:22 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* device_table.c (register_init): Make format type correct.

Wed Jan  3 19:21:46 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_bugapi.c (emul_bugapi_create): Add nodes to init the
 	system-call trap to the emul instruction call instruction (Along
 	with an rfi and infinate loop).

	* emul_bugapi.c (emul_bugapi_instruction_call): Expand to include
 	a few real PPC bug calls.  Test with simple hello world.

Tue Jan  2 20:51:19 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* device.h, device.c (device_child, device_sibling): New
        functions.  Return corresponding device value.

	* emul_chirp.c (chirp_emul_child, chirp_emul_peer,
        chirp_emul_parent): New functions - emulate corresponding OpenBoot
        interfaces.

	* device_table.c (register_init): Extend properties attached to
        register init node to allow a specific processor's register to be
        specified.

	* emul_chirp.c (emul_chirp_create): Init SMP correctly - the
        initial PC for all processors is an infinate loop but then, for
        processor zero, is quickly changed to be the correct code starting
        address.

	* emul_chirp.c (emul_chirp_create): Add fake bootpath
        et.al. properties to tree.

	* emul_chirp.c (chirp_emul_getproplen): New function.  Emulate the
        getproplen OpenBoot call.

	* emul_chirp.c (emul_chirp_instruction_call): Document other
        possible chirp emulation internal states.

	* emul_chirp.c (emul_chirp_instruction_call): Trace failed lookups
 	as well as successful ones.
	
	* emul_chirp.c (emul_chirp_open): New function - handle open
        client call.

	* Makefile.in (maintainer-clean): Proper rule that eliminates more
        junk.

Tue Dec 19 13:00:11 1995  Andrew Cagney  <cagney@highland.com.au>

	* emul_chirp.c (chirp_emul_exit): Full out call.

	* device_table.c (htab_map_page): Wasn't handling byte swap when
	creating entries in the hash table.

	* device.c (device_tree_find_node): Allow primative wild-card match
 	of device names with the path.

	FIXME: As mentioned earlier, the device stuff needs work to bring
 	it into line with OpenBoot.  Part of this work is rewriting the
	find_node function so that it behaves as specified in p1275.

Mon Dec 18 19:58:56 1995  Andrew Cagney  <cagney@highland.com.au>

	* emul_chrp.c (chirp_emul_write, chirp_emul_finddevice): add
 	better tracing.

	* emul_chrp.c: Change return type of emul functions to int.  Emul
 	functions either return -1 or zero so unsigned was a bit
 	dangerous.
	
	* inline.h (*), igen.c, dgen.c, *: Update INLINE macros so that
        they are paramaterised with the type of the function.  Gets around
        the problem of `static' needing to come first with `attribute'
        comming last.  Format declarations and definitions so that emacs
	doesn't get confused.

Fri Dec 15 17:06:44 1995  Andrew Cagney  <cagney@highland.com.au>

	* std-config.h (PSIM_INLINE): Add missing inline configuration
 	control for the main loop.

	* mon.c (mon_print_info): If monitoring disabled still print out
 	the number seconds used.

	* psim.c (run_until_stop): Don't monitor the cache misses when
 	monitoring is disabled.

	* configure.in (sim_mon, sim_monitor): Correct typo - sim_mon ->
 	sim_monitor for shell variable (or should that have been the other
 	way around?).

	* vm.c (vm_synchronize_context): Fix wrong test for unsuported
 	change in endian-mode.
	
	* std-config.h (WITH_REGPARM), inline.h (IDECODE_INLINE,
	SEMANTICS_INLINE): Add -DWITH_REGPARM=<n> option.  Enables the
	__attribute__((__regparm(WITH_REGPARM))) for some functions.
	configure with --enable-sim-cflags="-DWITH_REGPARAM=3" (say).
	Unfortunatly it tickles a bug (gcc?) and can't be used.

Mon Dec 18 13:36:06 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* device.c (device_tree_add_device): Make trace fprintf arguments
	type correct.
	* device_table.c (htab_decode_hash_table): Ditto.
	(htab_map_binary): Ditto.
	(htab_init_callback): Ditto.
	* vm.c (om_virtual_to_real): Ditto.

Sat Dec 16 09:54:18 1995  Michael Meissner  <meissner@wogglebug.tiac.net>

	* emul_netbsd.c (emul_netbsd_create): Deal with new BFD that
	changed how big/little endian support is recorded, while remaining
	compatible with the old BFD with #ifdefs.
	* emul_chirp.c (emul_chirp_create): Ditto.
	* emul_bugapi.c (emul_bugapi_create): Ditto.

Fri Dec 15 15:55:56 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* std-config.h (MODEL_INLINE): Turn off INLINE_MODULE by default.

	* corefile.h: Delete declarations for unknown functions.
	* device.h: Ditto.
	* interrupts.h: Ditto.
	* interrupts.c: Ditto.

Thu Dec 14 18:49:34 1995  Andrew Cagney  <cagney@highland.com.au>

	* lf.c (lf_print_function_type): New function.  Munges a function
 	type so that the prefix (eg INLINE...) is inserted after the type
 	but before any `*'.

	* igen.c: Change to output functions using this.

Wed Dec 13 23:47:00 1995  Andrew Cagney   <cagney@highland.com.au>

	FIXME: Emul CHIRP does not correctly implement the find device
 	function.

	FIXME: Emul CHIRP and device do not implement device instance
 	operations.

Wed Dec 13 23:47:00 1995  Andrew Cagney   <cagney@highland.com.au>

	* options.c (options_inline): Function to output meaningful
        description of the INLINE options.

	* configure.in (inline): Replace inline magic numbers with macro
        names. Map 1->LOCALS_INLINE and 2->ALL_INLINE.

	* inline.h, inline.c: update to use inline method.

	* std-config.h (CPU_INLINE), cpu.h, inline.h, inline.c: make cpu.h
        inline always.

	* std-config.h (EVENTS_INLINE): Inline events in psim.

Wed Dec 13 22:01:21 1995  Andrew Cagney   <cagney@highland.com.au>

	* device_table.c (htab_sum_binary): DMA binaries to correct byte
        within a page.

Tue Dec 12 22:51:18 1995  Andrew Cagney   <cagney@highland.com.au>

	* psim.c (psim_merge_device_file): Change `=' to `==', was this an
        error?

Tue Dec  5 11:56:14 1995  Andrew Cagney  <cagney@highland.com.au>

	* ppc-instructions (ppc_nr_mtcrf_crs, ppc_branch_conditional_name,
 	ppc_function_unit_name): Simplify by declaring these arrays as
 	pure and simple static (instead of STATIC_MODEL).

Tue Dec  5 00:45:34 1995  Andrew Cagney  <cagney@highland.com.au>

	* sim_calls.c (sim_create, sim_load), main.c (main), psim.c: Pass
        an options device into psim_create() so that options can be merged
        into the tree.

	* device.c (*add*): Change semantics so the add functions only add
        when the new device (or property) doesn't already exist.  This
        allows merging of options and data.

Mon Dec  4 17:12:13 1995  Andrew Cagney  <cagney@highland.com.au>

	* Makefile.in (BASICS_H): Didn't include basics.h in the list of
        header files to depend on.

Mon Dec  4 17:12:13 1995  Andrew Cagney  <cagney@highland.com.au>

	* std-config.h: (*_MODULE): Extend the <module>_inline macro's so
        that they also allow control over static functions.  Rewrite
        document to reflect this.

	* std-config.h: (INLINE): Simplify definition, the above and
        earlier changes to igen.h eliminate the need to be defensive about
        enabling the inline of static functions.

	* std-config.h: (SIM_ENDIAN_INLINE, BITS_INLINE): Document limited
        suport for inlineing of modules for all callers.  Adjust relevant
        macro's so that DEFAULT_INLINE will enable this.

	* basics.h: Re-order #includes and definitions so that c-code for
        basic include files does not call functions delcared in later
        #includes.

	* basics.h (__attribute__), sim_callbacks.h: Move attribute macro
        to basics.h and add hack (include <stdio.h>) to try and bring that
        and other possible conflicting macros into scope much earler.

	* sim-endian.h,c (SIM_ENDIAN_INLINE) bits.h,c (BITS_INLINE):
        Change to use the updated inline definitions.  If enabled
        immediately include the corresponding c-code so that it will inline
        for all modules.

	* inline.h, inline.c (SIM_ENDIAN_INLINE, BITS_INLINE): Remove
        these cases, moved to module specific header files.

Sat Dec  2 18:37:51 1995  Andrew Cagney  <cagney@highland.com.au>

	* vm.c, vm_n.c: Fix htab code.

	* vm.c (vm_data_map_read_buffer): Was using EA not RA when reading
        the data from core.

	* device.c: Fix htab create code.

Fri Nov 24 23:10:09 1995  Andrew Cagney  <cagney@highland.com.au>

	* bits.h, bits.c (EXTRACTED): Convert to function, fix - had &&
        instead of &.

	* sim-endian.h (SWAP_N), sim-endian-n.h, sim-endian.c: How
        embarasing - fix yet another bug in the swap code!  Simplify
        everything by using more functions. Add host to big-endian byte
        swapping support.

Fri Nov 24 23:10:09 1995  Andrew Cagney  <cagney@highland.com.au>

	* devices.h, devices.c: delete, replaced by the files
        device_table.[ch] and device.[ch].
	* device_tree.h, device_tree.c: ditto

	* device_table.h, device_table.c: New files.  Contain a table of
        devices.

	* device.h, device.c, Makefile.in, std-config.h (DEVICE_INLINE),
        options.c (print_options): New files.  Define the device object
        along with any attached properties.

	* device_tree.h, device_tree.c: Update to use new device object.
        For convenience, change the printd functions into device_tree_add
        functions.

	* psim.c (create_*_tree): Use new device_tree create functions.

	* corefile.h, corefile.c corefile-n.h (core_n.h): Update to use
        the new device.h / device_table.h interface.  Rename core_n.h to
        corefile-n.h to be consistent with other n files.

	* Makefile.in (run): add corefile-n.h to dependencies for
        corefile.

	* basics.h (device_instance), device.h, device.c, device_table.h,
        device_table.c: Add the concept of a device instance and operators
        on these instances - corresponds to ihandle in OpenBoot speak.
        Don't yet implement it.

Tue Nov 14 12:27:08 1995  Andrew Cagney  <cagney@highland.com.au>

	* emul_generic.h, emul_generic.c (emul_syscall_enter,
 	emul_syscall_exit): rename from emul_enter_call /
 	emul_exit_call. As only used by emul_do_system_call simplify
 	associated code.

	* os_emul.h, os_emul.c, emul_generic.h: Correct and fill an
 	os_emul interface.

	* os_emul.c, emul_bugapi.h, emul_bugapi.c, Makefile.in: Add
 	preliminary hooks for a kernel mode rom emulation.
	
	* cap.h (new), cap.c (new): Capability data base.  Some emulations
 	pass object identifiers (capabilities?) to/from the simulated code
 	(for instance the phandle in OpenBoot).  The cap object is able to
 	check/map between internal and external (target program)
 	representations of each identifier.
	
	* os_emul.c, emul_chirp.h, emul_chirp.c, Makefile.in: Add
 	preliminary hooks for a kernel mode IEEE-1275 emulation.

	* cpu.h, cpu.c (cpu_create, cpu_os_emulation, cpu): Add os_emul to
 	list of arguments passed in when creating a cpu.  Grant access to
 	the element.

	* std-config.h (OS_EMUL_INLINE), options.c (print_options),
	inline.h, inline.c: New to allow control over inline of
	corresponding code files.

	* ppc-instructions (instruction_call): Add illegal instruction to
 	call the instruction-call emulation handler.
	
	* interrupts.c (system_call_interrupt): Call renamed
        os_emul_system_call function().

	* emul_netbsd.c: Update to interface to generic emulation.  Since
        all its functions are called via a table don't worry about any
        inline.

	* emul_generic.h, emul_generic.c, spa-*(delete): Remove references
        and code for spa, no longer to be used.

	* psim.c (create_chirp_device_tree): Fill out what was previously
        the openboot create function so that it starts to create a full
        OpenBoot device tree.

Tue Nov 28 21:48:06 1995  Andrew Cagney  <cagney@highland.com.au>

	* debug.h, debug.c: pte trace is made redundant by htab trace,
        delete it.  Add vm to list of options.  Simplify tracing output so
        lines are not as long.

Tue Nov 14 12:27:08 1995  Andrew Cagney  <cagney@highland.com.au>

	* events.h, events.c (event_queue_init), psim.c (psim_init): (re)
 	initialize the event queue.






Tue Nov 28 13:38:26 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* sim-endian.h: Look at WORDS_BIGENDIAN to determine if the host
	is big endian or little endian.  For SWAP_n, use htonl/htons if
	host is little endian, not big endian and if WITH_NTOH is defined.

	* configure{,.in} (--enable-sim-model-issue): Instead of defining
	0/1, define it to be MODEL_ISSUE_{PROCESS,IGNORE}.  Add
	AC_C_BIGENDIAN to determine if the host is big endian or not.
	* config.in: Regenerate.

	* std-config.h (WITH_MODEL_ISSUE): Default to 0.
	(CURRENT_MODEL_ISSUE): Reference WITH_MODEL_ISSUE, and if that is
	0, use current_model_issue.
	(MODEL_ISSUE_{PROCESS,IGNORE}): Define as -1/1.

	* psim.c (current_model_issue): New global variable.

	* cpu.c (cpu_create): Use CURRENT_MODEL_ISSUE > 0 instead of
	WITH_MODEL_ISSUE.
	(cpu_{init,halt}): Ditto.
	* mon.c (mon_print_info): Ditto.
	* ppc-instructions (PPC_INSN_* macros, branch handling): Ditto.

	* mon.c (mon_print_info): Print instructions/second if verbose > 0,
	rather than > 1.

	* main.c (main): Set current_model_issue to MODEL_ISSUE_PROCESS if
	the -I switch is used.
	* sim_calls (sim_open): Ditto.

	* ppc-instructions (model support): Add support for determining
	when we don't have enough writeback slots.  Add tracing for the
	beginning of each cycle.

Mon Nov 27 17:46:33 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* mon.c: Check for whether to include sys/types.h and sys/time.h.

	* configure.in: Check for include files sys/types.h and
	sys/time.h.
	* configure: Regenerate.
	* config.in: Regenerate.

	* cpu.h (CONST_ATTRIBUTE): Define as __attribute__((__const__)) if
	not already defined.
	(cpu_system): Use CONST_ATTRIBUTE, so that when we're not inlining
	the world, the optimizer has a fair chance of CSE'ing function
	calls.
	(cpu_{monitor,nr,registers,model}): Ditto.

	* std-config.h (MODEL_INLINE): If not defined, define as 1 if
	DEFAULT_INLINE is non-zero, 0 otherwise, rather than just the
	value of DEFAULT_INLINE.

Fri Nov 24 11:24:34 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* lf.h (__attribute__): If not GCC and at least 2.7.0, define as
	nothing.
 	(lf_printf): Add printf __attribute__, so the compiler will
	automatically check the format string.

	* configure{,.in} (--enable-sim-icache): If argument is define,
	add -R to flags passed to igen.

	* igen.c (stdlib.h): Include if the system supplies one.
	(semantics_use_cache_struct): New global for -R flag to say
	semantics is to use the cache structure directly rather than
	putting the values into local variables.
	(first_undef, last_undef): New structures to remember names to
	#undef if -R.
	(lf_print_c_extraction): If -R and this is semantics, emit names
	as #defines pointing to the cache structure, rather than loading
	the values into local variables.
	(lf_print_c_semantic_function): If -R, #undef all of the names
	defined in lf_print_c_extraction.
	(main): Recognize -R.

	* idecode_fields.h (SPR_*): Redefine spr_* macros as SPR_* to
	avoid a name confict if -R passed to igen.

	* ppc-instructions (mfspr, mtspr): Rename spr field to SPR.
	(model_data): Add field to count the various # of CRs that the
	mtcrf instruction used.
	(model_mon_info): Return structures counting the # of CRs that the
	mtcrf instruction used.
	(branches, sync instructions): Do not call model functions if
	WITH_MODEL_ISSUE is 0.

	* mon.c (stdlib.h): Include if the system supplies one.
 	(mon_sort_instruction_names): New function to sort instruction
	names alphabetically.
	(mon_print_info): Call qsort with mon_sort_instruction_names to
	sort instruction names.  Don't abort if WITH_MODEL_ISSUE is 0.
	
	* debug.h (ITRACE): Make printf_filtered arguments type correct.
	* idecode_expression.h (CR0_COMPARE): Ditto.
	* psim.c (psim_read_register): Ditto.

	* igen.c (lf_print_my_prefix): Use __attribute__((__unused__)) to
	silence compiler warnings about unused automatically generated
	variables.
	(lf_print_c_extraction): Ditto.
	* idecode_expression.h (FPSCR_BEGIN): Ditto.

	* ppc-cache-rules: Define rules for making a bitmask for all
	registers.

	* ppc-instructions: Rewrite model specific functions to use the
	bitmask of the register number, instead of using the register
	pointer to get the register number, and then making the bitmask.

Wed Nov 22 15:24:27 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppc-instructions (model_branches): Add conditional argument to
	count the number of times each type of conditional branch is used.
	(conditional branches): Pass B0 or -1 to model_branches.
	(model_mon_info): Print out conditional branch counts.
	(model-data): Add support for printing out conditional branch
	types.

Tue Nov 21 16:31:25 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* igen.c (insn_table_load_insns): Add support for model-static for
	internal functions that should not be inlined.
	(lf_print_c_semantic): Remove model_cleanup.
	(gen_model_{c,h}): Ditto.

	* ppc-instructions: Redo model specific support once again.  Add
	floating point support to the model specific information.  Flesh
	out all of the floating mutiply add/subtract instructions.  Add
	better tracing support to the model specific information.

Sun Nov 19 23:00:52 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppc-instructions (model data, model_busy): Rather than using a
	bit mask for the busy units, just use a char array.  Also, only
	support 2 function units an insn can use, rather than a loop.

Fri Nov 17 14:08:08 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* table.c (table_entry_read): Move setting entry->line_nr to after
	the model specific fields so the line numbers for the annex are
	correct.

	* cpu.c (cpu_{create,init,halt}): Check for WITH_MODEL_ISSUE
	before calling the model functions.

	* debug.c (trace_descriptor): Add trace_model support.
	* debug.h (trace_options): Ditto.

	* igen.c (gen_icache_h): Create type idecode_cache as void if not
	caching instructions.
	(gen_model_{c,h}): Drop model_issue support.  Add support for
	model_cleanup.
	(lf_print_my_prefix): Initialize a const itable_index with the
	current index.
	(lf_print_c_semantic): Call model_cleanup at the end of the
	function to check for instructions that aren't supported yet by
	the scheduling code.
	
	* mon.h (count_type): New type for counters.
	* mon.c: Use count_type instead of unsigned.

	* ppc-instructions: Redo scheduling code once again.  Make it all
	inline friendly.  Instead of having general code emitted by igen,
	go the route of having each semantic routine call the appropriate
	module.

Thu Nov 16 09:52:26 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* table.c (table_entry_read): Allow the annex to have blank lines.

	* ppc-instructions: Change lines in model stuff that just have a
	tab to just newline.  Add 601 support.  Document most instructions
	in terms of model specific timing information.  Drop 'FUNCTION'
	from PPC_FUNCTION_UNIT_xxx enums.  Change PPC_UNIT_UNKNOWN ->
	PPC_UNIT_BAD.  Add TRACE(trace_tbd) for all data cache
	instruction.s.  Signal illegal instruciton if data cache block
	invalidate is issued from problem state.

	* igen.c (max_model_fields_len): New static to keep track of the
	max size for the model specific fields.
	(model_c_insn): Use max_model_fields_len to size fields.
	(insn_table_insert_insn): Set max_model_fields_len.
	(model_table_insert): Ditto.
	(gen_model_{c,h}): Model_issue is now called with a processor
	argument.

	* debug.c (trace_description): Add support for trace_tbd.

	* mon.c (mon_issue): Pass processor argument to model_issue.

	* Makefile.in: Delete all function unit support, since the newer
	table driven model support replaces it.
	* cpu.{c,h}: Ditto.
	* mon.c: Ditto.
	* inline.{c,h}: Ditto.
	* std-config.h: Ditto.
	* options.c: Ditto.
	* configure{,.in}: Ditto.
	* Makefile.in: Ditto.
	* psim.c: Ditto.
	* function_unit.{c,h}: Delete these now usused files.

	* std-config.h (WITH_MODEL_ISSUE): Add new macro on whether to
	trace instructions in a model specific manor.
	* options.c (print_options): Print it out.
	* configure{,.in}: Add --enable-sim-model-issue option.
	* Makefile.in: Add --enable-sim-model-issue flags.
	* igen.c (lf_print_c_semantic): Add call to mon_issue here.  Check
	for WITH_MODEL_ISSUE.
	* mon.c (mon_issue): Remove call to mon_issue_here.

	* ppc-instructions: Move branch tracing to the actual branch
	instructions, rather than testing it in model_issue.  Add code to
	code successful/unsuccessful branch predictions, and the number of
	conditional branches that fell through.

Wed Nov 15 17:32:13 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* cpu.h (cpu_model): Add declaration.

	* cpu.c (struct _cpu): Add model_ptr to hold model specific
	information.
	(cpu_model): Return the model internal pointer.
	(cpu_{create,init,halt}): Call the appropriate model function.

	* inline.c (mon.c): Move include of mon.c after model.c.

	* mon.c (_cpu_mon): Add fields to count unaligned memory
	references.
	(mon_issue): Call model_issue, not function_unit_issue.
	(mon_{read,write}): Count # of unaligned memory accesses.
	(mon_print_info): Switch to calling model_mon_info and
	model_mon_info_free instead of function_unit version.  Print out
	number of unaligned reads/writes.

	* {ppc-instructions,igen.c}: More global changes to add model
	specific features.

	* inline.{c,h}: Provide for inlining options.c.
	* options.{c,h}: Ditto.
	* std-config.h: Add OPTIONS_INLINE.

Tue Nov 14 04:47:25 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (devices.o, main.o): Update dependency.

	* igen.c (gen_model_h): Use correct variable in loop.
	(gen_model_c): Use strcmp, strcasecmp.
	(gen_model_c): Use EXTERN_MODEL for arrays.
	(gen_model_h): Use STATIC_MODEL for arrays.
	(lf_print_c_semantic_function_header): Delete unused function.

	* main.c (cpu.h): Include cpu.h to get model.h.

	* inline.h ({EXTERN,STATIC}_MODEL): Define.

Mon Nov 13 09:14:13 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* igen.c ({insn,model}_table_fields): Spell mnemonic correctly.
	(gen_itable_h,itable_c_insn): Ditto.
	(model support): Move model support around, add support for
	model-data, model-internal.  Use annex field for model-macros
	now.

	* configure.in (--enable-sim-inline): If --enable-sim-inline=no,
	also define INLINE as nothing.
	* configure: Regenerate.

	* std-config.h (INLINE): Rather than nuking INLINE, only define it
	as __inline__ if any of the INLINE flags are non-zero.

	* options.c (print_options): Print out WITH_XOR_ENDAIN.

Mon Nov 13 23:03:45 1995  Andrew Cagney   <cagneyhighland.com.au>

	* ppc-instructions (rfi): Add missing code.

	* cpu.c (cpu_get_time_base): Fix calculation of current value of
        time base register.

	* ppc-spr-table (TBL, TBU): Fix TBL/TBU entries - was confusing
        m[tf]tb with m[tf]spr.

	* ppc-instructions (mtspr, mfspr): Fix mttbl - wasn't storing
        lower word.

Mon Nov 13 21:35:37 1995  Andrew Cagney   <cagneyhighland.com.au>

	* std-config.h (INLINE, STATIC_INLINE): Was being set to static
        inline..  Only problem being that with ppc-opcode-simple this gave
        it the chance to inline all the idecode functions with potentially
        disasterous results on a 16mb PC.  For moment hobble INLINE.

	* configure.in, std-config.h (WITH_SMP): Make that 5 processors by
        default ...

	* configure.in: Tweek flags passed to gcc for --with-sim-warnings.
        Firstly make them errors and secondly remove the options gcc-245
        doesn't reconize.

Mon Nov 13 17:57:24 1995  Andrew Cagney  <cagney@highland.com.au>

	* misc.c (zalloc), cpu.c (cpu_init), devices
 	(console_io_read_buffer_callback, icu_io_read_buffer_callback,
 	vm_io_read_buffer_callback), main.c (zalloc), mon.c (memset),
 	sim_calls.c (zalloc) : replace bzero() with memset().

	* emul_netbsd.c (write_direntries), psim.c (psim_read_register,
 	psim_write_register): replace bcopy() with memcpy().
	
Sun Nov 12 20:55:41 1995  Andrew Cagney   <cagneyhighland.com.au>

	* configure.in: for --disable-sim-inline (--enable-sim-inline=no),
        force DEFAULT_INLINE to 0 rather then trusting the std
        configuration.

Sun Nov 12 20:55:41 1995  Andrew Cagney   <cagneyhighland.com.au>

	* igen.c (lf_print_idecode_table, idecode_table_leaf): Fix
        generation of switch entries in tables - treat the same as
        cracking/semantic functions.

	* igen.c (idecode_switch_end, idecode_switch_leaf): Fix generation
        of a boolean switch statement (field zero or non-zero).

	* ppc-opcode-test-1, ppc-opcode-test-2: New files.  These test the
        switch/table generation ability of igen.

	* igen.c (idecode_switch_leaf): Fix code output when a switch
        statement needs to look up a table.

	* igen.c (idecode_declare_if_switch): New function called from
        gen_idecode_c - need to declare any idecode switch functions
        before they are used in idecode tables.

	* igen.c (lf_print_c_cracker_function, idecode_crack_leaf,
        idecode_crack_insn): Add is_inline_function argument to code
        printing cracker functions which indicates if STATIC_IDECODE or
        STATIC_INLINE_IDECODE should be used for definition.  For
        idecode_crack_insn (which implies not duplicating/expanding) don't
        declare function as inline - we assume that the only time this is
        code is generated is when things are being tested.  For
        idecode_crack_leaf, make static (instead of INLINE) if the
        instructions parent is a table as function will always be called
        via a table.

	* igen.c (idecode_expand_if_switch): Declare as STATIC_IDECODE not
        STATIC_INLINE_IDECODE. Only the outermost idecode switch will be
        called directly, all others are called via a table.

	* igen.c (lf_print_semantic_function_header, semantics_h_leaf,
        semantics_h_insn, semantics_h_function,
        lf_print_c_semantic_function, semantics_c_function): Add
        is_inline_function argument to lf_print_semantic_function_header
        to indicate if an inline or static function declaration/definition
        should be output.  Depending on situtation call accordingly:
        functions (not instruction semantic routines) are always inline;
        Semantic routines are made inline when there is no icache (cache
        will contain the function address) and are duplicating (see above)
        and the parent of the instruction is a switch statement.

	* igen.c (opcode_field_new): Delete.  Code changed to use ZALLOC
        and moved to insn_table_find_opcode_field.

	* table.c (table_open): Fix typo (nr_model_fields vs nr_fields).

	* igen.c (model_c_insn): Suggestion - document the name of the
        instruction on each line of the instruction model table.

Fri Nov 10 00:44:38 1995  Andrew Cagney   <cagneyhighland.com.au>

	* emul_netbsd.c (do_ioctl): Cleanup compilation.

	* sim_callbacks.h (__attribute__): Only define if not defined (was
        already defined on NetBSD host).

Wed Nov  8 21:49:52 1995  Andrew Cagney   <cagneyhighland.com.au>

	* std-config.h (WITH_XOR_ENDIAN), configure.in, Makefile.in: New
        macro, indicates if the PowerPC's horrible XOR endian mode should
        be suported.  Add to configure and make.

	* vm_n.h (vm_data_map_read_N, vm_data_map_write_N), vm.c
        (vm_instruction_map_read): If XOR endian, xor the address
	with a value from an xor table (indexed by size of access).

	* vm.c (vm_synchronize_context), cpu.c (cpu_synchronize_context):
        set up xor table to xor if there is a conflict between the
        CURRENT_TARGET_ENDIAN and the endian indicated in the MSR.  Move
        check of suported change of endian mode from cpu.c to vm.c.

	* vm.c (vm_data_map_write_buffer, vm_data_map_read_buffer):
        Hopefully added correct hack to handle XOR endian mode.

	FIXME: If NONSTRICT alignment and XOR ENDIAN and MSR indicates
        little endian mode, the model accepts miss aligned transfers.

	FIXME: Need to create an `init' device that, during
        initializatioin for XOR mode, it mushes (XOR address) all the dma
        data before passing it on to the core for storage. Just like the
        real thing really.

Wed Nov  8 21:49:52 1995  Andrew Cagney   <cagneyhighland.com.au>

	* devices.c (halt_io_write_buffer_callback): Use value written to
        halt device to determine exit status.  Thus allowing
        success/failure of OEA tests.

Wed Nov  8 00:10:38 1995  Andrew Cagney   <cagneyhighland.com.au>

	* ppc-instructions (icbi): If icache present flush it.

Tue Nov  7 23:36:31 1995  Andrew Cagney   <cagneyhighland.com.au>

	* devices.c (htab_init_callback): Add code to create htab/pte.

	* devices.c (dma_file, file_init_callback, htab_init_callback):
        New function - Dma the named file into memory at the specified
        address.  Use.

	* device_tree.h, device_tree.c (scand_*): New functions.

Tue Nov  7 23:36:31 1995  Andrew Cagney   <cagneyhighland.com.au>

	* filter_filename.c, Makefile.in: Change so that only dependant on
        a very limited nr of files.  Stops an unnecessary dependency.

Tue Nov  7 15:44:33 1995  Andrew Cagney  <cagney@highland.com.au>

	* core.c (core_map_find_mapping): Use cpu_halt rather than error
 	to abort an access to an undefined address.

Sun Nov 12 07:58:09 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* igen.c (model_table_insert_{macro,function}): New functions.
	(insn_table_load_insns): Call them.
	(gen_model_h): Move section emiting model-macros to be first.
	(model_{c,h}_function): New functions cloned from semantic
	functions to print out the prototype and function for
	model-functions.
	(gen_model_{c,h}): Print out model-functions.

	* ppc-instructions (model_{start,halt,print_info}): Add dummy
	model-functions.

	* options.c (print_options): Print out WITH_{,DEFAULT_}MODEL, not
	WITH_PPC_{,DEFAULT_}_MODEL.
	(options_ppc): Delete now unused function.
	(cpu.h): Include cpu.h, not just basics.h.

	* std-config.h (WITH_{,DEFAULT_}MODEL): Define.

	* igen.c (model_macros, last_model_macro): New statics to keep
	track of macros to go in model.h.
	(insn_table_load_insns): Add model-macros to model_macros linked
	list.
	(model_table_fields): Add field for printable name.
	(gen_model_h): If there are model macros defined, print them out.
	Print out DEFAULT_MODEL as the first model if there any models
	specified, otherwise MODEL_NONE.  Print out external decl for
	current_model.  Print out decl for model_set.
	(gen_model_c): Add function model_set.  Switch to use printable
	name for the model, not the internal identifier used.

	* psim.c (current_model): New global variable.

	* ppc-instructions: Add macros for flag defines.  Switch first
	model so 604 is first.

	* main.c (main): Call model_set, not function_unit_model.
	* sim_calls.c (sim_open): Ditto.
	* sim_calls.c, Makefile.in: sim_calls.c now includes cpu.h.

Sat Nov 11 07:27:41 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* mon.h (mon_events): New enumeration for other events we want to
	handle.
	(mon_event): Add declaration for function.

	* mon.c (mon_event): New function.
	(mon_print_info): Print icache misses.

	* psim.c (run_until_stop): Monitor icache misses.

	* configure.in (--enable-sim-inline): Fix typos in handling comma
	separated inline options.
	(--enable-sim-icache): Echo icache size.
	* configure: Regenerate.

	* igen.c (semantics_h_print_function): Emit STATIC_SEMANTICS
	instead of INLINE_SEMANTICS so that the compiler won't keep all of
	the semantic functions as inline RTL, given that the address of
	the function is taken which forces outline calls anyway.
	(lf_print_c_semantic_function_header): Ditto.
	(gen_semantics_h): Define STATIC_SEMANTICS as nothing if not
	defined.
	(lf_print_c_cracker_function): Emit STATIC_IDECODE instead of
	STATIC_INLINE_IDECODE.
	(gen_idecode_c): Define STATIC_IDECODE if not defined.
	(gen_model_h): Use #ifdefs to define types to hold model units,
	cycles, and flags.
	(model_table_insert): Add a sentinel functional unit at the end to
	simplify loop processing.
	(model_c_insn): Use <function-unit>_SENTINAL instead of 0 for any
	instruction not specifing a function unit for the current model.
	(gen_model_{c,h}): Provide bounds for model_time_mapping.
	
	* inline.h (STATIC_SEMANTICS): Define to be static if
	SEMANTICS_INLINE is defined.
	(STATIC_IDECODE): Define to be static if IDECODE_INLINE is
	defined.
	
	* options.c (print_options): Fix typo.

Fri Nov 10 06:39:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (--enable-sim-{opcode,config}): Use $srcdir when
	check for the existence of files.
	* configure: Regenerate.

	* table.c (table): New field nr_model_fields.
	(table_open): New parameter nr_model_fields.
	(table_entry_read): Parse model fields that begin with a '*' after
	each instruction.
	* igen.c, dgen.c: Change callers of table_open.

	* igen.c: Add support for dumping model specific information in
	model.h and model.c.
	(insn_field_name): Delete unused array.
	(global variables): Make global variables static, so we can tell
	when they are no longer used.
	(cache_semantic_actual): Delete unused variable.
	(insn_table_load_insns): If the insn is really a machine model,
	call model_table_insert instead of other processing.
	(model_table_insert): New function to handle defining the
	functional units of a particular machine model.
	(insn_table): Add last_function field so we can add functions at
	the end.
	(insn_table_insert_function): Use last_function field when
	appending new function.

	* ppc-instructions: Add a few model specific information for 603,
	603e, and 604 for testing purposes.
	
	* table.h (table_model_entry): New linked list to hold model
	specific information, one per line.
	(table_entry): Add model_first, model_last fields.

	* configure.in (--enable-sim-inline): If gcc is found and
	--enable-sim-inline is not specified, defaine DEFAULT_INLINE to 1,
	not 2.
	(--enable-sim-reserved-bits): New switch to check whether reserved
	bits are set in the instruction.
	(--enable-sim-opcode): Make complex the default.
	(all switches): Add appropriate checks and error messages.
	* configure: Regenerate.

	* Makefile.in (RESERVED_CFLAGS): New variable set by
	--enable-sim-reserved-bits.
	(CONFIG_CFLAGS): Include RESERVED_CFLAGS.
	(BUILT_SRC): igen now generates model.c and model.h.
	(LIB_OBJ): Include table.o.
	(tmp-igen): Add -m/-M options to write model.c/model.h.
	(model.o): New object.
	(CPU_H): Include model.h.

	* cpu.h: Include model.h.

	* std-config.h (WITH_RESERVED_BITS): Define.
	(MODEL_INLINE): Ditto.

	* options.c (print_options): Print out WITH_RESERVED_BITS.

Thu Nov  9 12:22:15 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: If --silent, don't output information messages.
	* configure: Regenerate.

	* configure.in (--enable-sim-alignment): Fix typo in specifing non
	strict alignment.
	(--enable-sim-switch): Make default on.
	(--enable-sim-duplicate): Make default on.
	(--enable-sim-smp): Make default 0.
	(--enable-sim-mon): Don't set sim_float if not set.
	(--enable-sim-inline): If gcc is found and --enable-sim-inline is
	not specified, define DEFAULT_INLINE to be 2.
	(all --enable-sim-* rules): Echo rules set to non empty to file
	descriptor 6.
	* configure: Regenerate.

	* options.c (options_env): Fix typo if WITH_ENV is 0.
	(print_options): Print GCC compiler version if available and
	date/time options was compiled.  If OPCODE_RULES, IGEN_FLAGS,
	and/or DGEN_FLAGS are defined, print them.

	* Makefile.in (all link actions): Pass SIM_CFLAGS as well as
	CFLAGS.
	(options.o): Compile options.o with OPCODE_RULES, IGEN_FLAGS, and
	DGEN_FLAGS defined, so they can be printed out.

	* igen.c (lf_print_c_validate): Check for WITH_ASSERT, so that
	this test can be compiled away if the user really wants a fast
	simulator by not doing assertion failures.

Wed Nov  8 13:19:47 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* options.c: New file to print out all of the WITH_ options.
	* options.h: New include file to declare print_options.
	* debug.h (trace_options): Add trace_opts to call print_options.
	* debug.c (trace_description): Add trace_opts support.
	* main.c (main): If user requested options, print them.
	* sim_calls.c (sim_open): Ditto.
	
	* igen.c (opcode_field_new): Add void to make it a proper prototype.

	* emul_generic.c (emul_enter_call): Make printf_filtered arguments
	type correct.
	* emul_netbsd.c (do_kill): Ditto.
	* registers.c (registers_dump): Ditto.
	* vm.c (om_translate_effective_to_real): Ditto.
	* vm_n.h (vm_data_map_read_N): Ditto.
	(vm_data_map_write_N): Ditto.
	* devices.h (DTRACE_INIT): Ditto.
	(DTRACE_{ATTACH,DETACH}_ADDRESS): Ditto.
	(DTRACE_IO_{READ,WRITE}_BUFFER): Ditto.
	(DTRACE_DMA_{READ,WRITE}_BUFFER): Ditto.
	* devices.c (update_for_binary_section): Ditto.
	(write_stack_arguments): Ditto.
	(stack_ioctl_callback): Ditto.
	* device_tree.c (device_tree_add_passthrough): Ditto.
	(device_tree_{add,find}_device): Ditto.
	(device_tree_{add,find}_integer): Ditto.
	(device_tree_find_{string,boolean}): Ditto.
	(device_tree_init{,_device}): Ditto.
	(device_tree_dump): Ditto.
	* sim_calls.c (sim_{read,write}): Ditto.
	(sim_{fetch,store}_register): Ditto.
	(sim_stop_reason): Ditto.

	* sim_callbacks.h (printf_filtered): Declare with attribute
	printf, so we can enable format checks.

	* devices.c (console_io_{read,write}_buffer_callback): Cast swtich
	argument to int, since ANSI doesn't allow long switch values.
	* emul_netbsd.c (do___sysctl): Ditto.

	* emul_netbsd.c (do___sysctl): Fix up printf call.
	
	* corefile.c (core_translate): Don't do arithmetic with void *
	pointers.  Cast to char * first.
	
	* function_unit.c (FUNC_{LOAD,STORE}): Rename from {LOAD,STORE}
	and change all uses.

	* Makefile.in ({FUNC,MODEL,WARNING}_CFLAGS): New flags set by
	configure --enable switches.
	(CONFIG_CFLAGS): Include FUNC_CFLAGS and MODE_CFLAGS.
	(.c.o): Include WARNING_CFLAGS.
	(CPU_H): Include function_unit.h.
	(LIB_OBJ): Include function_unit.o.
	(BUILT_SRC_WO_CONFIG): Split from BUILT_SRC and do not include
	config.h or ppc-config.h.
	(BUILT_SRC): Include BUILT_SRC_WO_CONFIG, config.h and
	ppc-config.h.
	(filter_filename.o): Include config.h/ppc-config.h dependencies.
	(idecode.o, semantics.o, psim.o): Specify CC line without
	WARNING_CFLAGS so that we don't get all of the unused variable
	warnings that are generated.
	(function_unit.o): Add rule to build.
	(main.o, sim_calls.o): Add function_unit.h, itable.h dependencies.
	(mon.o): Include mon.c dependency.
	(TAGS): Depend on BUILT_SRC.
	(clean): Don't delete config.h or ppc-config.h

	* basics.h (sim_callbacks.h): Move include after the include of
	config.h and ppc-config.h.

	* bits.{h,c} (ROTL32,ROTL64): Move these functions to bits.c.  Add
	support for BITS_INLINE to inline these.  Add declarations to
	bits.h.

	* configure.in (--enable-sim-warnings): Add new option to specify
	compiler warnings for all modules except idecode.o and semantics.o
	which have lots of unused variables because they are machine
	generated.
	(--enable-sim-function-unit): New switch to configure whether
	function unit support is compiled in or not.
	(--enable-sim-{,default-}mode): New switches to control which cpu
	model is used.
	* configure: Regenerate.

	* corefile.c (core_attach_address_callback): Delete unused
	variable device_address.

	* cpu.c (struct _cpu): Add function unit pointer field func_unit.
	(cpu_create): If WITH_FUNCTION_UNIT, call function_unit_create.
	(cpu_init): If WITH_FUNCTION_UNIT, call function_unit_init.
	(cpu_halt): If WITH_FUNCTION_UNIT, call function_unit_halt.
	(cpu_function_unit): New function to return func_unit field.

	* cpu.h (function_unit.h): Include new include file.
	(cpu_function_unit): Declare.

	* debug.c (stdlib.h): Test HAVE_STDLIB_H, not HAVE_STDLIB.
	(config.h): Include config.h.

	* devices.c (icu_io_write_buffer_callback): Delete unused variable
	system.

	* emul_generic.c (emul_exit_call): Print out status value.

	* emul_netbsd.c (do_read): Delete unused variable nr_moved.

	* filter_filename.h (includes): Include config.h, ppc-config.h,
	not basics.h.

	* inline.c: Include bits.c if BITS_INLINE.  Include
	function_unit.c if FUNCTION_UNIT_INLINE.

	* inline.h (INLINE_BITS): Define if BITS_INLINE.
	(INLINE_FUNCTION_UNIT): Define if FUNCTION_UNIT_INLINE.

	* interrupts.c (instruction_storage_interrupt): Delete unused
	variable nia.

	* lf.h (config.h): Include config.h.

	* main.c (includes): Include function_unit.c.  If HAVE_UNISTD_H,
	include unistd.h.
	(usage): Update for -m model, -i, and -I options.
	(main): Delete unused variables stack_pointer and i.  Add support
	for -i, -m model arguments.  Call psim_print_info with verbose ==
	1 if -i, and verbose == 2 if -I.

	* mon.c (stdio.h): Include stdio.h to pick up sprintf prototype.
	(mon_issue): Call function_unit_issue if function units are
	supported.
	(mon_print_info): Take psim * argument.  Print out information
	from function_unit if available.  Move read/write stats to always
	print, instead of printing if verbose > 1.  Fix up plural
	vs. singular usage.

	* mon.h (mon_print_info): Update prototype.

	* psim.c (current_ppc_model): Add global variable.
	(psim_print_info): Pass system argument to mon_print_info.

	* sim_calls.c (function_unit.h): Include.
	(sim_open): Add support for -i and -m model options.  If -i call
	psim_print_info with verbose == 1, if -I, with verbose == 2.
	(sim_resume): Delete unused variable program_counter.

	* std-config.h (WITH_FUNCTION_UNIT): Define.
	(ppc_model): Add enumeration giving all PowerPC models currently
	known about.
	({WITH,CURRENT}_PPC_MODEL): Define.
	(FUNCTION_UNIT_INLINE): Define.

	* table.c (config.h): Include config.h.

	* vm.c (om_virtual_to_real): Print pte_word_{0,1} so the compiler
	doesn't complain that they're unused.

	* vm_n.h (vm_data_map_read_N): Delete unused variable rval.
	
Mon Nov  6 23:15:54 1995  Andrew Cagney  <cagney@highland.com.au>

	* sim-endian.c (ppc-endian.c), sim-endian.h (ppc-endian.h):
        renameed.  These files are target independant.
	* Makefile.in, basics.h: update for new name.

	* sim-endian.h (SWAP_N), sim-endian.c (_SWAP_1): Rename existing
        SWAP_<N> to _SWAP_<N> so that sim-endian.h can contain SWAP_N
        macro's as required.

	* sim-endian.c, sim-endian-n.h (new file): Move endian code into a
        debugable header file.

	* ppc-instructions (Byte-Reverse): Enable byte reverse
        instructions using SWAP_N macros.

Mon Nov  6 10:39:28 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (config.status): Remove references to config.make
	and config.hdr.

	* config.{make,hdr}: Delete, no longer used.
	* build-psim: Ditto.

Mon Nov  6 20:49:56 1995  Andrew Cagney  <cagney@highland.com.au>

	* sim_calls.c (sim_open): Fix parsing of `target sim' options.

	* device_tree.c (device_tree_add_string): Wasn't saving the value
 	of the string being entered into the tree.

	* psim.c (create_filed_device_tree): Not terminating string device
 	names with a null.
	
	* psim.c (psim_create): Use `env' instead of
 	`environment-architecture' to be consistent with configure.
  	Reconize user/uea, virtual/vea and operating/oea.

Sat Nov  4 12:29:45 1995  Fred Fish  <fnf@cygnus.com>

	* core.c:  Rename to corefile.c
	* core.h:  Rename to corefile.h
	* inline.c: Include corefile.h, renamed from core.h.
	* cpu.h: Include corefile.h, renamed from core.h
	* vm.c: Include corefile.h, renamed from core.h
	* corefile.c: Include corefile.h rather than core.h
	* README.psim (KNOWN PROBLEMS): Change core.* references to corefile.*
	references.
	* Makefile.in (CPU_H): Change core.h to corefile.h
	(vm.o):  Change dependency to corefile.h
	(LIB_SRC): Change core.c to corefile.c.
	(LIB_OBJ): Change core.o to corefile.o.
	(corefile.o):  Change dependencies to corefile.c, corefile.h.

Fri Nov  3 11:37:24 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppc-instructions (data cache instructions): Make all data cache
	instructions nops instead of invalid instructions.

	* Makefile.in (CONFIG_CFLAGS): Add ALIGNMENT_CFLAGS and
	TIMEBASE_CFLAGS which weren't included.

Thu Nov  2 08:54:04 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in: Uncomment built file dependencies.
	
	* configure.in: Rewrite --enable-sim switch handling to use the
	autoconf builtins so it works correctly if the configure or
	Makefile.in files are modified and make decides to rebuild
	Makefile.  Also document all of the --enable-sim switches
	supported.  Check whether getrusage and sys/resource.h are
	supported.
	* config.in: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Add support for all of the variables set with
	--enable-sim switches.

	* Makefile.in (clean): make clean now removes all built sources as
	well.
	
	* cpu.c: Use HAVE_STRING_H, HAVE_STRINGS_H, HAVE_UNISTD_H,
	HAVE_TIME_H, HAVE_SYS_TIMES_H, HAVE_SYS_RESOURCE_H defined in
	the generated config.h.
	* debug.c: Ditto.
	* device_tree.c: Ditto.
	* devices.c: Ditto.
	* dgen.c: Ditto.
	* emul_netbsd.c: Ditto.
	* igen.c: Ditto.
	* lf.c: Ditto.
	* misc.c: Ditto.
	* psim.c: Ditto.
	* registers.c: Ditto.
	* sim_calls.c: Ditt.
	* table.c: Ditto.


	* main.c (main): Call psim_print_info with verbose == 2.

	* mon.c (mon_print_info): Align the cpu number and number of
	instructions fields.  Do not print an instruction category if the
	CPU did not execute any of those instructions.  Print out number
	of reads and writes.  If getrusage is supported, print out number
	of simulated instructins per second.
	
	* configure.in: Add support for --enable-sim-opcode=stupid.
	* configure: Regenerate.

Wed Nov  1 23:46:59 1995  Andrew Cagney   <cagney@highland.com.au>

	* std-config (INLINE_DEVICE_TREE): Don't inline either of
        device_tree.c or devices.c.  There is no significant gain.

	* configure.in, Makefile.in: add --enable-sim-icache=[0-9]* and
 	IGEN_ICACHE macro.
	
Wed Nov  1 23:46:59 1995  Andrew Cagney   <cagney@highland.com.au>

	* igen.c (main), misc.h (target_a2i, i2target), misc.c: Add
        functions to convert between target and igen internal bit numbers.
        Make IO go through these functions. Add -b (bit size) and -h (high
        bit nr) options to igen.  Typical usage would be: ./igen -b 16 -h
        15 for a 16 bit instruction format with the msb given a number 15.

Wed Nov  1 22:17:32 1995  Andrew Cagney   <cagney@highland.com.au>

	* dgen.c (main): Was outputting optarg even when it was NULL.

Tue Oct 31 23:48:33 1995  Andrew Cagney   <cagney@highland.com.au>

	* vm_n.h (vm_data_map_load_N, vm_data_map_store_n), debug.h,
        debug.c: Add tracing of load/store unit (virtual) with -t
        load-store.

Tue Oct 31 21:44:01 1995  Andrew Cagney   <cagney@highland.com.au>

        * std-config.h (WITH_ENVIRONMENT): Add USER_ENVIRONMENT which does
        not include things such as the time base and events.

	* interrupt.c, sim_calls.c, cpu.h, vm.c, configure.in: Add UEA to
 	all environment switches for above.

	* psim.c (psim_create): ditto - new device tree node name is
        /options/environment-architecture with values user, virtual and
        operating.

Tue Oct 31 21:31:32 1995  Andrew Cagney   <cagney@highland.com.au>

	* ppc-opcode-stupid: Third example of use of opcode table - this
        one expands all mtspr/mfspr and branch instructions.  Appears to
        give about a 10% gain in performance if everything enabled.  Also
        takes about 150mb of swap to build.

Wed Nov  1 10:49:48 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_netbsd.c (do_exit): Print arguments and close parenthesis
	if tracing, since exit doesn't go through emul_exit_call.
	(do_read): Print arguments if tracing.
	(do_write): Ditto.
	(do_open): Ditto.
	(do_break): Ditto.
	(do_kill): Ditto.
	(do_dup): Ditto.
	(do_sigprocmask): Replace trace with printing arguments if
	tracing.
	(do_ioctl): Print arguments if tracing.
	(do_umask): Ditto.
	(do_dup2): Ditto.
	(do_fcntl): Ditto.
	(do_gettimeofday): Ditto.
	(do_getrusage): Ditto.
	(do_fstatfs): Ditto.

	* filter_filename.c: New file to provide filter_filename to strip
	the directory prefix from a file.
	* filter_filename.h: New include file to declare filter_filename.

	* debug.h: Include filter_filename.h.
	(TRACE,DTRACE,ERROR): Use filter_filename on __FILE__.

	* misc.h: Include filter_filename.h.
 	(ASSERT): Use filter_filename on __FILE__.

	* igen.c (lf_print_my_prefix): Use filter_filename on the filename
	argument.

	* Makefile.in: Add filter_filename support.

	* ppc-instructions (dcbi, icbi): Make these NOPs rather than
	invalid instructions.

	* configure.in: Add support for more --enable-sim-* switches.
	Use config.make and config.hdr to write to Makefile and config.h
	respectively.  Don't rewrite Makefile, just append to it.
	* configure: Regenerate.
	* config.{make,hdr}: New shell scripts.
	
	* Makefile.in: Remove all variables set by configure.in.
	(psim.o): Depend on $(BUILT_SRC) also.

	* emul_netbsd.c (do_gettimeofday,do_getrusage): When comparing an
	integer, use 0, not NULL.

Tue Oct 31 15:20:04 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add support for --enable-sim-inline,
	--enable-sim-bswap, --enable-sim-cflags, --enable-sim-complex,
	--enable-sim-switch, --enable-sim-duplicate, --enable-sim-filter,
	and --enable-sim-endian switch to control various Makefile
	variables.
	* configure: Regenerate from configure.in.
	* Makefile.in: Add various Make variables that the various
	switches alter.

	* std-config.h (DEFAULT_INLINE): Don't set this to 2 if using GCC
	and optimizing by default.

Fri Oct 27 19:26:27 1995  Andrew Cagney  <cagney@highland.com.au>

	* bits.h (ROTL32, ROTL64): Were functions, made them macros, now
 	make them functions again.  Appears 2.6.3 is confused by just a
 	macro.

Thu Oct 26 18:31:58 1995  Andrew Cagney  <cagney@highland.com.au>

	* ppc-endian.c (SWAP_8): Fix 8 byte swap!

	* psim.c (psim_create): Not correctly checking that runtime
 	configuration of things like ENDIAN, ENVIRONMENT and ALIGNMENT
 	matched the compiled in ones.

	* debug.h (ITRACE), igen.c: Tidy up more tracing flags -
 	trace_semantics is now different to trace_idecode, the former
 	checks the cache.
	
Tue Oct 24 21:54:13 1995  Andrew Cagney  <cagney@highland.com.au>

	* ppc-instructions (mtsrin): Missing instruction
	* ppc-instructions (mfsrin): Missing instruction
	* ppc-instructions (eieio): Missing instruction

Tue Oct 24 20:55:29 1995  Andrew Cagney  <cagney@highland.com.au>

	* build-psim: New shell script - see internals for usage,
 	simplifies the process of building custom simulators.

Mon Oct 23 23:48:59 1995  Andrew Cagney  <cagney@highland.com.au>

	* std-config.h (SEMANTICS_INLINE): Tidy up notes on each of the
        INLINE macros.  Make SEMANTICS_INLINE == 1 if DEFAULT_INLINE == 2.
        Don't use DEFAULT_INLINE to define REGISTERS_INLINE DEVICES_INLINE
        DEVICE_TREE_INLINE or INTERRUPTS_INLINE as none of these are on
        the instruction or data critical paths.
  	
	* FIXME: devices.c/emul_netbsd.c would benefit (slightly) from
 	the inclusion of device_tree.c/emul_generic.c.

Mon Oct 23 00:31:50 1995  Andrew Cagney  <cagney@highland.com.au>

	* os_emul.[hc], emul_generic.[hc], emul_netbsd.[hc]: replace
        system.[hc].  Start of suport for multiple emulations and
        emulation state (os_emul object).

	* emul_generic.[hc]: Start of code to implement proper system call
	tracing (from spy).

Sun Oct 22 21:33:51 1995  Andrew Cagney  <cagney@highland.com.au>

	* cpu.h, cpu.c (cpu_init): New function, zero the registers before
        the processor is started. Fixes problem of registers being
        undefined when restarting from within gdb.

	* cpu.h, cpu.c (cpu_flush_icache): New function, flushes the
        instruction cache (if present).  Fixes problem of cpu caching gdb
        breakpoint instructions.

	FIXME: PSIM sometimes aborts calling error(), it should instead
 	call sim_error() say which takes care of housekeeping such as
 	saving the CIA before calling error.
	
	* NOTE: cpu_flush_cache() instead of cpu_synchronize_context() is
 	used when restarting a simulation because the latter has the
 	unwanted side effect (well I as a kernel hacker think it is) of
 	performing an isync when the instruction stream doesn't contain
 	one.

Sun Oct 22 19:27:48 1995  Andrew Cagney  <cagney@highland.com.au>

	* mon.h (new), mon.c (new), std-config.h (WITH_MON): Performance
        monitoring module. Counts both instructions issued and
        load/stores.

	* NOTE: mon does not contain to count instruction loads as this
 	information is already available from the mon_issue() hook.

	* igen.c (lf_print_c_semantic), vm_n.h: Add counting code.

	* psim.h, psim.c (psim_create), cpu.h, cpu.c (cpu_create): Attach
        a common monitor to each of the cpus. Delete
        cpu_increment_number_of_insns() and cpu_get_number_of_insns()
        replaced by copied code in mon.[hc].

Sun Oct 22 18:42:45 1995  Andrew Cagney  <cagney@highland.com.au>

	* sim_calls.c, main.c, psim.c (psim_create): always create
        `WITH_SMP' cpus.  The actual number of CPU's active in a
        simulation run is taken from the device node: /init/smp (an
        integer). WITH_SMP changed to 2 (remember to put it back to 0).

Fri Oct 20 17:26:54 1995  Andrew Cagney  <cagney@highland.com.au>

	* system.c: More system call emulation.  If code appears NetBSD
 	specific, make conditional to being compiled on a NetBSD system
 	(sigh).

Wed Oct 18 23:02:20 1995  Andrew Cagney  <cagney@highland.com.au>
	
	* Makefile.in, gen.c(delete), igen.c(new), dgen.c(new),
 	lf.[ch](new), table.[ch](new): Split into two generators - igen
 	that outputs the instruction tables and dgen that outputs the spr
 	tables.  Add -f (filter out) flag to igen to filter out certain
 	instructions (ex 64 bit ones) from the created tables.  Include
 	$(LIBIBERTY_LIB) in link options in case host lacks some libc
 	functions.

	* NOTE: igen, since it was originally written for the
 	PowerPC/RS6000, things the MSB is 0 and the LSB is 63{31}.
	
	* Makefile.in, std-config.h, ppc-cache-rules(new),
 	ppc-opcode-complex(new), ppc-opcode-simple(new): (for igen) Create
 	cache-rule and opcode-rule tables from macros found std-config.h.
 	Delete corresponding macro's from std-config.h.
  	
	* igen.c (gen_itable_c, gen_itable_h), Makefile.in: code to output
 	an table of all the instructions.  Code to output a type
 	enumerating all the instructin names.

	* igen.c(lf_print_c_semantic): Move call to increment instruction
 	counter so that it occures _after_ the instruction has been fully
 	validated, was double counting illegal/invalid instructions.  Add
 	conditional so only compiled in when WITH_PROFILE enabled (enabled
 	by default).
	
	* igen.c, cpu.h, cpu.c(cpu_increment_number_of_insns): Include
 	itable.h, count individual instruction types not just total,
 	adjust reporting functions to output this.
	
	* ppc-instructions (64 bit Load Doubleword with Update Indexed):
 	Had 32./ instead of 31./

	* ppc-instructions (64 bit Store Double Word Conditional Indexed):
 	bitrot - updated to use newer CR register operators.

	* ppc-instructions (64bit Floating Convert from Integer
 	Doubleword): Correct call to Round_Float().

Mon Oct 16 00:31:20 1995  Andrew Cagney  <cagney@highland.com.au>

	* basics.h: #include "sim_callbacks.h" earlier so that its
 	prototypes are declared in all other header files.

	* bits.h, bits.c, idecode_expression.h (ROTL32, ROTL64): Update
 	doc in bits.h, remove dead code in bits.c, move ROTL32/ROTL64 into
 	bits.h.

	* cpu.c(cpu_add_commas), device_tree.h, device_tree.c(scand_*):
 	Add size of buffer argument to functions writing a string into a
 	buffer.  Check for buffer overflow.
	
Sun Oct 15 22:16:11 1995  Andrew Cagney  <cagney@highland.com.au>

	* devices.h, devices.c, debug.h, debug.c: add macro's for tracing
        of each device.  Make parameter names consistent so macros work.
        Use macro's in device functions.

	* device_tree.c, devices.h, devices.c: include path to device in a
        devices node when creating it.

	* device_tree.c, debug.h, debug.c: Add tracing of `device-tree'.

	* core.c: add tracing of core-device, adjust parameter names in
 	core functions to be consistent with those in devices*.

Sun Oct 15 20:33:20 1995  Andrew Cagney  <cagney@highland.com.au>

        * debug.h, debug.c (trace_option): New function. Parses the trace
        option, updating the trace array.

	* debug.h, debug.c (trace_usage): New function. Outputs the list
        of all possible trace options.

	* sim_calls.c (sim_open), main.c (main): Use new trace_option() to
 	parse trace options specified with the simpler -t flag.  Adjust
 	usage.

	* FIXME: basic parsing of command line options is still duplicated
 	by main.c and sim_calls.c

Thu Oct 26 10:42:28 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (clean): Delete *.i and *.out files.

	* ppc-endian.c (SWAP_n): Add SET argument to allow use of SWAP
	macros for either assignment or return.  Fix SWAP_8 to use a
	union, and two SWAP_4's.  Delete SWAP_N, since nobody uses it now.
	(ENDIAN_N): Add SET argument to SWAP_n calls.  Delete macro defs
	that hardwired swapping on/off, let optimizer delete dead code.

	* main.c (main): Add printf that we caught a signal and print out
	the failing address.

Thu Oct 19 21:43:39 1995  Fred Fish  <fnf@fishfood.amigalib.com>

	* Makefile.in:  Remove tabs from otherwise empty line.
	Confuses many non-GNU versions of "make".

Wed Oct 18 08:51:25 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (clean): Delete files produced by gen.

Mon Oct 16 17:34:24 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* gen.c (lf_print_c_semantic_function): Move counting # of
	instructions here so it works with caching.
	(gen_idecode_c): Move from here.

Wed Oct 11 17:13:15 1995  Andrew Cagney  <cagney@highland.com.au>

	* gen.c, ppc-instructions, psim.c: Fix code for generating
	cracking instruction cache.  Delete the code that cached just the
	result from doing an instruction lookup - this ran slower than no
	cache at all.

Fri Oct 13 09:58:43 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (gen.o): Include $(INLINE_CFLAGS).

	* debug.h (ppc_trace): Rename from trace, to avoid a conflict with
	TCL when gdb is linked with the simulator.
	* debug.c (ppc_trace): Ditto.
	* sim_calls.c (sim_open): Change trace -> ppc_trace.
	* main.c (main): Ditto.

	* cpu.c (cpu_add_commas): Remove extra static.

Thu Oct 12 11:35:53 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (psim.o): Now that inlines are turned on, make
	psim.o depend on all sources.

	* cpu.c (cpu_add_commas): New function to format a long with
	commas.
	(cpu_print_info): Use it to print number_of_insns.
	
	* ppc-endian.c (SWAP_n): New macros to speed up byte swapping for
	2, 4, and 8 bytes.
	(ENDIAN_N): If both target and host byte orders are known, don't
	bother testing CURRENT_{TARGET,HOST}_BYTE_ORDER.

	* ppc-endian.h (target specific H2T_n/T2H_n macros): Remove #if 0
	to allow target specific H2T_n/T2H_n macros to be used.
	(htonl, ntohl): If compiled on a 486 by GCC and WITH_BSWAP is
	non-zero, redefine the htonl/ntohl macros to use the BSWAP instead
	of the 3 instruction sequence that runs on 386s.

	* std-config.h (WITH_{HOST,TARGET}_BYTE_ORDER): Don't override if
	specified on the compile line.
	(WITH_BSWAP): If not defined, define as 0.

	* Makefile.in (INLINE_CFLAGS): Add -DDEFAULT_INLINE=2 to add
	default inline support.  Pass INLINE_CFLAGS when compiling.

	* devices.{h,c} (unimp_device_ioctl): Use STATIC_DEVICES, not
	INLINE_DEVICES since GCC doesn't like inline functions that
	accept variable arguments.
	(stack_ioctl_callback): Make function just static because GCC
	doesn't like inline functions that accept variable arguments.

	* devices.h (STATIC_DEVICES): Define as empty if not defined.

	* inline.c: Correct pathnames of included C files to match current
	implementation.

	* inline.h (STATIC_DEVICES): If DEVICES_INLINE is defined to be
	non-zero, define STATIC_DEVICES to be static.

	* std-config.h (INLINE): If GNU C and optimizing, define this as
	__inline__.
	(DEFAULT_INLINE): If not defined, define as 0.
	(ENDIAN_INLINE): If not defined, define as DEFAULT_INLINE.
	({CORE,VM,CPU,EVENTS,REGISTERS,INTERRUPTS}_INLINE): Ditto.
	({SPREG,IDECODE}_INLINE): Ditto.	
	
Wed Oct 11 17:13:15 1995  Andrew Cagney  <cagney@highland.com.au>

        * ppc-instructions: Initial cut of floating point suport added.
  	Of note include - use of host IEEE floating point instructions,
 	use of PowerPC manual pseudo code to handle the FPSCR.  It is not
 	currently a pretty sight.
	
	* memory_map.h, memory_map.c, memory_map_n.h, core.h, core.c:
 	merge into core.h, core.c, core_n.h. The type memory_map replaced
 	with core_map.  This removes a level of pointer indirection when
 	translating an address.

	* memory_map.h, memory_map.c, memory_map_n.h: delete.

	* Makefile.in et.al (sorry): tweek to use new core, core_map and
 	core.h.
	
Wed Oct 11 12:10:26 1995  Andrew Cagney  <cagney@highland.com.au>

	* sim_calls.c, main.c: Add -g (trace_gdb) option, add tracing to
 	most of the other functions in sim_calls.c.

	* basics.h (CONCAT3), memory_map.c, memory_map_n.h, Makefile.in:
 	Add macros to better cover up `generic' code.  Makes it possible
 	to step through the generic code!

	* vm.c, vm_n.h, Makefile.in: ditto
	
Tue Oct 10 15:42:59 1995  Andrew Cagney  <cagney@highland.com.au>

	* devices.h, devices.c, memory_map.h, memory_map.c: Changed
 	callback interface so that there is a read/write buffer but no
 	read/write_word.  VEA default memory read/write handler sometimes
 	couldn't resolve an access and of those some were for a memory
 	fault and some were because gdb was making a bogus request.

	* devices.h, devices.c, memory_map.h, memory_map.c, vm.h, vm.c:
 	eliminate transfer_mode (raw or cooked) parameter from read/write
 	buffer.
	
Fri Oct  6 20:23:56 1995  Andrew Cagney  <cagney@highland.com.au>

	* ppc-instructions (fmul, fmuls): correct instruction format - had
 	FRB instead of FRC.

Wed Oct  4 17:31:12 1995  Andrew Cagney  <cagney@highland.com.au>

	* psim.c, device_tree.h, device_tree.c, devices.c (printd_*,
 	scand_*): new functions to parse/print fields in device names
 	while hiding any machine dependency.

	* devices.c, psim.c: Change the stack init code so that it is
 	handled by a device.  Arguments passed across using a device ioctl
 	(hack).

	* devices.h, devices.c: device ioctl callback changed to allow a
 	variable number of arguments.  This gives greater flexability and
 	greater chance of bugs.

Tue Oct  3 22:01:56 1995  Andrew Cagney  <cagney@highland.com.au>

	* main.c (printf_filtered, error): Missing va_end() to close off
        variable argument use.

	* Makefile.in (tmp-gencode): comment out hack to get around some
        versions of make not handling files being created as side-effects.

	* gen.c (lf_open): Add -n (real_file_name) option.  Specifies an
        alternative file name to use in output files for things like #line
        macros.

        Makefile.in (tmp-gencode): Use gen -n so that debug info is
        correct.

	* Makefile.in (TARGETLIB): Use this instead of libsim.a in the
	Makefile.

Sat Oct  7 22:40:59 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* sim_calls.c (sim_set_callbacks): Define new function.

Fri Oct  6 17:23:10 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* psim.c (psim_print_info): Print exit status or signal number.

Mon Oct  2 11:46:37 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* cpu.c (struct _cpu): Add number_of_insns field to trace how many
	instructions are executed.
	(cpu_increment_number_of_insns): New function to increment the
	number of instructions issued.
	(cpu_get_number_of_insns): New function to return the number of
	instructions issued.
	(cpu_print_info): New function to print cpu related information.
	At present, print the number of instructions executed.

	* gen_idecode_c: Emit call to cpu_increment_number_of_insns within
	idecode_issue.

	* psim.c (psim_print_info): New function to iterate over each of
	the CPU's calling cpu_print_info.
	
	* psim.h,cpu.h: Add new declarations.

	* sim_calls.c (sim_open): Add argument processing to add the same
	switches main.c accepts for the standalone processor.
	(sim_close): Call psim_print_info if -I.

	* main.c (main): Add comment saying to update sim_calls.c when
	adding switches.  Add -I to call psim_print_info when done.
	(usage): Update usage message.

Sun Oct  1 13:52:59 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* main.c (printf_filtered): Correct to match new prototype.

Sat Sep 30 20:47:05 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* sim_callbacks.h (printf_filtered): Correct prototype.

Thu Sep 21 16:26:49 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* device_tree.c (OEA_MEMORY_SIZE): Define if not defined to
	0x100000.
	(clayton_memory_size): Define as OEA_MEMORY_SIZE.

	* std-config.h (WITH_TRACE): Default to 1 now.

	* psim.c (write_stack_arguments): Don't write any stack arguments
	if OEA.

	* main.c (main): Switch to using getopt.  Make -p also set
	trace_semantics.  Make -a turn on all trace flags.  Make -C turn
	on console tracing.

	* device_tree.c (create_option_device_node): Assume a program is
	OEA if the start address is < 4096, not just == 0.

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

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

Sun Sep 10 10:23:56 1995  Michael Tiemann  <tiemann@axon.cygnus.com>

	* registers.c (register_description): Add gdb synonyms for cr
	(cnd) and msr (ps).

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

	* Makefile.in (install): Don't install in $(tooldir).

	* configure.in: Call AC_CONFIG_HEADER.  Don't try to use
	bfd/hosts/*.h file or bfd/config/*.mh file.  Call AC_PROG_CC and
	AC_PROG_RANLIB.  Substitute in values for CFLAGS, HDEFINES, AR,
	and CC_FOR_BUILD.  Call AC_CHECK_HEADERS for various header files.
	Touch stamp.h if creating config.h.
	* configure: Rebuild.
	* config.in: New file, created by autoheader.
	* Makefile.in (AR): Define as @AR@.
	(CC): New variable, defined as @CC@.
	(CFLAGS): Define as @CFLAGS@.
	(CC_FOR_BUILD): New variable, defined as @CC_FOR_BUILD@.
	(RANLIB): Define as @RANLIB@.
	(HDEFINES, TDEFINES): New variables.
	(@host_makefile_frag@): Remove.
	(mostlyclean): Make the same as clean, not distclean.
	(clean): Remove config.log.
	(distclean): Remove config.h and stamp-h.
	(Makefile): Don't depend upon @frags@.  Just rebuild Makefile when
	invoking config.status.
	(config.h, stamp-h): New targets.
	(gen, gen.o): Build with CC_FOR_BUILD, not CC.
	(ppc-config.h): Rename from old config.h build.
	* (basics.h,gen.c,ppc-endian.c,psim.c): Include ppc-config.h.
	
Fri Sep  8 09:51:03 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure{,.in}: Don't include sysdep.h from bfd, since bfd no
	longer provides it.
	* basics.h (sysdep.h): Don't include it.
	* Makefile.in (BASICS_H): Remove sysdep.h.

Wed Sep  6 13:25:42 1995  Andrew Cagney  <cagney@highland.com.au>
 
 	* core.c (core_add_data): First growth of bss was being put at
        wrong address (0) instead of &end.
 
 	* core.c (core_add_stack, core_add_data): Was not handling case
        where bss/stack is grown across the current end-of-{bss,stack}.

Wed Sep  6 00:46:10 1995  Andrew Cagney  <cagney@highland.com.au>

	* system.c (system_call): Fix SYS_break - was aligning bss to a
        page boundary instead of just an 8 byte one; On first call sbrk(0)
        != sbrk(0).

Thu Aug 24 14:48:54 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (install): Fix install rule.

Tue Aug 22 09:31:18 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* system.c (system_call): Add read support.

	* main.c (main): -t sets trace_device_tree.  Correct usage message
	to current reality.

	* device_tree.c (update_memory_node_for_section): Make tracing
	output line up.  If not code or readonly, assume that the section
	is a data section and has read/write permissions.  Add readonly
	support.

	* core.c (create_core_from_addresses): Print end address in traces
	and make tracing output line up.

	* Makefile.in: Rewrite from Makefile to work with the Cygnus
	environment, and support compiling in a different directory than
	the sources reside in.

	* ppc-endian.h: Rename from endian.h so that it doesn't get
	confused with /usr/include/sys/endian.h on Linux.  Add Linux
	endian support.

	* ppc-endian.c: Rename to be consistant with ppc-endian.h.
	Include ppc-endian.h, not endian.h.

	* basics.h (sysdep.h): Include sysdep.h that configure makes.
	Include ppc-endian.h, not endian.h.

	* std-config.h: Rename from ppc-config.  Put #ifndefs around most
	configuration macros, so they can be overridden via CFLAGS.  By
	default, turn off tracing.

	* configure.in: Clone from other simulator targets.
	* configure: Generate via autoconf from configure.in.

Sat Aug 19 09:05:32 1995  Andrew Cagney  <cagney@highland.com.au>

	* ppc-instructions: fix srawi (was geting XER[CA] real wrong).

	* interrupts.c (data_storage_interrupt): allow stack to grow by
        upto one MB per increment.

	* ppc-instructions: divw was computing rA / rA not rA / rB

	* main.c (main): really stupid. Wasn't exiting with correct status

Fri Aug 18 00:38:01 1995  Andrew Cagney  <cagney@highland.com.au>

	* system.c (system_call): add system calls kill(2) and getpid(2).

	* main.c (main): Check/return exit status when simulation
        finishes.

Thu Aug 17 14:29:18 1995  Andrew Cagney  <cagney@highland.com.au>

	* device_tree.c (create_option_device_node): Alignment rules (at
 	least for the moment) now are for strict alignment only for LE OEA
 	mode.  (Because of compiler problems).

	* system.c (system_call) SYS_exit: Wasn't exiting with correct status.

Thu Aug 17 01:16:38 1995  Andrew Cagney  <cagney@highland.com.au>

	* vm.c (DEFINE_VM_DATA_MAP_WRITE_N): For miss aligned transfer
        forgot to return.

	* system.c (system_call): didn't page align break argument before
        determining increment break increment.

	* psim/ppc: Re-arange entire directory structure so that
        everything lives in the one directory.  While a pain for cleaning,
        makes building across multiple architectures much simpler.

	* devices.c, device_tree.c: Added code that provides a simple
        illustration of how an interrupt control device could be
        implemented.

	* devices.c: Added code so that the dumb console device can read
        (from stdin) as well as write to stdout.

