Sun Jun 06 20:52:27 2010  Matthew Fredette  <fredette@alum.mit.edu>

	* Release 0.8 out.

Sat Jun 05 19:56:37 2010  Matt Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* configure.in: Bumped version to 0.8. 

	* ic/ncr5380.c: Changed or cast various tme_bus_addr_t to
	tme_bus_addr32_t.  In struct tme_ncr5380, store an actual TLB entry
	instead of a pointer to an allocated entry. 
	(_tme_ncr5380_bus_tlb_fill): Replaced the call to tme_bus_tlb_back()
	with a plain structure copy. 
	(_tme_ncr5380_connection_make_bus): Call tme_bus_device_tlb_set_add()
	to add the TLB entry to the connection. 

	* ic/ncr53c9x.c: Changed or cast various tme_bus_addr_t to
	tme_bus_addr32_t.  In struct tme_ncr53c9x, store an actual TLB entry
	instead of a pointer to an allocated entry.  Added
	tme_ncr53c9x_detected_scsi_reset. 
	(_tme_ncr53c9x_update): When SCSI RST is first detected, issue a SCSI
	reset interrupt if it hasn't been disabled.  In
	TME_NCR53C9X_CMD_RESET_BUS, no longer signal a SCSI reset interrupt. 
	This will be done when the SCSI RST is detected. 
	(_tme_ncr53c9x_callout): Fixed bugs where we wouldn't always wrap the
	FIFO head and tail. 
	Replaced the call to tme_bus_tlb_back() with a plain structure copy. 
	When a SCSI DMA cycle is transferring out to the SCSI bus, only
	initially clear the SCSI DMA buffer if DMA is not running - if DMA is
	running, and the data FIFO is empty, and the TLB entry doesn't support
	fast reading, the code that sets up a transfer into the data FIFO
	needs to know how much space is available in the data FIFO starting at
	the tail, until the end of the data FIFO.  Also call
	_tme_ncr53c9x_fifo_data_update() to update the Current FIFO register. 
	(_tme_ncr53c9x_connection_make_bus): Call tme_bus_device_tlb_set_add()
	to add the TLB entry to the connection. 

	* ic/z8530.c (_tme_z8530_rr2_update): Now take the single RR3
	interrupt bit, or zero, to use for the modified interrupt vector in
	RR2. 
	(_tme_z8530_int_pending): Now call _tme_z8530_rr2_update() to update
	the modified interrupt vector in RR2. 
	(_tme_z8530_intack): Fixed a bug where we would accept an interrupt
	acknowledge even if the IEI pin was tied low.  Get the vector directly
	from the channel B RR2. 
	(_tme_z8530_bus_cycle): In TME_Z8530_WR0_CMD_RESET_IUS, no longer call
	_tme_z8530_rr2_update().  The eventual interrupt check for
	TME_Z8530_CALLOUT_INT will update RR2. 

	* ic/sparc/sparc-fpu.c (tme_sparc_fpu_exception_check): On sparc64,
	when the exception is not an ieee754 exception, use the
	fp_exception_other trap. 

	* ic/sparc/sparc-impl.h [_TME_SPARC_STATS] [TME_HAVE_RECODE]: Track
	the number of recode source hash misses. 
	Declare tme_sparc32_recode_insn_current() and
	tme_sparc64_recode_insn_current(). 
	[!_TME_SPARC_RECODE_VERIFY] tme_sparc_recode_verify_reg_tick_now():
	Silence a possible known-nonzero warning. 

	* ic/sparc/sparc-insns-auto.sh: Fixed some comments. 

	* ic/sparc/sparc-misc.c (_tme_sparc_runlength): Added. 
	(_tme_sparc_command): Added the run-length and prom-delay-factor
	commands. 
	(tme_sparc_new): Removed the prom-delay-factor option.  Now call
	_tme_sparc_runlength() to set the initial run length. 
	(tme_sparc32_external_check): 32-bit SPARCs default to no interrupt
	acknowledge cycle. 
	(tme_sparc_itlb_current): Fixed pointer arithmetic bugs in the
	no-recode case. 

	* ic/sparc/sparc-rc-insns.c: TME_SPARC_RECODE_INSN_LD and
	TME_SPARC_RECODE_INSN_ST instructions no longer update the instruction
	register.  mulscc only needs the simplest assist. 
	(tme_sparc_recode_insn_current): Added. 
	(tme_sparc_recode_insn_assist_redispatch): Added a comment about the
	PC we check.  Rewritten to prepare for future additional redispatch
	conditions. 
	(_tme_sparc_recode_insn_assist_full): Fixed a bug where we wouldn't
	use TME_SPARC_G0_OFFSET(ic) to find the %g0 to zero. 
	(_tme_sparc_recode_recode): Fixed bugs in checking the immediate ASI
	of a v9 ld*a instruction for the default unrestricted ASI with the
	right endianness. 
	Fixed a bug where we would test for the branch target being near or
	far after we had possibly updated the displacement.  Fixed various
	other bugs in testing control transfer targets for near or far. 
	If the second source operand is an immediate zero, make a
	TME_RECODE_OPERAND_ZERO instead of a TME_RECODE_OPERAND_IMM. 

	* ic/sparc/sparc-rc-ls.c (_tme_sparc_recode_ls_assist_check): Get the
	instruction from ic->_tme_sparc_insn, since the instruction register
	isn't updated for assisted loads and stores. 
	(_tme_sparc_recode_ls_assist_ld): Use tme_sparc_recode_insn_current()
	to get the instruction, and check that the instruction is a load. 
	Decode rd from the current instruction, in case it's not the original
	recoded instruction.  Zero %g0, in case the load changed it.  Do any
	required redispatch after we assisted a nonoriginal load instruction
	(or a load instruction that otherwise requires a redispatch). 
	(_tme_sparc_recode_ls_assist_st): Use tme_sparc_recode_insn_current()
	to get the instruction, and check that the instruction is a store. 

	* ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_begin): When
	verifying is being turned on, return immediately after calling
	tme_sparc_recode_invalidate_all(), since it will leave the current
	instructions thunk unrunnable.  Remember the current instruction TLB
	token. 
	(tme_sparc_recode_verify_end): Unbusy any current instruction TLB
	token used by the normal execution.  Before the replay begins,
	validate the replay instruction TLB entry When the replay ends, unbusy
	and invalidate the current instruction TLB token. 
	Added more structure members to ignore.  Before returning to normal
	post instructions thunk handling, rebusy any current instruction TLB
	entry. 
	(_tme_sparc_recode_verify_init): Initialize the replay TLB tokens as
	invalid. 

	* ic/sparc/sparc-recode.c (TME_SPARC_RECODE_RW_THUNK_INDEX): Added
	missing parentheses around all of the sparc64 load/store features. 
	(tme_sparc_recode): Count recode source hash misses. 
	(tme_sparc_recode_init): Mark the temporary registers as temporary. 
	Increase the size of the thunks memory. 

	* ic/sparc/stp103x.c (_tme_stp103x_rdasr):
	(_tme_stp103x_wrasr): Don't return the result of a function that
	returns void. 
	(_tme_stp103x_ls_address_map_phys): Fixed a bug where we wouldn't map
	a bypass ASI as usable by nonprivileged code. 
	(_tme_stp103x_ls_address_map): Fixeds where we wouldn't map an address
	when the MMU is disabled, or when the mapping is unprivileged, as
	usable by both nonprivileged and privileged code. 
	(_tme_stp103x_ls_asi_tlb_data_access): Catch an atomic access to a TLB
	data access register.  Invalidate any sparc TLB entries when a stp103x
	TLB entry is written. 
	(_tme_stp103x_tick_compare_th): Now use tme_gettimeofday(). 

	* ic/stp22xx/stp220x.c:
	* ic/stp22xx/stp222x-iommu.c:
	* ic/stp22xx/stp222x-mdu.c:
	* ic/stp22xx/stp222x-stc.c: Silence some unused value warnings. 

	* libtme/misc.c (_tme_misc_number_parse): Fixed a bug where simple
	conversion failure wouldn't return an error. 
	(tme_misc_cycles_per_ms): Don't sleep while getting the cycle counter
	rate, because the cycle counter may run at a different rate when we're
	sleeping than when we're running. 

	* libtme/module.c: Undefine lt_preloaded_symbols, in an attempt to be
	forward-compatible with newer libltdls than our libtool knows about. 

	* libtme/recode-impl.h: Declare tme_recode_regs_src_notify(). 

	* libtme/recode-regs.c (_tme_recode_regs_src_load):
	(tme_recode_regs_src_specific): Check that a reserved host register
	doesn't have a guest temporary register.  After loading a guest
	temporary register, forget that it's in the host register. 
	(tme_recode_regs_src_notify): Added. 

	* libtme/threads-sjlj.c: Renamed _tme_sjlj_gtk_yield() to
	tme_sjlj_threads_gtk_yield(). 

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_rw): Call
	tme_recode_regs_src_notify() to notify about a possible temporary
	register operand for the address, before calling
	tme_recode_regs_host_clean_all(). 

	* libtme/host/x86/rc-x86-rws.c (_tme_recode_x86_rw_tlb_ref): Removed. 
	(tme_recode_host_rw_thunk_new): Now use the generic support for recode
	reads and writes, and the x86 generic TLB support. 

	* machine/sun/sun-cgsix.c (_tme_suncg6_bus_cycle_alt): Fixed a bug
	where we wouldn't complete the cycle. 
	(tme_sun_cgsix): Added parentheses to silence a paranoid gcc warning
	about programmer operator precedence mistakes. 

	* machine/sun/sun-cgtwo.c: Changed or cast various tme_bus_addr_t to
	tme_bus_addr32_t.  Now track tokens from TLB entries instead of TLB
	entries. 

	* machine/sun/sun-fb.c (tme_sunfb_bus_cycle_transition) [NDEBUG]:
	Catch cycle handlers that don't complete the cycle. 

	* machine/sun/sun-obie.c (TME_SUN_OBIE_CSR_GET):
	(TME_SUN_OBIE_CSR_PUT): Rewritten to avoid a pointer cast, to silence
	strict aliasing warnings. 
	(_tme_sun_obie_tlb_set_allocate): Removed. 
	(_tme_sun_obie_tlb_set_add): Added. 
	(_tme_sun_obie_connections_new): Provide _tme_sun_obie_tlb_set_add()
	instead of _tme_sun_obie_tlb_set_allocate(). 

	* machine/sun/sun-si.c: Changed or cast various tme_bus_addr_t to
	tme_bus_addr32_t.  Now track tokens from TLB entries instead of TLB
	entries. 
	(_tme_sun_si_tlb_set_allocate): Removed. 
	(_tme_sun_si_tlb_set_add): Added. 
	(_tme_sun_si_connections_new): Provide _tme_sun_si_tlb_set_add()
	instead of _tme_sun_si_tlb_set_allocate(). 

	* machine/sun4/SUN4-75: Bumped the default idle-type for more recent
	NetBSD. 

	* machine/sun4/sun44c-memerr.c (_tme_sun44c_memerr_cycle_control):
	(_tme_sun44c_memerr_cycle_bus): Changes to remove aliasing. 

	* machine/sun4u/SUN-ULTRA-1: Bumped the revision of the ledma to 2. 
	Moved sd0 to id 0. 

	* tme/memory.h (tme_memory_barrier) [TME_THREADS_COOPERATIVE]: Silence
	a possible known-nonzero warning. 

	* tme/threads.h: Declare tme_sjlj_threads_gtk_yield(), and make a
	tme_threads_gtk_yield alias. 

	* tme/token.h (_tme_token_busy_change) [TME_THREADS_COOPERATIVE &&
	defined(TME_NO_DEBUG_LOCKS)]: Silenced a possible known-unzero
	warning. 

	* tme/ic/sparc.h: Define TME_SPARC64_ASI_MASK_USER and
	TME_SPARC64_ASI_MASK_PRIV. 

Sat Jun 05 14:54:10 2010  Matt Fredette  <fredette@alum.mit.edu>

	* configure.in: Added a linux x86/mmap recode target.  Fixed a bug in
	defining TME_HAVE_RECODE. 

	* bus/multibus/3c400.c (TME_3C400_CSR_GET):
	(TME_3C400_CSR_PUT): Rewritten to avoid a pointer cast, to silence
	strict aliasing warnings. 

	* bus/multibus/sun-mie.c (_tme_sun_mie_bus_cycle_regs): Switched to
	invalidating tokens from TLB entries. 
	(_tme_sun_mie_tlb_set_allocate): Removed. 
	(_tme_sun_mie_tlb_set_add): Added. 
	(_tme_sun_mie_tlb_fill): Truncate the address to 32 bits.  Switched to
	tracking tokens from TLB entries. 
	(_tme_sun_mie_tlb_fill_regs): Truncate the address to 32 bits. 
	(_tme_sun_mie_connections_new): Provide _tme_sun_mie_tlb_set_add()
	instead of _tme_sun_mie_tlb_set_allocate(). 

	* bus/multibus/sun-sc.c: In struct tme_sun_sc, store an actual TLB
	entry instead of a pointer to an allocated entry. 
	(_tme_sun_sc_bus_cycle_dma): Now take a tme_bus_addr32_t instead of a
	tme_bus_addr_t. 
	(_tme_sun_sc_callout): Replaced some tme_bus_addr_t with
	tme_bus_addr32_t.  Replaced the call to tme_bus_tlb_back() with a
	plain structure copy. 
	(_tme_sun_sc_tlb_fill): Truncate the address to 32 bits. 
	(_tme_sun_sc_connection_make_bus): Call tme_bus_device_tlb_set_add()
	to add the TLB entry to the connection. 

	* generic/keyboard.c (_tme_keyboard_buffer_out1_bottom):
	(_tme_keyboard_buffer_out0): Silence some uninitialized structure
	variable warnings. 

	* host/gtk/gtk-display.c (_tme_gtk_display_callout): Call
	tme_threads_gtk_yield(), to make sure that the GTK timeout and idle
	callback are set as needed. 

	* host/posix/posix-disk.c: Define _FILE_OFFSET_BITS to 64 to try to
	enable large-file support. 

	* ic/am7990.c: Replaced various tme_bus_addr_t with tme_bus_addr32_t. 
	In struct tme_am7990, store actual TLB entries instead of a pointer to
	allocated entries. 
	(_tme_am7990_connection_make_bus): Call tme_bus_device_tlb_set_add()
	to add the TLB entries to the connection. 

	* ic/am9513.c (_tme_am9513_th_timer): Cast what might be a 64-bit
	time_t difference to unsigned long, to match the printf format. 

	* ic/i825x6.c: Replaced various tme_bus_addr_t with tme_bus_addr32_t. 
	In struct tme_i825x6, store actual TLB entries instead of a pointer to
	allocated entries. 
	(_tme_i825x6_rx_buffers_add): Replaced the call to tme_bus_tlb_back()
	with a plain structure copy. 
	(_tme_i825x6_connection_make_bus): Call tme_bus_device_tlb_set_add()
	to add the TLB entries to the connection. 

	* ic/isil7170.c (_tme_isil7170_th_timer): Cast what might be a 64-bit
	time_t difference to unsigned long, to match the printf format. 

	* ic/lsi64854.c: Replaced various tme_bus_addr_t with
	tme_bus_addr32_t.  Added support for the ethernet and parallel
	channels. 
	(_tme_lsi64854_bus_cycle_regs): Added some support for 8- and 16-bit
	accesses, for the parallel channel. 
	(_tme_lsi64854_tlb_set_allocate): Removed. 
	(_tme_lsi64854_tlb_set_add): Added. 

	* ic/mk48txx.c (_tme_mk48txx_reset): Fixed a bug where we used
	TME_MK48TXX_SEC_STOP as a register index. 

	* ic/stp22xx/stp222x-timer.c (_tme_stp222x_timer_update): Cast what
	might be a 64-bit time_t difference to unsigned long, to match the
	printf format. 

	* machine/sun4/sun4-timer.c (_tme_sun4_timer_update): Cast what might
	be a 64-bit time_t difference to unsigned long, to match the printf
	format. 

Sun Mar 07 16:29:27 2010  Matt Fredette  <fredette@alum.mit.edu>

	* tme/recode.h: Define TME_RECODE_REGINFO_TYPE_TEMPORARY. 

Sun Feb 21 15:49:42 2010  Matt Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

Sat Feb 20 22:01:40 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-execute.c: After the last replay instruction, make
	sure that the replay current instruction tlb token isn't the invalid
	token. 

	* ic/sparc/sparc-impl.h: Removed an old comment. 

	* ic/sparc/sparc-rc-insns.c: Commented the TME_SPARC_RECODE_INSN_
	values. 

	* ic/sparc/sparc-recode.c (tme_sparc_recode_invalidate_all): Fixed a
	bug where we wouldn't clear the return address stack after
	invalidating all instructions thunks. 
	(tme_sparc_recode): When we can't recode, instead of calling only
	_tme_sparc_recode_src_hash_invalidate(), call
	tme_sparc_recode_invalidate_all() to do everything needed when all
	instructions thunks are invalidated. 

	* ic/sparc/sparc-vis-auto.sh (tme_sparc${arch}_vis_ls_asi_pst): Fixed
	a bug where we wouldn't unbusy the TLB entry before trapping for an
	illegal instruction.  Any ASI handler that traps directly on its own,
	must do this. 

	* tme/recode.h: Removed the unused tme_recode_reginfo_type macro. 

Sat Feb 20 18:35:47 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-insns-auto.sh (tme_sparc64_casa):
	(tme_sparc64_casxa): Fixed a bug where we would use
	TME_SPARC_FORMAT3_RS2, even if the i bit is set, instead of always
	decoding rs2 like tme_sparc64_atomic() does. 

	* ic/sparc/sparc-misc.c (tme_sparc64_trap): Removed some old debugging
	code. 

Thu Feb 18 02:01:33 2010  Matt Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* ic/sparc/sparc-misc.c (tme_sparc_nnpc_trap): Make a more complete
	dummy load/store structure. 

	* tme/common.h: Fixed old bugs where tme_value64_uint32_lo and
	tme_value64_uint32_hi were defined to be signed. 
	Define tme_value64_cmp(). 

Mon Feb 15 22:23:15 2010  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/recode-regs.c (tme_recode_regs_host_clean_all): Now that a
	host register can be clean at any size, instead of freeing a host
	register that was dirty not at the full guest register size, just mark
	it as clean. 
	(_tme_recode_regs_src_load): As an optimization, if the read-uses
	count for the guest register is only one, only load the size that this
	instruction needs. 
	(tme_recode_regs_dst_any):
	(tme_recode_regs_dst_specific): Replaced
	TME_RECODE_REGINFO_TAGS_DIRTY_SIZE() with
	TME_RECODE_REGINFO_TAGS_VALID_SIZE(). 

	* libtme/host/x86/rc-x86-chain.c (_tme_recode_x86_chain_subs): Use
	TME_RECODE_REGINFO_TAGS_VALID_SIZE() and TME_RECODE_REGINFO_TAGS_CLEAN
	in the fake register information for loading the guest PC. 

	* libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_add):
	Use TME_RECODE_REGINFO_TAGS_VALID_SIZE() in the fake register
	information for the subs operands. 

	* libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): For both
	loading and storing, get the size to move using
	TME_RECODE_REGINFO_TAGS_WHICH_VALID_SIZE(). 
	(tme_recode_host_reg_imm): As an optimization, only make as big an
	immediate as the instruction needs. 

	* machine/sun/sun-mmu.c: Define TME_SUN_MMU_CONTEXT_TLBS.  In struct
	tme_sun_mmu_tlb_set, replaced the TLB set information with a struct
	tme_bus_tlb_set_info. 
	In struct tme_sun_mmu, track a set of TLBs that must be invalidated
	when the context changes. 
	Changed from tracking pointers to TLB entries to tracking pointers to
	their tokens. 
	(tme_sun_mmu_tlbs_invalidate): Use tme_bus_tlb_set_invalidate() to
	invalidate a TLB set. 
	(tme_sun_mmu_tlbs_context_set):
	(tme_sun_mmu_tlb_set_allocate): Removed. 
	(tme_sun_mmu_context_add):
	(tme_sun_mmu_context_switched):
	(tme_sun_mmu_tlb_set_add): Added. 

	* tme/recode.h: Replaced TME_RECODE_REGINFO_TAGS_DIRTY_SIZE_MASK,
	which was nonzero iff the host register was dirty, with
	TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK, which is nonzero iff the tags
	are valid. 
	Changed the value of TME_RECODE_REGINFO_TAGS_CLEAN to be right before
	TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK, to enable the changed
	TME_RECODE_REGINFO_TAGS_WHICH_DIRTY_SIZE().  Renamed
	TME_RECODE_REGINFO_TAGS_VALID_SIZE() to
	TME_RECODE_REGINFO_TAGS_ARE_VALID_SIZE(), all callers changed.  Added
	TME_RECODE_REGINFO_TAGS_WHICH_VALID_SIZE().  Changed
	TME_RECODE_REGINFO_TAGS_WHICH_DIRTY_SIZE() and
	TME_RECODE_REGINFO_TAGS_ARE_DIRTY() to use the new
	TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK and
	TME_RECODE_REGINFO_TAGS_CLEAN.  Added the new
	TME_RECODE_REGINFO_TAGS_VALID_SIZE(). 

Mon Feb 15 16:57:13 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/stp22xx/stp222x-mdu.c (tme_stp222x_mdu_regs_clear): Added a
	performance hack to dispatch any waiting interrupt to the CPU clearing
	an interrupt's pending state. 

	* libtme/memory-auto.sh (_tme_memory_write): Added an explicit cast to
	type_part, to silence compiler warnings when we're writing a constant
	wider than type_part. 
	(tme_memory_bus_${op}_buffer): Fixed some ${op_const} to
	${op_const_mem}, to silence lost-qualifier warnings. 
	(tme_memory_atomic_${op}${size}): When threads are cooperative, do the
	read or write using the plain macro. 

	* libtme/recode-rws.c (tme_recode_rw_thunk): Many address type values
	that used to be plain in the read/write structure moved to an address
	type structure.  Use tme_recode_address_type_check() to check the
	read/write address type, and tme_recode_address_type_compare() to
	compare it to an existing thunk's address type. 

	* libtme/threads-sjlj.c: Removed TME_SJLJ_DISPATCHER_FALSE and
	TME_SJLJ_DISPATCHER_TRUE, since the thread dispatcher no longer
	returns any value.  In struct tme_sjlj_thread, added the last dispatch
	number for a thread, and under HAVE_GTK, no longer track timeout
	handles.  Removed tme_sjlj_thread_dispatched_timeout.  Define globals
	for the global dispatch number, the reasonably current time, and the
	short thread flag.  Under HAVE_GTK, define globals for the timeout
	source ID and the current timeout time. 
	(tme_sjlj_gettimeofday): Added. 
	(_tme_sjlj_change_state): Add a not-blocked thread next on the
	dispatching list if threads are being dispatched, and this thread
	wasn't already in this dispatch. 
	(_tme_sjlj_threads_dispatching_runnable):
	(_tme_sjlj_threads_dispatching_timeout):
	(_tme_sjlj_timeout_time): Added. 
	(tme_sjlj_dispatch_fd): Removed. 
	(_tme_sjlj_threads_dispatching_fd): Added to replace
	tme_sjlj_dispatch_fd(). 
	(tme_sjlj_dispatch): Return no value, and don't expect
	tme_sjlj_yield() to return any value via longjmp().  Before
	dispatching a thread, remove it from the timeout list if needed, and
	set its dispatch number.  After a dispatch, increment the global
	dispatch number. 
	(_tme_sjlj_gtk_callback_timeout):
	(_tme_sjlj_gtk_callback_fd):
	(_tme_sjlj_gtk_callback_idle):
	(_tme_sjlj_gtk_yield): Added. 
	(tme_sjlj_threads_run): If we're using the GTK main loop, do an
	initial _tme_sjlj_gtk_yield() instead of adding an idle directly.  In
	our main loop, removed the code that sorted the timeout list, now that
	tme_sjlj_yield() inserts a thread at the right place on the list.  Use
	_tme_sjlj_timeout_time() to get the timeout time.  After the select(),
	use _tme_sjlj_threads_dispatching_runnable(),
	_tme_sjlj_threads_dispatching_timeout() and
	_tme_sjlj_threads_dispatching_fd() to build the dispatching list, and
	tme_sjlj_dispatch() to dispatch them all. 
	(tme_sjlj_thread_create): Initialize the thread's dispatch number. 
	(tme_sjlj_cond_notify): Always call _tme_sjlj_change_state with
	TME_SJLJ_THREAD_STATE_RUNNING (only the dispatch functions can use
	TME_SJLJ_THREAD_STATE_DISPATCHING). 
	(tme_sjlj_yield): Don't return any value through longjmp().  Under
	HAVE_GTK, don't do any GTK timeout allocation.  Insert a thread with a
	timeout at the right spot on the timeout list. 
	(tme_sjlj_sleep): Use tme_thread_long() to mark long runs, and
	tme_gettimeofday() to get the current time.  Fixed a bug where the
	first timeout would be undefined. 
	(tme_sjlj_select_yield): Use tme_thread_long() to mark a long run. 

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Added
	support for TME_RECODE_OPERAND_UNDEF source operands.  Fixed a bug in
	the x86-64 double-host-size where we would load the first source
	operand for the second. 

	* libtme/host/x86/rc-x86-rws.c (tme_recode_host_rw_thunk_new): Get
	parameters from the new address type structure in the read/write
	structure, instead of directly from the read/write structure or the ic
	structure. 

Mon Feb 15 14:58:58 2010  Matt Fredette  <fredette@alum.mit.edu>

	* acinclude.m4: Quote all of the AC_DEFUN macro names. 
	* configure.in: When long is 64 bits, check for the maximum shift of a
	64-bit value, whether or not right shifts of signed 64-bit values are
	arithmetic, and for bswap64(). 
	Updated to the AM_PATH_GTK_2_0() macro.  When long is 64 bits or the
	compiler is gcc, add sunultra1 to the systems list. 
	Define bus_size_max and recode_size_guest_max from values from each
	system to build. 
	Added sunultra1. 
	Added some missing $srcdir to paths.  Added the --enable-recode
	option, and configure recode support.  Configure miscellaneous target
	support.  Generate tme/recode-host.h, libtme/recode-host.c, and
	libtme/misc-host.c.  Added more Makefiles to the AC_OUTPUT(). 

Sun Feb 14 20:17:12 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-execute.c:
	* ic/sparc/sparc-rc-ls.c: Switched from the old TME_RECODE_RW_FLAG and
	TME_SPARC_RECODE_RW_FLAG_ names to the new TME_RECODE_TLB_FLAG and
	TME_SPARC_RECODE_TLB_FLAG_ names. 

	* ic/sparc/sparc-fpu.c [TME_HAVE_INT64_T]: Include sparc-vis-auto.c. 
	(tme_sparc_fpu_exception_check): Use the per-architecture fp_exception
	trap. 
	(tme_sparc32_stdfq): Use TME_SPARC_INSN_FPU_ENABLED() instead of
	TME_SPARC_INSN_FPU_STORE(), which might mem_address_not_aligned trap
	before the fp_exception, which is the wrong order on a v9 CPU.  This
	function needs to be corrected for any CPU that actually implements
	the FQ. 
	(tme_sparc_fpu_fpreg_aligned): Removed. 
	(tme_sparc_fpu_fpreg_decode): Added, as a replacement for
	tme_sparc_fpu_fpreg_aligned(). 
	(tme_sparc_fpu_fpreg_format): Our caller is now expected to make sure
	the register is aligned. 
	(tme_sparc_fpu_fpreg_read): Don't use TME_FIELD_MASK_EXTRACTU with a
	variable mask.  Use tme_sparc_fpu_fpreg_decode() to decode the
	register number. 

	* ic/sparc/sparc-impl.h: Switched from the old TME_RECODE_RW_FLAG()
	and TME_SPARC_RECODE_RW_FLAG_ names to the new TME_RECODE_TLB_FLAG()
	and TME_SPARC_RECODE_TLB_FLAG_ names. 

	* ic/sparc/sparc-misc.c:
	* ic/sparc/sparc-rc-verify.c: Switched from the old
	tme_sparc_dtlb_recode_tlb names to the new tme_sparc_recode_tlb names. 

	* ic/sparc/sparc-rc-ls.c (tme_sparc_recode_ls_tlb_update): The DTLB
	array is really a single TLB array with the ITLB entries.  The recode
	TLB entries' read/write flags were renamed to just (TLB) flags. 
	(_tme_sparc_recode_ls_init): Set the members of the new address type
	structure in the read/write structure.  Many of them used to be plain
	in the read/write structure. 

Sun Feb 14 18:08:02 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/cy7c601.c (tme_ic_,sparc,cy7c601): Call
	tme_sparc_sync_init() and set the tme_sparc_timing_loop_cycles_each
	value. 

	* ic/sparc/mb86900.c (tme_ic_,sparc,mb86900): Call
	tme_sparc_sync_init() and set the tme_sparc_timing_loop_cycles_each
	value. 

	* ic/sparc/sparc-execute.c: Set the recode chain TLB flags mask. 
	Manage a pointer to the token for current instruction TLB entry,
	instead of the current instruction TLB entry itself, because that's
	what the recode instruction thunks do.  On a branch to ., truncate the
	instruction burst to get to the code that handles a branch to .  as a
	timing loop or an idle.  At the end of an instruction burst, possibly
	update the instruction burst runlength, and if the next instruction
	will be annulled, loop to handle it now.  Clear the instruction burst
	other flag if this will be a normal burst, otherwise set it for an
	idle burst.  When updating PC_next_next on a v9 CPU, mask it with the
	address mask. 
	[TME_SPARC_HAVE_RECODE()]: Removed the source key offset. 
	tme_recode_insns_thunk_run() now takes a chain thunk.  When recode
	thunks return, switch to the invalid instruction TLB entry. 

	* ic/sparc/sparc-impl.h: Include <tme/runlength.h>. 
	Define TME_SPARC64_TICK_NPT and TME_SPARC64_TICK_COUNTER.  Added
	support for the sunos64-type-0 idle type. 
	(TME_SPARC_IDLE_MARK): Flag the instruction burst as shortened. 
	Define TME_SPARC_MODE_TIMING_LOOP. 
	[!TME_HAVE_RECODE]: Removed old arguments from
	_TME_SPARC_RECODE_CWP_UPDATE. 
	Define different versions of TME_SPARC_HAVE_RECODE() that avoid using
	TME_SPARC_VERSION(ic) whenever possible.  Define
	TME_SPARC_RECODE_TLB_FLAG_CHAIN_USER() and
	TME_SPARC_RECODE_TLB_FLAG_CHAIN_PRIV().  Define the
	TME_SPARC_EXTERNAL_CHECK_ macros.  Define tme_sparc_ireg_umax_t. 
	In struct tme_sparc, added the number of scaled cycles per
	microsecond, the runlength state and its update state, get the
	instruciton burst from the runlength state, track the token of any
	currently busy instruction TLB entry, added the address mask, added
	the timing information, the current chain TLB flags, the chain return
	address stack, removed the chain cacheable and source key offset,
	added the instructions group structure.  Declare
	tme_sparc_sync_init(), tme_sparc_itlb_current(),
	tme_sparc_insn_peek(), the timing support functions, the chain TLB
	update functions, and tme_sparc_recode_verify_end_preinstruction(). 
	Now define the verify no-operation macros even if TME_HAVE_RECODE is
	zero. 

	* ic/sparc/sparc-insns-auto.sh: Instead of testing for PSTATE.AM,
	always mask sparc64 addresses with ic->tme_sparc_address_mask. 
	(tme_sparc${arch}_${slow}): Set ic->_tme_sparc_instruction_burst_other
	to flag the shortened burst. 
	(tme_sparc${arch}_ls): Even when the ASI has not been specified, the
	instruction may provide ASI flags, so add them in.  Call
	tme_sparc${arch}_recode_chain_tlb_update() to update a recode
	instruction TLB entry. 
	Don't assert that the mapping made a mapping until after checking
	whether or not it completed the transfer. 

	* ic/sparc/sparc-insns.c (tme_sparc32_wrpsr): Set
	ic->_tme_sparc_instruction_burst_other to flag the shortened
	instruction burst. 
	(tme_sparc64_return):
	(tme_sparc64_done_retry): Instead of testing for PSTATE.AM, always
	mask sparc64 addresses with ic->tme_sparc_address_mask. 
	(tme_sparc64_rdpr):
	(tme_sparc64_rdasr): Mask the scaled cycles counter to fit in
	TICK.COUNTER, and or in TICK.NPT if needed. 
	(_tme_sparc64_idle_type_sunos64_type_0_splhigh): Added. 
	(tme_sparc64_wrpr): Handle TICK.NPT and the TICK.COUNTER offset
	separately. 
	Fixed a bug where we wouldn't redispatch after a write to PSTATE.  To
	improve interrupt latency, do an interrupt check before raising PIL,
	and after lowering it. 
	Added support for detecting the sunos64-type-0 idle type. 

	* ic/sparc/sparc-misc.c: Replaced uses of the _tme_sparc_itlb_busy
	member with either _tme_sparc_itlb_current_token and the token
	functions, or a call to tme_sparc_itlb_current(). 
	(tme_sparc_idle): Call the external check function with
	TME_SPARC_EXTERNAL_CHECK_MUTEX_LOCKED. 
	(tme_sparc_thread): When entering execution mode, if this instruction
	burst will be used to update the runlength, note its start time. 
	Added support for the timing loop mode. 
	(_tme_sparc_command): Added the sunos64-type-0 idle type. 
	(tme_sparc_sync_init): Added. 
	(tme_sparc_new): For the timing loop code, initialize
	ic->tme_sparc_cycles_unscaling.  Initialize the instruction burst
	runlength state. 
	(tme_sparc_do_idle): Set ic->_tme_sparc_instruction_burst_other to
	flag the shortened instruction burst. 
	(tme_sparc32_external_check): Now take flags instead of a boolean. 
	(tme_sparc64_trap): Reset TICK.NPT and TICK.counter separately.  Also
	reset TICK.counter on an XIR. 
	(tme_sparc_itlb_current):
	(tme_sparc_insn_peek): Added. 
	(tme_sparc_fetch_nearby): Call tme_sparc_insn_peek() to do the peek. 
	(tme_sparc_callout_relock): If we need to do an external check,
	shorten the current instruction burst to do one immediately. 

	* ic/sparc/sparc-rc-chain.c: Removed some accidentally committed
	AUDITs. 

	* ic/sparc/sparc-rc-insns.c: Replaced the TME_SPARC_RECODE_INSN_JUMP_
	macros with TME_SPARC_RECODE_CHAIN_INFO() used with the
	TME_RECODE_CHAIN_INFO_ macros. 
	(tme_sparc_recode_insn_assist_redispatch): Use
	_tme_sparc_recode_chain_src_key() to check if the current PC is still
	cache-valid. 
	(_tme_sparc_recode_insn_assist_jmpl): Added. 
	(_tme_sparc_recode_recode): Added support for PSTATE.AM, mostly by
	doing PC calculations in that address size.  Be sure to not recode the
	last instruction before tme_sparc_ireg_t wraps to zero. 
	Fixed jmpl recoding to call the assist function to check for traps, to
	try to characterize a jmpl as a call or a return, and to better write
	the PC of the jmpl into any destination register.  Mark each chain
	jump as either near or far.  When recoding a call instruction, if the
	PC is not the guest size, zero-extend r[15] after the PC has been
	copied into it.  Also use r[15] as the source for advancing PC to the
	branch delay slot, for better host register allocation.  Mark each
	chain call as either near or far. 
	When an instruction needs a full assist, the source operands aren't
	used, so make them the recode %undef.  If there is no chain
	information at the end of an instructions group, make unconditional
	jump information.  If the chain information is conditional, mark the
	alternate as either near or far.  Store the end of the instructions
	and the chain information in the instructions group. 

	* ic/sparc/sparc-rc-verify.c: Removed
	_tme_sparc_recode_verify_ic_replay_token. 
	(_tme_sparc_recode_verify_change): Renamed the read/write flags to
	just TLB flags. 
	(tme_sparc_recode_verify_begin): Use tme_sparc_itlb_current() to get
	the current TLB entry.  Preserve the token pointer when initializing
	the current TLB entry in the replay state.  Fix
	_tme_sparc_itlb_current_token in the saved in state.  Force the
	instruction burst size to two in the in state. 
	(tme_sparc_recode_verify_end): Use tme_sparc_itlb_current() to get the
	current TLB entry.  Set _tme_sparc_itlb_current_token instead of
	_tme_sparc_itlb_busy. 
	(tme_sparc_recode_insns_dump): Check _tme_sparc_itlb_current_token
	instead of _tme_sparc_itlb_busy.  Call
	_tme_sparc_recode_chain_src_key() to get the source key. 
	(_tme_sparc_recode_verify_init): Initialize and set tokens on all
	replay TLB entries. 

	* ic/sparc/sparc-recode.c: Define TME_SPARC_RECODE_SRC_KEY_UNDEF,
	TME_SPARC64_RECODE_SRC_KEY_FLAG_AM and
	TME_SPARC64_RECODE_SRC_KEY_FLAG_CLE.  Include sparc-rc-chain.c for
	each architecture. 
	(_tme_sparc_recode_src_hash_invalidate): Use
	TME_SPARC_RECODE_SRC_KEY_UNDEF for an invalidated source key.  If an
	invalidated source key has an instructions thunk, invalidate it, to
	make sure that no other instruction thunk can chain to it. 
	(_tme_sparc_recode_jump_chain): Removed. 
	(tme_sparc_recode): Set the instructions group host source address. 
	On a v9 CPU, add PSTATE.AM and PSTATE.CLE to the source address key. 
	Set the instructions group valid byte and mask.  Check for
	TME_SPARC_RECODE_SRC_KEY_UNDEF for an invalidated source key, since
	valid source keys may now be nonzero mod sizeof(tme_uint32_t). 
	(tme_sparc_recode_dump_insns): Don't take the recode instructions
	array, since it can be found in the struct tme_sparc recode
	instructions group.  Replaced the TME_RECODE_OPCODE_JUMP dump with a
	TME_RECODE_CHAIN_INFO_ dump.  Added support for
	TME_RECODE_OPERAND_UNDEF. 
	(tme_sparc_recode_init): Removed address translation and jump chain
	member initialization.  These are now given in address type structures
	by _tme_sparc_recode_ls_init() and _tme_sparc_recode_chain_init(). 
	Set the first instruction in the instructions group.  Call the
	_tme_sparc_recode_chain_init() for this architecture. 

	* ic/sparc/sparc-timing.c: Replaced uses of the _tme_sparc_itlb_busy
	member with _tme_sparc_itlb_current_token and the token functions. 
	(tme_sparc_timing_loop_finish): Flag the shortened instruction burst. 

	* ic/sparc/stp103x.c: Define TME_STP103X_TCR_INT_DIS and
	TME_STP103X_TCR_TICK_CMPR.  In struct tme_stp103x, added the tick
	compare condition and time. 
	(tme_misc_timeval_never): Added, although this should be moved. 
	(_tme_stp103x_interrupt_check): Take a mask of flags, instead of a
	boolean.  All callers changed.  Added support for
	TME_SPARC_EXTERNAL_CHECK_PCS_UPDATED. 
	(_tme_stp103x_update_sir): Now take and-not and or masks for SIR.  All
	callers changed. 
	Before clearing SIR.TICK_INT, to help TICK interrupt latency, do an
	interrupt check, backing up the PCs to the previous instruction if a
	tick interrupt should have been delivered. 
	(_tme_stp103x_update_pstate): Make sure %g0 is zero in both the normal
	global register set and the current global register set.  When there
	is recode support, if PSTATE.AM and/or PSTATE.CLE are changing, clear
	the return address stack.  Update the address mask according to
	PSTATE.AM, and mask the new PCs with it. 
	(_tme_stp103x_rdpr): Use tme_sparc_itlb_current() instead of
	ic->_tme_sparc_itlb_busy.  Don't use return() with a void value. 
	(_tme_stp103x_wrasr): Update the tick compare thread on a write to
	TCR. 
	(_tme_stp103x_flush): Always mask the address.  Since the default ASI
	may not be the unrestricted ASI, and the nucleus ASI can't be modified
	with ASI flags, instead of giving an explicit ASI, specify the
	no-fault ASI flag in the load/store information. 
	(_tme_stp103x_ls_trap): Added support for TME_SPARC_LSINFO_NO_FAULT. 
	(_tme_stp103x_ls_address_map): If _tme_stp103x_ls_trap() ever returns,
	check for TME_SPARC_LSINFO_NO_FAULT and return, instead of aborting. 
	(_tme_stp103x_tick_compare_th): Added. 
	(_tme_stp103x_external_check): Take a mask of flags, instead of a
	boolean.  All callers changed. 
	(_tme_stp103x_interrupt): Added a missed wakeup on the external
	condition. 
	(_tme_stp103x_new): Call tme_sparc_sync_init().  Initialize the tick
	compare thread state, and start the tick compare thread.  Initialize
	ic->tme_sparc_timing_loop_cycles_each. 

Sun Feb 14 00:48:04 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-misc-auto.sh: Renamed tme_sparc64_ireg_tick to
	tme_sparc64_ireg_tick_offset, and added the separate
	tme_sparc64_ireg_tick_npt. 

	* serial/ms-mssystems.c (_tme_serial_ms_mssystems5_init): Set the
	rate-limiting based on the baud rate and the packet size. 

	* serial/serial-ms.c: _tme_serial_ms_callout): Added support for
	rate-limiting reading events. 
	(_tme_serial_ms_th_rate): Added. 
	(tme_serial_,kb,mouse): Start the rate-limiting thread. 

	* serial/serial-ms.h: In struct tme_serial_ms, added members for
	rate-limiting serial data. 

Thu Feb 11 00:15:55 2010  Matt Fredette  <fredette@alum.mit.edu>

	* tme/recode.h: Define TME_RECODE_OPERAND_UNDEF. 

Wed Feb 10 00:34:26 2010  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_imm): When the
	most significant half of a double-host-size immediate is zero, emit an
	xorl to clear the second register, instead of a mov of zero. 

Tue Feb 09 01:27:56 2010  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/recode-regs.c (tme_recode_regs_host_reserve): Assert that
	there is a reservation array entry free. 
	(_tme_recode_regs_src_load): Fixed a bug where we didn't handle the
	case where the host register was already reserved, and would instead
	decrement the reserved read-uses count. 

Sun Feb 07 17:32:01 2010  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/recode-impl.h: Define struct tme_recode_tlb_type. 
	tme_recode_host_insns_thunk_new() now takes an instructions group,
	instead of pointers to the array of instructions.  Declare
	tme_recode_address_type_check(), tme_recode_address_type_compare(),
	and tme_recode_address_type_tlb_type(). 

	* libtme/recode-insns.c (tme_recode_insns_thunk): Now take a
	instructions group structure, instead of pointers to the instructions
	array.  All callers changed.  Removed the TME_RECODE_OPCODE_JUMP
	support. 

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_jump):
	(tme_recode_insn_jump_chain): Removed. 
	(_tme_recode_x86_insn_emit): When emitting an extension instruction,
	fixed a performance bug where we would load the source operand at the
	destination size, instead of at the extension's source operand size. 
	Removed the TME_RECODE_OPCODE_JUMP support. 
	(tme_recode_insns_thunk_invalidate): Added. 
	(tme_recode_host_insns_thunk_new): Call _tme_recode_x86_chain_in() and
	_tme_recode_x86_chain_out() to emit the chain in and chain out
	instructions, instead of emitting a jump to the instructions prologue. 
	Get the instructions array from the instructions group structure. 

	* libtme/host/x86/recode-x86.c: Define TME_RECODE_X86_OPCODE_PUSH_Ib
	and TME_RECODE_X86_OPCODE_BINOP_Iz_A.  Define
	TME_RECODE_X86_EA_BASE_IP.  Remove
	TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT. 
	(_tme_recode_x86_emit_jmp):
	(_tme_recode_x86_fixup_jmp): Added. 
	(tme_recode_host_ic_new): Removed the code that emitted the
	instructions thunk prologue, epilogue, jump subs and jump chain subs. 
	Call _tme_recode_x86_chain_epilogue() to make the instructions thunk
	epilogue. 

	* tme/Makefile.am: Added runlength.h to pkginclude_HEADERS. 

	* tme/recode.h: Removed TME_RECODE_OPCODE_JUMP.  Replaced the
	TME_RECODE_JUMP_ macros with the TME_RECODE_CHAIN_INFO_ macros. 
	(TME_RECODE_INSNS_THUNK_INSNS_MAX): Account for
	TME_RECODE_HOST_INSN_THUNK_OVERHEAD.  In the TLB entry structures,
	renamed all of the read/write flags to just (TLB) flags. 
	Define struct tme_recode_address_type.  In struct tme_recode_rw,
	replaced the address type members with an address type structure. 
	Define struct tme_recode_chain_thunk.  Define struct
	tme_recode_insns_group.  In struct tme_recode_ic, removed the members
	that are now included in the address type structure in a struct
	tme_recode_rw.  Replaced the tme_recode_ic_jump_chain member with the
	tme_recode_ic_chain_fixup member.  Renamed tme_recode_ic_jump_counter
	to tme_recode_ic_chain_counter_offset.  Added members for the chain
	return address stack and the current instruction TLB entry token
	offset.  Declare tme_recode_chain_ras_clear(),
	tme_recode_chain_thunk(), tme_recode_chain_fixup(), and
	tme_recode_insns_thunk_invalidate().  tme_recode_insns_thunk() now
	takes an instructions group, instead of pointers to the array of
	instructions. 
	[TME_RECODE_DEBUG]: Declare tme_recode_chain_thunk_dump(). 

	* tme/threads.h: Declare tme_sjlj_gettimeofday(), and alias
	tme_gettimeofday to it.  Declare tme_sjlj_thread_short.  Define
	tme_thread_long(). 

	* tme/host/recode-x86.h: Define TME_RECODE_X86_CHAIN_IN_SIZE_MAX and
	TME_RECODE_X86_CHAIN_OUT_SIZE_MAX, and use them to define
	TME_RECODE_HOST_INSN_THUNK_OVERHEAD.  Define
	TME_RECODE_HOST_CHAIN_THUNK.  In TME_RECODE_X86_IC, renamed
	tme_recode_x86_ic_insns_prologue to tme_recode_x86_ic_chain_epilogue. 
	Removed tme_recode_x86_ic_insns_epilogue, tme_recode_x86_ic_subs_jump,
	and tme_recode_x86_ic_subs_jump_chain.  Added
	tme_recode_x86_ic_chain_fixup_target. 
	(tme_recode_insns_thunk_run): Now takes a chain thunk instead of the
	recode IC, all callers changed.  Renamed the TME_RECODE_RW_FLAG macros
	to TME_RECODE_TLB_FLAG macros.  Define the tme_recode_ras_entry_t
	type. 

Sun Feb 07 16:51:53 2010  Matt Fredette  <fredette@alum.mit.edu>

	* generic/mouse.c (_tme_mouse_deltas_opposite): Added. 
	(tme_mouse_buffer_copyin): If the new event can be merged with the
	previous new event, merge them. 

	* libtme/Makefile.am: Added SUBDIRS. 
	In libtme_la_SOURCES, replaced misc.c with misc-host.c, and added the
	machine independent recode sources and token.c and runlength.c. 
	Added misc.c to EXTRA_DIST. 

	* libtme/kgdb.c libtme/recode-address.c libtme/runlength.c
	  tme/runlength.h tools/stp103x-tlbs.pl tools/sun4u_58-find-module.pl
	  tools/tme-log-binary-dump-calls-traps.pl
	  tools/tme-toolchain-wrapper.pl:

	  Added. 

	* libtme/recode-ic.c (tme_recode_opcode_dump): Removed
	TME_RECODE_OPCODE_JUMP. 

	* libtme/host/x86/Makefile.am: Added rc-x86-tlb.c and rc-x86-chain.c
	to EXTRA_DIST. 

	* libtme/host/x86/rc-x86-chain.c: Fixed many bugs where
	TME_RECODE_X86_MOD_RM_EA_DISP32() was used with
	TME_RECODE_X86_EA_BASE_IP. 
	Split TME_RECODE_X86_CHAIN_RETURN_ADDRESS() into separate definitions
	for ia32 and x86-64 hosts, because the ia32 expression gets a pointer
	cast size warning on x86-64. 
	(_tme_recode_x86_chain_in): Explicitly cast a value being stored into
	a tme_uint8_t, to tme_uint8_t, to avoid a warning when this value is a
	16-bit constant.  Fixed a bug where we added two rex prefixes
	together. 
	(_tme_recode_x86_chain_prologue): Fixed an assert. 

Fri Feb 05 01:06:01 2010  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/Makefile.am: Added sparc-rc-chain.c to EXTRA_DIST. 
	* ic/sparc/sparc-rc-chain.c: Added. 

Fri Jan 15 03:05:59 2010  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/host/x86/rc-x86-chain.c:
	* libtme/host/x86/rc-x86-tlb.c: Added. 

Sun Nov 08 17:35:49 2009  Matt Fredette  <fredette@alum.mit.edu>

	* host/posix/posix-disk.c (_tme_posix_disk_buffer_free):
	(_tme_posix_disk_open):
	(_tme_posix_disk_close):
	(__tme_posix_disk_command):
	(_tme_posix_disk_command): Added. 
	(_tme_posix_disk_buffer_get): Now use _tme_posix_disk_buffer_free() to
	free a buffer. 
	(tme_host_posix,disk): Now use _tme_posix_disk_open() to open the disk
	image and set our command function on the element. 

	* ic/stp2024.c: Corrected all of the audio codec and DMA register
	offsets. 

	* ic/sparc/Makefile.am: Added sparc-timing.c to
	tme_ic_sparc_la_SOURCES. 

	* ic/sparc/sparc-fpu-auto.sh: Fixed a bug where FsMULd was doing a
	single-precision multiply. 

	* ic/sparc/sparc-rc-ls.c (_tme_sparc_recode_ls_assist_check): On a v9
	CPU, mask the addresses. 

	* ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_end_preinstruction):
	Added. 
	(tme_sparc_recode_verify_end): Added support for
	TME_SPARC_RECODE_VERIFY_PC_NONE. 
	(tme_sparc_recode_insns_dump): Fixed the suggested prints for the case
	where TME_SPARC_RECODE_SRC_HASH_SIZE_ELEMENT is not one. 

	* ic/sparc/sparc-timing.c (_tme_sparc_timing_loop_start): Corrected
	the comment about the state of the PCs. 
	(tme_sparc_timing_loop_assist): Now call
	tme_sparc_recode_verify_end_preinstruction(). 

	* ic/sparc/sparc-vis-auto.sh: Added support for the
	FCMP{GT,LE,NE,EQ}{16,32} instructions. 

	* ic/stp22xx/stp220x.c (_tme_stp220x_ebus_cycle): Fixed a bug where we
	wouldn't update the read/write bits in the control register. 

	* ic/stp22xx/stp222x-impl.h: Added tme_stp2220_mdu_idi_zs0_zs1_active
	to struct tme_stp222x. 

	* ic/stp22xx/stp222x-mdu.c (tme_stp222x_mdu_intcon): Now mimic how the
	zs0 and zs1 interrupt signals are wired together somewhere. 

	* ic/stp22xx/stp222x-stc.c (tme_stp222x_stc_flush): The stp2220 flush
	writeback actually only writes back four bytes, not eight. 
	(tme_stp222x_stc_regs_diag): Added minimal emulation of reads of the
	diagnostic registers, always returning zero. 

	* libtme/misc.c (tme_misc_cycles_scaled): Now take an optional pointer
	to an unscaled cycles counter, and do the scaling as a simple
	floating-point multiply.  Added support for hosts that don't have a
	64-bit integral type. 
	(tme_misc_cycles_scaling): Now make the scaling with a simple
	floating-point division. 
	[!TME_HAVE_MISC_CYCLES_PER_MS] (tme_misc_cycles_per_ms): Added support
	for hosts that don't have a 64-bit integral type. 
	[!TME_HAVE_MISC_CYCLES] (tme_misc_cycles): Added support for hosts
	that don't have a 64-bit integral type. 
	(tme_misc_cycles_spin_until):
	(tme_value64_add):
	(tme_value64_sub): Added. 

	* libtme/threads-sjlj.c (tme_sjlj_dispatch): Fixed a bug where we
	would call gtk_idle_add_priority() when we weren't using GTK. 

	* libtme/host/x86/misc-x86.c: Define tme_misc_cycles() with inline. 

	* machine/sun/sun-bwtwo.c (_tme_sunbw2_type_set): Now define the
	interrupt bus signal. 

	* machine/sun/sun-cgsix.c (_tme_suncg6_type_set): Now define the
	interrupt bus signal. 

	* machine/sun/sun-fb.c: Now define TME_SUNFB_UPDATE_SIZE.  Changed
	various tme_bus_addr_t to tme_bus_addr32_t. 
	(_tme_sunfb_callout): Now call out the framebuffer-specific interrupt
	bus signal, instead of always using the unspecified one, and mark the
	signal callout as an edge. 
	(tme_sunfb_memory_update): Pass and reset the first and last bytes
	updated, if any, in the real framebuffer memory, and invalidate any
	outstanding write TLB entries. 
	(tme_sunfb_bus_cycle_bt458): Now tolerate reads and writes to invalid
	addresses. 
	(_tme_sunfb_tlb_fill): Track one outstanding writable TLB entry, and
	the minimum and maximum possible bytes that any writable TLB entry
	could have written since the last framebuffer update. 
	[TME_SUNFB_BUS_TRANSITION] (tme_sunfb_bus_cycle_transition): Added. 
	(tme_sunfb_new): Make sure that the interrupt bus signal is defined. 
	(tme_sun_cgthree): Define the interrupt bus signal. 

	* machine/sun/sun-fb.h: Now include <tme/completion.h>.  Now define
	TME_SUNFB_LOG_HANDLE().  Temporarily define TME_SUNFB_BUS_TRANSITION. 
	Changed some tme_bus_addr_t to tme_bus_addr32_t.  In struct tme_sunfb,
	added members for one outstanding writable TLB entry, the offsets of
	the first and last bytes updated in the real framebuffer memory, and
	the interrupt bus signal. 
	Added prototypes for tme_sunfb_bus_cycle_bt458 and
	tme_sunfb_bus_cycle_transition. 

	* scsi/scsi-device.c (_tme_scsi_device_cycle): If the device does not
	define a handler for a command, use the illegal command handler. 

	* tme/misc.h: Changed tme_misc_cycles_scaling_t to be the widest
	available floating-point type. 
	Updated the tme_misc_cycles_scaled() prototype.  Added a prototype for
	tme_misc_cycles_spin_until(). 

Tue Oct 27 00:45:16 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-rc-insns.c (_tme_sparc_recode_recode): When recoding
	branches, now get the raw branch displacement as a signed 32 bits,
	doing the full sign-extension to guest width in one place. 
	Added support for branch to .  timing loops.  When the PCs are not
	updated, in addition to checking that the PC advance is zero, check
	that the PC is in the guest PC register. 

	* ic/sparc/sparc-timing.c: Added. 

Tue Oct 13 22:40:10 2009  Matt Fredette  <fredette@alum.mit.edu>

	* tools/tme-log-binary-dump.pl:
	* tools/tme-log-binary-udiff.pl:
	* tools/tme-log-binary.pl: Added. 

Sat Sep 26 14:55:25 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-execute.c: Now define tme_sparc_idle_pcs, instead of
	tme_sparc_idle_type_pc.  Now use TME_SPARC_HAVE_RECODE() to test for
	recode support.  Reworked idle handling.  Now, an idle type must mark
	two consecutive idles without a trap before we go idle.  This
	eliminates the race condition where we would trap, then resume in the
	idle loop past the point of no return of our going idle (i.e., before
	looping to check the possibly updated scheduler state again).  Also
	added support for marking idles in a true idle loop.  No longer go
	idle for the netbsd32-type-0 idle type in an annulled branch delay
	slot. 
	When recode is supported, before checking for a recode thunk, detect a
	control transfer target that is an idle PC, and mark the idle.  When
	recode is not supported, in the control transfer instruction handling,
	detect a control transfer target that is an idle PC, and mark the
	idle. 

	* ic/sparc/sparc-impl.h: Added macros for the new idle types, and
	macros for sets of idle types with common characteristics. 
	Replaced TME_SPARC_IDLE_TYPES_SUPPORTED() with
	TME_SPARC_IDLE_TYPE_IS_SUPPORTED().  Added TME_SPARC_IDLE_MARK() and
	TME_SPARC_IDLE_STOP().  Added TME_SPARC_HAVE_RECODE().  In struct
	tme_sparc, added an instruction burst count for when idle.  Now track
	the number of idle marks made since the last trap, and multiple idle
	PCs. 

	* ic/sparc/sparc-insns.c: Now include <tme/misc.h>. 
	Now define a constant TME_SPARC_VERSION() around the instructions for
	the different architectures. 
	In all of the sparc32 instructions, renamed TME_SPARC_TRAP_ to
	TME_SPARC32_TRAP_. 
	(tme_sparc32_rdpsr): Removed the sunos32-type-0 idle type detection. 
	This idle type is now detected only in tme_sparc32_wrpsr(). 
	(tme_sparc32_wrpsr): Reworked all sparc32 idle type detection that
	keys off of a wrpsr.  Now use TME_SPARC32_CWP_UPDATE(). 
	(tme_sparc32_rett):
	(tme_sparc32_save_restore): Now use TME_SPARC32_CWP_UPDATE(). 
	[TME_HAVE_INT64_T]: Added the sparc64 instructions. 

	* ic/sparc/sparc-misc.c (_tme_sparc_idle_reset): Added.  All functions
	that reset the idle state now call here. 
	(tme_sparc_thread): Added support for the new idle types. 
	(tme_sparc_new): Initialize the idle instruction burst size. 
	(tme_sparc32_trap):
	(tme_sparc64_trap): Traps always do a TME_SPARC_IDLE_STOP(). 
	(tme_sparc_ls_bus_fault): Fixed a bug where we wouldn't advance the
	cycle to get past the fault under TME_SPARC_LSINFO_NO_FAULT.  This
	caused fetches of annulled instructions that fault to loop forever. 
	(tme_sparc_fetch_nearby): Cleaned up the code that gets the current PC
	and the nearby PC, especially making sure that the offset remains
	signed after multiplying it by a sizeof(), and truncating the result
	to the correct address size.  Fixed a bug where we would assert() that
	the ITLB entry applies without checking if it's valid - for various
	reasons the ITLB might be the execute loop's itlb_invalid. 

	* ic/sparc/sparc-rc-insns.c (_tme_sparc_recode_recode): No longer
	check for the netbsd32-type-0 idle PC in a branch delay slot.  This
	idle type is now handled as a true idle loop in the execute loop. 

	* scsi/scsi-cdrom.c: Now handle
	TME_SCSI_CDB_CDROM_READ_DISC_INFORMATION and
	TME_SCSI_CDB_CDROM_CACHE_SYNC as illegal. 

	* tme/scsi/scsi-cdrom.h: Now define
	TME_SCSI_CDB_CDROM_READ_DISC_INFORMATION. 

Tue Sep 08 23:15:20 2009  Matt Fredette  <fredette@alum.mit.edu>

	* machine/sun4u/Makefile.am:
	* machine/sun4u/SUN-ULTRA-1: Added. 

Mon Sep 07 15:42:24 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/stp22xx/stp222x-main.c (_tme_stp222x_run): Fixed a bug where we
	would request the UPA bus for an interrupt dispatch even when we
	weren't ready to retry the dispatch. 

	* ic/stp22xx/stp22xx.c (tme_stp22xx_cond_sleep_yield): Fixed a bug
	where we wouldn't mark the condition as running under NDEBUG, before
	calling the run function.  If the condition was notified before the
	sleep, since it was still marked idle, it wouldn't be marked as
	notified, and the notify would be lost. 

	* libtme/host/x86/rc-x86-conds.c (tme_recode_host_conds_thunk_new):
	Use the new TME_SHIFT() macro when doing host-size shifts of a
	tme_recode_uguest_t, which may be smaller than host-size.  Fixed a bug
	emitting an %rip EA on an x86-64 host. 

	* libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_new):
	Use the new TME_SHIFT() macro when doing host-size shifts of a
	tme_recode_uguest_t, which may be smaller than host-size.  Fixed a bug
	where the test subs wasn't chaining to the main flags subs. 

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Fixed a
	bad double-host-size guest check. 

	* libtme/host/x86/rc-x86-rws.c (tme_recode_host_rw_thunk_new): When
	converting the guest address into the TLB entry page offset, do it at
	the smaller of the host size and the guest read/write address size. 
	(tme_recode_host_rw_thunk_dup): The sign-extension instruction can be
	four bytes, not only less. 

	* libtme/host/x86/rc-x86-subs-asm.S (tme_recode_x86_shift): We need to
	extend for all right shifts less than host size, not just those less
	than 32 bits, because the common shra-all code assumes that the
	destination is host-size.  This change only affected x86-64 hosts,
	which also had a REX bug. 

	* libtme/host/x86/recode-x86.c (_tme_recode_x86_emit_adjust_sp): Fixed
	a bug where we would overwrite the REX prefix on an x86-64 host. 
	(_tme_recode_x86_raw_reg_binop): Fixed another bug where we used
	addition instead of binary-OR to combine two overlapping values. 
	(tme_recode_host_ic_new): Fixed a TME_RECODE_REG_C inside a REX prefix
	macro. 
	Fixed a REX.B macro for an address that had a size.  When emitting the
	jump chain adjust of the c register, advance thunk_bytes normally,
	then assert that the value of TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT
	is correct, instead of using it to advance thunk_bytes.  Fixed another
	bug where we used addition instead of binary-OR to combine two
	overlapping values. 

	* tme/common.h (TME_SHIFT): Added. 

	* tme/host/recode-x86.h: An x86-64 host needs a larger value of
	TME_RECODE_HOST_INSN_SIZE_MAX. 

Tue Sep 01 00:54:01 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/Makefile.am: Added sparc-recode.c and stp103x.c to
	tme_ic_sparc_la_SOURCES.  Added sparc-vis-auto.c to BUILT_SOURCES. 
	Added sparc-vis-auto.sh and the sparc recode parts to EXTRA_DIST. 
	Added a target to make sparc-vis-auto.c. 

	* ic/sparc/cy7c601.c (tme_ic_,sparc,cy7c601): Initialize many new
	struct tme_sparc members with cy7c601-specific values. 

	* ic/sparc/mb86900.c (tme_ic_,sparc,mb86900): Initialize many new
	struct tme_sparc members with mb86900-specific values. 

	* ic/sparc/sparc-recode.c: Removed TME_SPARC_RECODE_PAGE_SIZE_LOG2 and
	TME_SPARC_RECODE_PAGE_SIZE.  We now use the ic's actual page size
	everywhere, instead of a fixed sparc recode page size.  The fixed
	sparc recode page size of 4KB forced writes to always be assisted when
	the ic had a larger page size, because DTLB entries for writing were
	never for a full page (since we made the fixed sparc recode page size
	the validity size for cacheable memory, DTLB entries were never bigger
	than that).  All users changed.  Moved _tme_sparc_recode_verify_on
	from sparc-rc-verify.c, and added _tme_sparc_recode_off. 
	Added sparc-rc-ls.c to the set of recode parts included for each
	architecture. 
	Now define TME_SPARC_RECODE_RW_THUNK_INDEX(). 
	(tme_sparc_recode): If recode is off, return immediately. 
	(tme_sparc_recode_dump_insns): Added support for read/write
	instructions. 
	(tme_sparc_recode_init): Allocate and initialize the read-uses
	records.  On a v9 CPU, %r1 through %r7 are addressed through recode
	register window two.  Set all of the recode TLB entry information for
	read/write instructions.  Call the architecture-specific
	initialization for loads and stores. 

	* ic/sparc/stp103x.c: Now define TME_STP103X_ICACHE_BLOCK_SIZE. 
	Reorganized struct tme_stp103x slightly, to put everything that is
	recode-verifiable first, and everything that is accessed by loads and
	stores last. 
	(_tme_stp103x_interrupt_check):
	(_tme_stp103x_flush): If we're replaying instructions, return
	immediately. 
	(_tme_stp103x_update_pstate): Fixed a bug where we wouldn't update the
	recode register window offsets. 
	(_tme_stp103x_rdpr): Added. 
	(_TME_SPARC_EXECUTE_OPMAP): Now use _tme_stp103x_rdpr. 
	(_tme_stp103x_ls_cycle_block_ld):
	(_tme_stp103x_ls_cycle_block_st): Save the block for verification. 
	(_tme_stp103x_new): Fixed a bug where we were only allocating a struct
	tme_sparc, and not the larger struct tme_stp103x.  Initialize
	_tme_sparc_ls_asi_misaligned.  Under _TME_SPARC_RECODE_VERIFY,
	initialize the recode verify sizes. 

	* ic/stp22xx/stp220x.c:
	* ic/stp22xx/stp222x-main.c: Removed some AUDITs. 

	* libtme/host/x86/rc-x86-rws.c: Fixed various bugs where we used a
	size with a TME_RECODE_X86_REX_B() that is for addressing. 
	(_tme_recode_x86_rw_tlb_ref): Fixed a bad assert(). 
	(tme_recode_host_rw_thunk_new): Added support for recode TLB entries
	with a 16-bit context. 
	Added support for offsetting the address when making the TLB entry
	index. 
	The recode TLB entries are now a found directly in the ic structure,
	not found through a pointer. 
	Now emit instructions to check a recode TLB entry's context.  Fixed
	bugs where we would emit a displacement-less EA when the lone base
	register is %bp or %r13. 
	In the double-host-size most-signficant write, we know that its size
	is TME_RECODE_SIZE_HOST. 
	Fixed a bug where we wouldn't do the double-host-size most-significant
	read first, before we destroy the host memory address register.  Fixed
	bugs where we would lose instructions because we forgot to finish and
	restart the thunk, or forgot to advance thunk_bytes. 

Mon Aug 31 02:23:41 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-rc-ls.c (TME_SPARC_RECODE_RW_FLAG): Removed. 
	(_tme_sparc_recode_ls_assist_check): Added. 
	(_tme_sparc_recode_ls_assist_ld) [_TME_SPARC_RECODE_VERIFY]:
	(_tme_sparc_recode_ls_assist_st) [_TME_SPARC_RECODE_VERIFY]: Call
	_tme_sparc_recode_ls_assist_check(). 
	(tme_sparc_recode_ls_tlb_update): Now take the struct tme_sparc_ls *,
	so we can get the DTLB entry directly.  Added tme_sparc_ireg_t casts
	to the DTLB address check, to avoid doing math in a wider
	tme_bus_addr_t. 
	Force assists for a DTLB entry if it uses special ASIs. 
	Improved the recode TLB entry read/write flags, including handling
	DTLB entries for no-fault loads, addresses with side-effects, and
	endianness changes.  Also, no longer check for DTLB entries that
	support the secondary address space, because we can't assist them
	(mostly because recode read/write instructions only have a single
	default context). 
	All sparc recode TLB entries have a 16-bit context, and update the
	context and the context mismatch read/write flag as needed. 
	(_tme_sparc_recode_ls_init): Improved how the read/write thunks are
	generated, and especially their read/write flags masks.  No longer
	make read/write thunks for accesses to secondary address spaces.  Make
	read/write thunks for no-fault loads. 

	* ic/sparc/sparc-rc-verify.c: Define a token for the replay ITLB
	entry. 
	(tme_sparc_recode_verify_begin): Set the token on the replay ITLB
	entry. 
	(_tme_sparc_recode_verify_init): Initialize the token for the replay
	ITLB entry, and mark it as valid. 

Mon Aug 31 01:58:38 2009  Matt Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Now only check framebuffer contents that
	may have been updated for changes. 

	* host/gtk/gtk-screen.c (_tme_gtk_screen_th_update): If the
	framebuffer needs a full redraw, force the next translation to
	retranslate everything. 
	(_tme_gtk_screen_mode_change): Now delay forcing the next translation
	until the next screen update. 

	* host/posix/posix-memory.c: Defined some macros for sizes of
	cacheables, and the writable TLB entry hash set. 
	Added struct tme_posix_memory_valids.  In struct tme_posix_memory,
	added a mutex.  Fixed a bug where the rwlock was a mutex.  Added
	pointers to any writable TLB entry hash set, a list of valids
	bitmasks.  Added members for the current writable TLB size, and our
	cacheable structure. 
	(_tme_posix_memory_tlbs_invalidate): Added. 
	(_tme_posix_memory_tlb_fill): If this memory is cacheable, return the
	cacheable structure in the TLB entry, and if this is a write, track
	the TLB entry in the hash set and clear the bit for the address' page
	in all valids bitmasks. 
	(_tme_posix_memory_valids_new):
	(_tme_posix_memory_valids_set): Added. 
	(tme_host_posix,memory): If the memory is cacheable, allocate the
	writable TLB entry set, initialize the valids list and the writable
	TLB size, and the cacheable structure. 

	* ic/sparc/sparc-execute.c: Now define TME_PRIxSPARCREG. 
	On sparc64, fixed the ASI mask code and set the default memory
	context. 
	[TME_HAVE_RECODE]: Set the default read/write flags for the current
	CPU state. 
	Instead of constructing the invalid ITLB entry, initialize its new
	token and set it on the entry.  Never acquire the external mutex, and
	only call the external check function if the external flag is set. 
	Now save the previous PC.  If we're replaying recoded instructions for
	the verifier, stop replaying if the previous PC was the last to
	replay.  Otherwise, poison it to prevent all recoding.  Added
	(tme_sparc_ireg_t) casts to the ITLB entry address checks, to avoid
	doing math in a wider tme_bus_addr_t.  Now use TME_SPARC_TLB_HASH()
	and TME_SPARC_ITLB_ENTRY() to get the ITLB entry from the array.  Now
	check the context on an ITLB entry.  Now, instead of filling the ITLB
	entry ourselves, just do a slow load of the instruction, which will
	take care of everything, including fetching the instruction into the
	memory buffer if needed.  Since idle loop detection can't take place
	in the instruction executor when recode is in use, moved the
	netbsd32-type-0 detection into tme_sparc32_wrpsr().  In the rare case
	that an annulled instruction is also a branch target
	(which can only happen if there are two branches in a row, where the
	second one annuls), make sure we don't try to recode starting at the
	annulled instruction. 
	Use TME_SPARC_G0_OFFSET(ic) to find the globals. 
	[TME_HAVE_RECODE]: Now recode instructions, run recoded instructions
	thunks, and replay the same instructions through the normal executor
	to compare the effects. 
	TME_SPARC_IREG_IMM has been replaced by TME_SPARC_IREG_TMP(0).  Added
	support for the sparc64 format two instructions.  Added support for
	the sparc64 %pstate.AM in the control transfers. 

	* ic/sparc/sparc-insns-auto.sh: Define _tme_sparc_float_null. 
	Now emit the fpop1 and fpop2 instructions.  Now emit instructions for
	sparc64, including the new sdivx, udivx, mulx, ldx, stx, ldxa, stxa,
	casxa, casa, and the alternate floating-point load and store
	instructions. 
	(_tme_sparc32_alternate_asi_mask): Get the flags for an ASI and build
	a mask using the new ASI-mask macros.  If this ASI has a special
	handler, force a slow load or store by making the ASI mask undefined. 
	(_tme_sparc64_alternate_asi_mask):
	(_tme_sparc${arch}_fpu_mem_fpreg): Added. 
	(tme_sparc${arch}_udiv):
	(tme_sparc${arch}_udivcc):
	(tme_sparc${arch}_sdiv):
	(tme_sparc${arch}_sdivcc): Trap on division by zero, and added
	overflow handling for the cc instructions.  Fixed a sparc64 bug where
	we would only set %icc.Z when the 64-bit result was zero. 
	In the load/store instructions, get the right address for the sparc64
	casa and casxa instructions, and when %pstate.AM is set.  Get the
	context for sparc64 alternate instructions.  Make a mask of ASI flags
	that will trigger a slow load/store.  Check the DTLB entry's context. 
	Added (tme_bus_addr${arch}_t) casts to the DTLB address check.  Check
	that the ASI mask in the DTLB entry allows fast transfers.  For a slow
	transfer, call the new tme_sparc${arch}_ls().  Now, allow the slow
	function to complete an alternate load.  Get the byte order of the
	access and do byteswapping as needed. 
	(tme_sparc${arch}_${insn}): Added support for the sparc64 %pstate.AM
	and possible address space hole. 
	(tme_sparc${arch}_ldf*):
	(tme_sparc${arch}_stf*): On sparc64, call the ASI misaligned function
	to see if the address is misaligned.  Before the memory access, now
	call _tme_sparc${arch}_fpu_mem_fpreg() to check for any traps and to
	get the floating-point register. 
	(tme_sparc${arch}_lddf*):
	(tme_sparc${arch}_stdf*): On sparc64, call the ASI misaligned function
	to see if the address is misaligned.  Before the memory access, now
	call _tme_sparc${arch}_fpu_mem_fpreg() to check for any traps and to
	get the floating-point register.  Added support for sparc64
	fully-aligned and 32-bit aligned accesses. 
	(tme_sparc${arch}_ldfsr):
	(tme_sparc${arch}_stfsr): Now check for traps with
	_tme_sparc${arch}_fpu_mem().  Added support for the sparc64 ldxfsr and
	stxfsr. 
	(tme_sparc${arch}_atomic): Added. 
	(tme_sparc${arch}_load):
	(tme_sparc${arch}_store): These functions are no longer called
	directly by instruction functions.  They now only do final loads and
	stores (as opposed to pre-access fault checking, DTLB filling, etc.). 
	(tme_sparc${arch}_ls): Added.  This is the function called by
	instruction functions to do a slow access.  This coordinates special
	ASIs, address mapping, DTLB filling, pre-access fault checking, and
	slow load, store, and atomic cycles. 

	* ic/sparc/sparc-misc-auto.sh: Define the sparc64 alternate, MMU, and
	interrupt globals.  Define TME_SPARC_IREG_INSN. 
	Replaced TME_SPARC_IREG_IMM with TME_SPARC_IREG_TMP().  Defined many
	sparc64 architected and internal registers. 

	* ic/sparc/sparc-misc.c (_tme_sparc_bus_signal): Now recognize the bus
	grant signal.  Now track both assertion and negation of halt and
	reset.  Changed the external signal indications to true atomic flags,
	and set the external atomic flag after any changes.  Moved the
	condition variable notify inside the mutex lock. 
	(_tme_sparc_bus_interrupt): Now update the external IPL value with an
	atomic write, and set the external atomic flag afterwards.  Moved the
	condition variable notify inside the mutex lock. 
	(tme_sparc_idle): Now call the ic-specific external check function,
	instead of the_sparc32_external_check(). 
	(tme_sparc_thread): Added support for TME_SPARC_MODE_OFF. 
	(_tme_sparc_generic_tlb_fill): Now take a tme_bus_addr_t.  Don't set
	the ASI mask any more, the slow load/store function has arranged or
	will arrange for it to be set. 
	(_tme_sparc_connection_score):
	(_tme_sparc_connections_new): Replaced bus connection TLB set allocate
	references with TLB set add references.  Added support for UPA bus
	connections. 
	(_tme_sparc_connection_make): Replaced bus connection TLB set allocate
	references with TLB set add references.  Added support for UPA bus
	connections.  Now initialize the TLB set and add it to the bus,
	getting the maximum context back in the v7 case. 
	(tme_sparc_new): Added support for the tick-frequency and
	prom-delay-factor options.  Initialize the cycles scaling.  The
	processor starts off.  Initialize the external state, CWP offsets and
	the ASI flags.  Initialize recoding. 
	(tme_sparc_redispatch):
	(tme_sparc32_trap_preinstruction): End any recode verifying. 
	(tme_sparc32_external_check): Now take a flag that says whether or not
	the external mutex is locked.  Update the new external state as
	needed. 
	(tme_sparc32_trap): End any recode verifying.  Now use
	TME_SPARC32_CWP_UPDATE() to update the CWP offsets, and
	TME_SPARC_REG_INDEX() to find %r17.  Now log traps. 
	(tme_sparc32_fetch_slow):
	(tme_sparc32_bus_fault): Removed. 
	(tme_sparc32_ls_bus_cycle):
	(tme_sparc32_ls_address_map):
	(tme_sparc32_ls_trap):
	(tme_sparc_nnpc_trap):
	(tme_sparc_ls_bus_fault):
	(tme_sparc64_trap_preinstruction):
	(tme_sparc64_trap):
	(tme_sparc64_trap_error_state): Added. 
	(tme_sparc_callout_relock): Now check the ITLB entry's context. 
	(tme_sparc32_dump): Replaced TME_SPARC_CWP_OFFSET() with hard-coded
	multiplications by 16. 
	(tme_sparc32_dump_memory): Converted into tme_sparc64_dump_memory(). 

	* ic/sparc/sparc-rc-insns.c: Removed TME_SPARC_RECODE_INSN_STORE;
	along with loads, stores are now detected by their
	TME_RECODE_OPCODE_RW opcode.  Added TME_SPARC_RECODE_INSN_UPDATE_INSN. 
	TME_SPARC_RECODE_INSN_ASSIST now includes
	TME_SPARC_RECODE_INSN_UPDATE_INSN.  Replaced
	TME_SPARC_RECODE_INSN_ASSIST_STORE with TME_SPARC_RECODE_INSN_ST, and
	added TME_SPARC_RECODE_INSN_LD and TME_SPARC_RECODE_INSN_LDA.  These
	are now used for the load and store instructions that can be recode
	read/write instructions, and TME_SPARC_RECODE_INSN_ASSIST_FULL |
	TME_SPARC_RECODE_INSN_NO_RD is used for stores (usually alternate
	stores) that can't be.  Fixed a bug where std and stda were missing
	TME_SPARC_RECODE_INSN_NO_RD. 
	casx and casxa are now TME_SPARC_RECODE_INSN_ASSIST_FULL. 
	(tme_sparc_recode_insn_assist_redispatch): Added, from the old
	_tme_sparc_recode_insn_assist_redispatch(), all callers changed.  Now
	check that the ITLB entry hasn't been poisoned by
	tme_sparc_callout_relock(), and that the remaining instruction burst
	is still nonzero. 
	(_tme_sparc_recode_insn_assist_store): Removed. 
	(_tme_sparc_recode_insn_assist_full): Now track statistics on assisted
	opcodes. 
	(_tme_sparc_recode_recode): Now use the ic's actual page size
	everywhere, instead of a fixed sparc recode page size.  The fixed
	sparc recode page size of 4KB forced writes to always be assisted when
	the ic had a larger page size, because DTLB entries for writing were
	never for a full page (since we made the fixed sparc recode page size
	the validity size for cacheable memory, DTLB entries were never bigger
	than that). 
	For the v9 movr, fixed bugs where we had the wrong opcode and didn't
	set the right conditions thunk.  Added support for the v9 ld*a
	instructions, because they may be used for speculative loads, which we
	do want to handle with recode read instructions. 
	For BPcc and Bicc, extract the branch displacement using 32-bit types
	for as long as possible.  Now test TME_SPARC_RECODE_INSN_UPDATE_INSN
	to see if an instruction always or sometimes needs an assist, instead
	of just checking for TME_RECODE_OPCODE_GUEST. 
	Fixed a bug in the v9 32-bit shifts where we put the extension source
	size in the immediate field, instead of the second source operand
	field. 
	Reused the old TME_SPARC_RECODE_INSN_STORE support for generating an
	assisted store for generating recode read/write instructions. 

Sun Aug 30 17:06:38 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-fpu-auto.sh (_tme_sparc_fpu_fcc_${precision}): Added
	support for the additional fccN on sparc64. 
	(tme_sparc_fpu_fpop[12]): Added support for encoded floating-point
	register numbers, recode verification, FMOV*cc, FxTO*, F*TOx, FNEGd,
	FABSd.  Now dirty any destination register. 

	* ic/sparc/sparc-impl.h: Replaced all of the old TME_SPARC_TRAP_
	macros with architecture-specific trap macros, whose values now
	include priority and other flags.  For those trap names that are
	common across architectures, a new TME_SPARC_TRAP() macro can be used
	to expand to the right value for the current architecture.  All users
	changed.  For sparc64, added the FPRS, TSTATE, WSTATE, VER, XCC, and
	VIS GSR fields, and added more PSTATE fields.  Added the sparc VIS
	ASIs. 
	Added macros for the SPARC integer conditions.  Added
	TME_SPARC_MODE_OFF and TME_SPARC_TL_MAX.  Added a set of macros for
	updating the register window offsets for a new CWP, that update
	separate offsets for the output, local, and input registers, and also
	the recode register window offsets.  This simplifies
	TME_SPARC_REG_INDEX.  Now that there are only flat DTLB and ITLB
	arrays, added a TME_SPARC_TLB_HASH() to hash an address into an array. 
	TME_SPARC_DTLB_ENTRY() and TME_SPARC_ITLB_ENTRY() now take one of
	these hashes, instead of an address.  The slow load and store
	functions, and any function that supports a slow load or store, now
	take an expanded set of information about the access. 
	Added macros for defining masks of load/store faults and memory
	features. 
	Now define TME_SPARC_FPU_FPREG_NUMBER_UNDEF, TME_SPARC_FPU_DIRTY(),
	and TME_SPARC_FPU_IS_DISABLED().  Fixed TME_SPARC_FORMAT3_RD_ODD() to
	take the register set name for the architecture. 
	Added TME_SPARC_INSN_FPU_ENABLED, which TME_SPARC_INSN_FPU now uses. 
	Removed TME_SPARC_INSN_FPU_STORE. 
	[TME_HAVE_RECODE]: Now define macros for sparc recode. 
	(tme_sparc_log_start): Fixed sparc64 support.  Now define macros for
	fixing PROM delay factors.  Now define TME_SPARC_MEMORY_FLAGS() and
	_TME_SPARC_MEMORY_FLAGS().  Removed TME_SPARC_ASI_DATA(). 
	Now typedef _tme_sparc64_format3 and _tme_sparc_ls_asi_handler.  Added
	struct tme_sparc_ls. 
	[TME_HAVE_RECODE]: Added struct tme_sparc_recode_cacheable.  In struct
	tme_sparc, added the cycles scaling, replaced the single CWP offset
	with individual offsets for the global, output, local, and input
	registers.  Added members for sparc64.  Expanded the
	implementation-dependent data and functions, especially for the new
	load/store architecture.  Retyped the instruction burst counters as
	tme_uint32_t, since recode requires that.  Replaced the old TLB entry
	set pointers with a single sparc TLB entry array and a complementary
	array of tokens or recode TLB entries.  Added per-ASI information, and
	members for memory context.  Added members for the new bus external
	interface.  Changed the memory buffer to be a union of all of the
	integral types.  Expanded the number of FPU registers and added the
	sparc64 XFSR.  Added the VIS state.  Fixed a bug where the sparc64
	idle PC was a tme_uint32_t.  Under [TME_HAVE_RECODE], added all of the
	state needed for sparc recode.  Added more statistics.  Changed many
	prototypes, generally for the new load/store architecture, trap
	changes, sparc recode verification, and sparc64 support. 

	* ic/sparc/sparc-vis-auto.sh (tme_sparc_vis)
	[TME_SPARC_RECODE_VERIFY]: Clear the rd buffer. 
	(_tme_sparc${arch}_vis_ls_cycle_pst${insn}): Fixed a bug where we
	would get bit two of the store mask instead of bit one. 
	(tme_sparc${arch}_vis_ls_asi_pst): Fixed some comments about trap
	handling, and check that our caller checked that the FPU is enabled
	and not in exception_pending mode. 
	(tme_sparc${arch}_vis_ls_asi_fl): Fixed some comments about trap
	handling, and check that our caller checked that the FPU is enabled
	and in execute mode. 
	(tme_sparc${arch}_vis_ls_asi_misaligned): Added. 

	* libtme/log-prf.c: Added support for two 'l' flags.  Use the new
	PRF_OUT_ARG_CODE() for each argument type found. 

	* libtme/log.c: Define macros for the argument type codes.  Define
	prf_lld(x) depending on whether or not long long int is supported, and
	_TME_LOG_IF_INT64_T() depending on whether or not tme_int64_t is
	supported.  Define _TME_LOG_ALIGN_ANY(). 
	Typedef tme_log_arg_code_t. 
	(LOG_PRF_LOCALS): Added support for two 'l' flags, and for long long
	int arguments. 
	(tme_output_append):
	(tme_output_append_error):
	(tme_output_prepend):
	(tme_output_prepend_error): Define a dummy PRF_OUT_ARG_CODE(). 
	(_tme_log_arg_code): Added. 
	(tme_log_part): Added support for binary mode logging.  Define a dummy
	PRF_OUT_ARG_CODE() for text mode logging. 

	* tme/kgdb.h: Added. 

	* tmesh/tmesh.c: Added macros, types, and globals for binary mode
	logging. 
	(_tmesh_log_output_binary): Added. 
	(_tmesh_log_open):
	(main): Added support for binary mode logging. 

Sun Aug 30 14:42:15 2009  Matt Fredette  <fredette@alum.mit.edu>

	* machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler):
	Changed some tme_bus_addr_t to tme_bus_addr32_t.  Now call
	_tme_sun2_mmu_context_user_set() on a write to the enable register, in
	case the boot state changed. 

	* machine/sun2/sun2-impl.h: In struct tme_sun2, removed the old
	"special ROM [reset] read bus cycles" support, and added a pointer to
	the m68k bus context register.  Removed the prototypes for
	_tme_sun2_mmu_tlb_set_allocate(), _tme_sun2_mmu_tlb_set_add(), and
	_tme_sun2_mmu_reset().  Added a prototype for
	_tme_sun2_mmu_tlb_set_add(). 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_command): No longer call
	_tme_sun2_mmu_reset(). 
	(_tme_sun2_connection_score):
	(_tme_sun2_connections_new): Replaced bus connection TLB set allocate
	references with TLB set add references. 
	(tme_machine_sun2): Initialize the m68k bus context register pointer. 

	* machine/sun2/sun2-mmu.c: Changed some tme_bus_addr_t to
	tme_bus_addr32_t.  Now define TME_SUN2_CONTEXT_COUNT. 
	(_tme_sun2_m68k_tlb_fill):
	(_tme_sun2_mmu_context_user_set): Now handle the boot state, and m68k
	TLB filling in general, more like how sun3 does. 
	(_tme_sun2_bus_tlb_fill): Now take a tme_bus_addr_t. 
	(_tme_sun2_mmu_tlb_set_allocate):
	(_tme_sun2_reset_cycle):
	(_tme_sun2_mmu_reset): Removed. 
	(_tme_sun2_mmu_tlb_set_add): Added. 
	(_tme_sun2_mmu_new): Now use TME_SUN2_CONTEXT_COUNT instead of a
	hard-coded 8. 

	* machine/sun3/sun3-control.c (_tme_sun3_memerr_test_cycle_handler):
	Now use tme_token_invalidate() instead of the removed
	tme_bus_tlb_invalidate(). 

	* machine/sun3/sun3-impl.h: In struct tme_sun3, added a pointer to the
	m68k bus context register, removed the boot state TLB entry tracking
	array, and track SDVMA TLB entry tokens instead of the TLB entries
	themselves.  Replaced the _tme_sun3_mmu_tlb_set_allocate() with the
	_tme_sun3_mmu_tlb_set_add() prototype. 

	* machine/sun3/sun3-mainbus.c (_tme_sun3_connection_score):
	(_tme_sun3_connections_new): Replaced bus connection TLB set allocate
	references with TLB set add references. 

	* machine/sun3/sun3-mmu.c: Changed some tme_bus_addr_t to
	tme_bus_addr32_t.  Now define TME_SUN3_CONTEXT_COUNT. 
	(_tme_sun3_tlb_fill): No longer track data TLB entries filled in the
	boot state.  Since there is no backing TLB entry concept any more, the
	memory error TLB entry pointer tracked is the real TLB entry pointer. 
	(_tme_sun3_bus_tlb_fill): Now take a tme_bus_addr_t.  Now track and
	invalidate SDVMA TLB entry tokens, instead of the TLB entries
	themselves.  Call tme_sun_mmu_context_add() to associate the SDVMA TLB
	entry with the current context. 
	(_tme_sun3_mmu_sdvma_change): Now invalidate the SDVMA TLB entry
	tokens, instead of the SDVMA TLB entries themselves. 
	(_tme_sun3_mmu_context_set): No longer invalidate boot-state data
	TLBs, and instead factor the boot state into the bus context presented
	to the m68k, but do invalidate all SDVMA TLBs that depended on the
	previous context. 
	(_tme_sun3_mmu_tlb_set_allocate): Removed. 
	(_tme_sun3_mmu_tlb_set_add): Added. 
	(_tme_sun3_mmu_new): Internal context zero is no longer used for the
	boot state. 

	* machine/sun4/sun4-impl.h: In struct tme_sun4, added a token for the
	cache internal TLB entry, a pointer to a v7 CPU bus context register,
	removed the boot state TLB entry tracking array, and track SDVMA TLB
	entry tokens instead of the TLB entries themselves.  Replaced the
	_tme_sun44c_mmu_tlb_set_allocate() with the
	_tme_sun44c_mmu_tlb_set_add() prototype.  In the
	_tme_sun44c_tlb_fill_bus() prototype, fixed a tme_uint32_t to a
	tme_bus_addr_t. 

	* machine/sun4/sun4-mainbus.c (_tme_sun4_connection_score):
	(_tme_sun4_connections_new): Replaced bus connection TLB set allocate
	references with TLB set add references. 

	* machine/sun4/sun44c-cache.c (_tme_sun44c_cache_cycle_bus):
	(_tme_sun44c_tlb_fill_cache): Now use tme_token_invalidate() instead
	of the removed tme_bus_tlb_invalidate(). 
	(_tme_sun44c_cache_new): Initialize the token and set it on the cache
	internal TLB entry. 

	* machine/sun4/sun44c-memerr.c (_tme_sun44c_memerr_cycle_bus):
	(_tme_sun44c_tlb_fill_memerr): Now use tme_token_invalidate() instead
	of the removed tme_bus_tlb_invalidate(). 

	* machine/sun4/sun44c-mmu.c: Changed some tme_bus_addr_t to
	tme_bus_addr32_t.  Now define TME_SUN44C_CONTEXT_COUNT_MAX. 
	(_tme_sun44c_tlb_fill_mmu): No longer track data TLB entries filled in
	the boot state. 
	(_tme_sun44c_tlb_fill_sparc): Now use TME_SPARC_ASI_MASK_SPECIAL() to
	make the ASI mask for control space. 
	(_tme_sun44c_tlb_fill_bus): Now take a tme_bus_addr_t.  Now track and
	invalidate SDVMA TLB entry tokens, instead of the TLB entries
	themselves.  Call tme_sun_mmu_context_add() to associate the SDVMA TLB
	entry with the current context. 
	(_tme_sun44c_mmu_sdvma_change): Now invalidate the SDVMA TLB entry
	tokens, instead of the SDVMA TLB entries themselves. 
	(_tme_sun44c_mmu_context_set): No longer invalidate boot-state data
	TLBs, and instead factor the boot state into the bus context presented
	to the SPARC, but do invalidate all SDVMA TLBs that depended on the
	previous context. 
	(_tme_sun44c_mmu_tlb_set_allocate): Removed. 
	(_tme_sun44c_mmu_tlb_set_add): Added. 
	(_tme_sun44c_mmu_new): Internal context zero is no longer used for the
	boot state. 

	* tme/Makefile.am: Added host and bus to SUBDIRS.  Added recode.h,
	token.h, and completion.h to pkginclude_HEADERS. 

	* tme/common.h: Added support for 64-bit byteswapping.  When
	tme_uint64_t is the gcc unsigned long long, define
	_TME_SHIFTMAX_INT64_T and TME_PRI64.  Now define size-specific printf
	formats. 

	* tme/connection.h: In struct tme_connection, added an opaque
	identifier for an element to use with its connections.  Now define
	TME_CONNECTION_BUS_UPA. 

	* tme/log.h: Added support for different log modes, and for the new
	binary log mode. 

	* tme/misc.h: Added tme_misc_cycles_scaling_t.  Added prototypes for
	tme_value64 tme_misc_cycles_scaled(), tme_misc_cycles_scaling(),
	tme_misc_cycles_per_ms(), and tme_misc_cycles(). 

	* tme/recode.h: Added macros, types, and other support for the
	read/write instructions. 
	Increased TME_RECODE_REG_GUEST_WINDOW_UNDEF from two to three, and
	redid tme register information window macros, for sparc64. 
	Added the read-uses records support. 

	* tme/token.h (tme_token_busy): Make a write-before-read barrier after
	setting the busy flag. 
	(tme_token_invalidate_nosync): Added. 

	* tme/host/recode-x86.h: Now define TME_RECODE_HOST_RW_THUNK, and
	macros for making the read/write flags. 
	In TME_RECODE_X86_IC, added a member for tracking any loaded register
	window offset around an if/endif. 

	* tme/ic/sparc.h: Redid the ASI mask system to work better for
	sparc64, which uses many more ASIs, many of which do the same address
	translation.  In struct tme_sparc_tlb, added a context member and a
	link member.  The latter is for linking the TLB entry to any real
	SPARC MMU object. 

	* tme/machine/sun.h: Removed the prototypes for
	tme_sun_mmu_tlbs_context_set() and tme_sun_mmu_tlb_set_allocate(), and
	added the prototypes for tme_sun_mmu_context_add(),
	tme_sun_mmu_context_switched(), and tme_sun_mmu_tlb_set_add(). 
	Added the prototype for tme_sun_cgsix(). 

Sat Aug 29 21:48:57 2009  Matt Fredette  <fredette@alum.mit.edu>

	* bus/multibus/3c400.c (_tme_3c400_tlb_fill): Truncate the address
	from the wider tme_bus_addr_t into a tme_bus_addr32_t local. 

	* bus/sbus/sun-fbs4.c (tme_bus_sbus,cgsix): Added. 

	* ic/am9513.c ic/isil7170.c ic/mm58167.c machine/sun/sun-bwtwo.c
	  tme/ic/am9513.h tme/ic/isil7170.h tme/ic/mk48txx.h tme/ic/z8530.h:

	  Changed some tme_bus_addr_t to tme_bus_addr32_t. 

	* ic/mk48txx.c: Now define the eight registers beginning with the
	watchdog register.  Changed some tme_bus_addr_t to tme_bus_addr32_t. 
	(TME_MK48TXX_REG_FIRST):
	(_tme_mk48txx_bus_cycle): Added support for the mk48t59. 
	(tme_ic_,mk48txx,mk48t59): Added. 

	* ic/ncr89c105.c ic/stp22xx/stp222x-impl.h ic/stp22xx/stp222x-iommu.c
	  ic/stp22xx/stp222x-stc.c ic/stp22xx/stp222x-timer.c
	  ic/stp22xx/stp22xx-impl.h ic/stp22xx/stp22xx.c:

	  Removed some AUDITs. 

	* ic/nec765.c: In struct tme_nec765, now store the i82077 DOR. 
	(_tme_nec765_reset): Fixed a bug where the second argument was
	supposed to be nonzero for a hard reset. 
	(_tme_nec765_bus_cycle): For the check interrupts command, return the
	current cylinder.  Added support for the calibrate command and the
	i82077 DOR register.  On a request master cycle, don't return that the
	controller is busy. 
	(tme_ic_,nec765,i82077): Added. 

	* ic/stp2024.c (_tme_stp2024_cycle_sbus): Fixed bugs where we were
	byteswapping values read, even though tme_bus_cycle_xfer_reg() takes
	care of that. 

	* ic/z8530.c: Changed some tme_bus_addr_t to tme_bus_addr32_t. 
	(_tme_z8530_callout): Now add TME_BUS_SIGNAL_EDGE to the interrupt
	callout. 

	* libtme/recode-notes.txt: Added. 

	* tme/generic/float.h: Now define TME_FLOAT_FORMAT_NULL. 

	* tme/generic/ic.h: Increased TME_IC_IREGS_SIZE. 

Sat Aug 29 19:47:52 2009  Matt Fredette  <fredette@alum.mit.edu>

	* generic/bus-device-auto.sh: Moved TME_BUS_ROUTER_INIT_INDEX to
	bus-device.h. 
	(tme_bus_device_dma_${name}_${i_width}): Replaced the old TLB entry
	reserve/back mechanism with passing the TLB entry's token and a simple
	structure copy. 

	* generic/bus-el.c (_tme_bus_tlb_set_allocate): Removed
	(_tme_bus_tlb_set_add): Added, from the old
	_tme_bus_tlb_set_allocate(). 
	(_tme_bus_connections_new): Provide _tme_bus_tlb_set_add() instead of
	_tme_bus_tlb_set_allocate(). 

	* generic/bus.c (tme_bus_tlb_set_allocate): Removed. 
	(tme_bus_tlb_set_add): Added, from the old tme_bus_tlb_set_allocate(). 
	(tme_bus_tlb_set_invalidate): Added. 
	(tme_bus_tlb_map): Fixed a bug where we were using a long to hold a
	bus address offset, instead of a tme_bus_addr_t. 
	(tme_bus_tlb_construct):
	(tme_bus_tlb_back):
	(tme_bus_tlb_invalidate): Removed.  Now a TLB's token, not an entry
	itself, is tracked by responders. 
	(tme_bus_tlb_initialize): Now initialize a TLB entry to be not
	cacheable. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Now get the
	instruction TLB entry directly.  Since TME_M68K_TLB_OK_FAST_READ was
	removed, manually check everything about the instruction TLB entry,
	including the new TLB context value.  Added some (tme_bus_addr32_t)
	casts as needed, to avoid doing wider math when tme_bus_addr_t is
	wider.  Replaced tme_bus_tlb_is_valid() and tme_m68k_tlb_is_valid()
	uses with tme_m68k_tlb_is_valid() and tme_m68k_tlb_is_invalid(). 

	* ic/m68k/m68k-impl.h (TME_M68K_TLB_ENTRY_SET):
	(TME_M68K_TLB_ENTRY): Removed. 
	(TME_M68K_DTLB_ENTRY): Added. 
	In struct tme_m68k, replaced the old TLB set pointers with an array of
	struct tme_m68k_tlb, and added the internal bus context register. 

	* ic/m68k/m68k-insns-auto.sh: In the memory access functions, now use
	TME_M68K_DTLB_ENTRY() instead of TME_M68K_TLB_ENTRY(), and get the
	ITLB entry directly.  Since the TME_M68K_TLB_OK_FAST_* macros were
	removed, manually check everything about a TLB entry, including the
	new TLB context value.  In the slow memory access functions, replaced
	tme_bus_tlb_is_valid() and tme_m68k_tlb_is_valid() uses with
	tme_m68k_tlb_is_valid() and tme_m68k_tlb_is_invalid().  Check the new
	TLB context value.  Added some (tme_bus_addr32_t) casts as needed, to
	avoid doing wider math when tme_bus_addr_t is wider. 

	* ic/m68k/m68k-misc.c (_tme_m68k_connection_score):
	(_tme_m68k_connections_new): The tme_bus_tlb_set_allocate member has
	been replaced by tme_bus_tlb_set_add. 
	(_tme_m68k_connection_make): Initialize the new TLB array and add it
	on the bus. 
	(tme_m68k_go_slow): Since TME_M68K_TLB_OK_FAST_READ was removed,
	manually check everything about the instruction TLB entry, including
	the new TLB context value.  Added some (tme_bus_addr32_t) casts as
	needed, to avoid doing wider math when tme_bus_addr_t is wider. 
	(tme_m68k_tlb_fill): Replaced a tme_bus_tlb_unbusy_fill() with a
	tme_m68k_tlb_unbusy()/tme_token_invalid_clear() pair.  Set the context
	on the TLB entry after it's returned.  Added some tme_bus_addr32_t
	casts. 
	(tme_m68k_callout_relock): Now get the instruction TLB entry directly. 
	Use tme_m68k_tlb_is_invalid() instead of tme_bus_tlb_is_invalid() and
	check that the TLB context is the right one. 
	(tme_m68k_rmw_start): Now use TME_M68K_DTLB_ENTRY() instead of
	TME_M68K_TLB_ENTRY(), and tme_m68k_tlb_busy() and
	tme_m68k_tlb_unbusy() instead of the plain bus versions.  Added some
	tme_bus_addr32_t casts, and check a TLB's bus context as needed. 

	* libtme/recode-insns.c (tme_recode_insns_thunk): Now generate
	read-uses records, which track read-uses counts for guest registers
	across different live regions in the instructions thunk (instead of
	just the entire thunk).  One live region for a guest register ends,
	and another begins, when a guest register is written or when all guest
	registers are flushed out.  Initial read-uses records are produced at
	a flush point, and write read-uses records are produced at a write. 
	The register allocator uses these records to update its read-uses
	counts when a live region changes. 
	Read/write instructions also need all flags flushed, since they may
	fault and never return. 

	* libtme/recode-regs.c (tme_recode_regs_host_free_many): When all host
	registers are freed, consume initial read-uses records to set the
	read-uses counts for all guest registers that have live regions
	beginning now. 
	(tme_recode_regs_dst_any): A write begins a new live region for the
	destination guest register, so consume a write read-use record to set
	the read-uses count for it. 
	(tme_recode_regs_dst_specific): When the specific host register
	already has a guest register, after writing it if it's dirty, don't
	move it into another host register if the guest register won't be read
	later. 
	A write begins a new live region for the destination guest register,
	so consume a write read-use record to set the read-uses count for it. 

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Fixed a
	bug when making a dummy high half of a double-host-size ia32 guest
	function argument, where we would add to %esp instead of subtracting
	from it. 
	(_tme_recode_x86_insn_rw): Added. 
	(_tme_recode_x86_insn_emit): When the first source operand is not
	zero, don't assume that it's a guest register when checking the
	opcode-makes-zero optimization.  For binary operations on an x86-64
	host, we can only emit an immediate whose one or two host-sized parts
	can be sign-extended from 32-bit parts.  On an ia32 host, we can
	always emit any immediate, even for a double-host-sized guest. 
	Added an optimization, where any current register window index is
	saved at an if branch, switched with any current register window index
	at an else branch, and compared to the current register window index
	at the endif.  Only if they are different is the current register
	window index invalidated.  This can often save a register window
	offset reload after an if/endif.  Now call _tme_recode_x86_insn_rw()
	for a read/write instruction. 

	* libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): When
	emitting a REX prefix for a register store, size may be
	double-host-size, so be sure to use the minimum of that and the host
	size. 

	* libtme/host/x86/recode-x86.c: Now define register macros for the XMM
	registers, and a generic undefined register number. 
	Define opcodes for ROR, MOV_Ib_Eb, REP, Group 15 instructions, and XMM
	move instructions. 
	(_tme_recode_x86_raw_reg_copy): Removed. 
	(_tme_recode_x86_raw_reg_binop): Added, from the old
	_tme_recode_x86_raw_reg_copy(). 
	(_tme_recode_x86_emit_reg_binop): Added, from the old
	_tme_recode_x86_emit_reg_copy(). 
	(_tme_recode_x86_emit_reg_copy): Now use
	_tme_recode_x86_emit_reg_binop(). 
	(_tme_recode_x86_emit_mul_constant): Added.  Now include
	host/x86/rc-x86-rws.c. 

	* machine/Makefile.am: Added sun4u to DIST_SUBDIRS. 

	* machine/sun/Makefile.am: Added sun-cgsix.c to
	libtme_machine_sun_la_SOURCES. 

	* machine/sun/sun-cgsix.c: Added. 

	* tme/generic/bus-device.h: Moved TME_BUS_ROUTER_INIT_INDEX here. 
	Added a prototype for tme_bus_device_tlb_set_add(). 

	* tme/generic/bus.h: Now define TME_BUS64_LOG2, TME_BUS128_LOG2,
	TME_BUS_SIGNAL_BR, and TME_BUS_SIGNAL_BG. 
	(tme_bus_tlb_is_valid):
	(tme_bus_tlb_is_invalid):
	(tme_bus_tlb_busy):
	(tme_bus_tlb_unbusy):
	(tme_bus_tlb_unbusy_fill): Now use the corresponding token macros with
	the TLB entry's token. 
	(_tme_bus_tlb_busy_change):
	(_TME_BUS_TLB_OK):
	(TME_BUS_TLB_OK_FAST_READ):
	(TME_BUS_TLB_OK_FAST_WRITE):
	(TME_BUS_TLB_OK_SLOW_READ):
	(TME_BUS_TLB_OK_SLOW_WRITE): Removed.  Now define bus-size-specific
	bus address types, and define tme_bus_addr_t to be the largest needed
	bus address type.  Now define tme_bus_context_t, struct
	tme_bus_cacheable, and struct tme_bus_tlb_set_info.  In struct
	tme_bus_tlb, replaced the members for the old busy and invalid
	mechanism with a pointer to the TLB entry's token.  Added a pointer
	for a TLB entry's cacheable information.  Now that a TLB set (with its
	bus context register pointer) is added to a bus connection instead of
	allocated by it, replaced the old allocate function pointer with an
	add function pointer in struct tme_bus_connection, and replaced the
	tme_bus_tlb_set_allocate() prototype with one for
	tme_bus_tlb_set_add().  Removed the prototypes for the old TLB entry
	saving, invalidating, and initializing functions. 

	* tme/ic/m68k.h (TME_M68K_TLB_OK_FAST_READ):
	(TME_M68K_TLB_OK_FAST_WRITE):
	(TME_M68K_TLB_OK_SLOW_READ):
	(TME_M68K_TLB_OK_SLOW_WRITE): Removed. 
	(tme_m68k_tlb_busy):
	(tme_m68k_tlb_unbusy): Now use the corresponding token macro, on the
	token directly in the TLB entry. 
	(tme_m68k_tlb_is_valid):
	(tme_m68k_tlb_is_invalid): Added.  Added a token and a bus context to
	struct tme_m68k_tlb. 

Sat Aug 29 01:35:17 2009  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/misc.c (_tme_misc_number_parse): Changed the G, M, and K
	units from the powers of two to the powers of ten. 
	(tme_misc_cycles_scaled):
	(tme_misc_cycles_scaling):
	[!TME_HAVE_MISC_CYCLES_PER_MS] (tme_misc_cycles_per_ms):
	[!TME_HAVE_MISC_CYCLES] tme_misc_cycles(): Added. 

	* libtme/host/x86/Makefile.am: Added misc-x86.c to EXTRA_DIST. 

	* libtme/host/x86/rc-x86-flags.c (_tme_recode_x86_flags_shift_add_add):
	In addition to when the shift count is more than three, also do all
	shifting when an shl instruction when there is no constant and no
	addend register. 

Fri Aug 28 01:50:09 2009  Matt Fredette  <fredette@alum.mit.edu>

	* generic/bus-device.c (tme_bus_device_tlb_set_add): Added. 
	* host/gtk/gtk-display.h: Added tme_gtk_screen_full_redraw to struct
	tme_gtk_screen. 

	* ic/ieee754/ieee754-ops-auto.sh: Now emit an op for to_int64. 

	* ic/sparc/sparc-rc-cc.c (_tme_sparc_recode_cc_init): Fixed bugs where
	we weren't shifting the raw CCR and RCC register numbers to agree with
	their eight-bit size.  Fixed a bug where we weren't making the
	conditions thunk for the internal RCC register. 

	* libtme/recode-impl.h: Added prototypes for
	tme_recode_host_rw_thunk_new() and tme_recode_host_rw_thunk_dup(). 

Thu Aug 20 22:45:50 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-rc-verify.c: Moved TME_SPARC_RECODE_VERIFY_IC_SIZE
	before the TLBs.  Added TME_STP103X_BLOCK_FPREGS_DOUBLE and struct
	tme_sparc_recode_verify_mem_block, for verifying block loads and
	stores. 
	In struct tme_sparc_recode_verify_mem, now track the PC for an access,
	and any block load and store information.  Changed all sparc state
	globals to be the new struct tme_sparc_recode type, which includes
	space for an IC-specific extension. 
	(_tme_sparc_recode_verify_mem_block):
	(tme_sparc_recode_verify_mem_block): Added. 
	(tme_sparc_recode_verify_mem): Now verify the PC of an access, and any
	block load and store. 
	(tme_sparc_recode_verify_reg_tick):
	(tme_sparc_recode_verify_reg_tick_now): Added. 
	(tme_sparc_recode_verify_begin): Now copy any IC-specific extension
	into the input and replay states.  Now make the ITLB entry that the
	replay will use, from the last ITLB entry used in the input state, and
	also make one for tme_sparc_recode_insns_dump(). 
	(tme_sparc_recode_verify_end): Now throw away any memory records for a
	trapping PC.  Clear the log level while replaying.  Make the ITLB
	entry that replay used unusable again.  Added more registers and
	controls to ignore.  Now verify any IC-specific extension.  Added
	support for sparc64 register windows.  Make sure we verified all of
	the memory records. 
	(tme_sparc_recode_verify_init): Check the verify and total sizes for
	this IC.  Initialize all of the replay state TLB entries to be
	unusable. 

Thu Jun 18 01:16:53 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/ad184x.c ic/stp2024.c ic/sparc/sparc-kgdb.c
	  ic/sparc/sparc-vis-auto.sh ic/sparc/sparc-vis.c:

	  Added. 

	* ic/sparc/sparc-rc-verify.c: Moved _tme_sparc_recode_verify_on to
	sparc-recode.c. 
	(tme_sparc_recode_verify_mem): Fixed a bug where this was always
	passed an ASI mask, but we thought it got an ASI. 
	(_tme_sparc_recode_verify_change): Added. 
	(tme_sparc_recode_verify_begin): Now call
	_tme_sparc_recode_verify_change() to turn verifying on or off.  Now
	set the recode IC in the replay state. 
	(tme_sparc_recode_verify_end): No longer override changes to the old
	TLB array pointers.  Turned the override of the memory buffer into a
	struct assignment.  No longer use TME_SPARC_CWP_OFFSET(). 
	(tme_sparc_recode_insns_dump): Now use TME_SPARC_TLB_HASH() and
	TME_SPARC_ITLB_ENTRY() to get the instruction TLB entry. 

	* ic/sparc/stp103x.c: Removed the TME_STP103X_TTE_TAG_ macros, since
	they weren't being used. 
	Now define TME_STP103X_ASI_DCACHE_DATA, TME_STP103X_ASI_DCACHE_TAG,
	and TME_STP103X_ASI_BLK_COMMIT.  Now define TME_STP103X_BLOCK_SIZE and
	TME_STP103X_BLOCK_FPREGS_DOUBLE.  Moved the GSR value from struct
	tme_stp103x to struct tme_sparc.  All users changed. 
	Added a missing static to _TME_SPARC_EXECUTE_OPMAP.  Added
	tme_sparc64_vis_ls_asi_pst and tme_sparc64_vis_ls_asi_fl to
	_tme_stp103x_ls_asi_handlers[]. 
	(_tme_stp103x_update_pstate): Fixed bugs where we weren't clearing all
	of the global-register-selection bits in the PSTATE value before using
	+ to set new bits.  Now check that the selection isn't reserved. 
	(_tme_stp103x_impdep1): Added support for the VIS instructions. 
	(_tme_stp103x_tlb_invalidate): Added. 
	(_tme_stp103x_ls_cycle_quad): Fixed a bug where weren't checking the a
	fast transfer TLB for a quad's worth.  Now use the
	TME_SPARC_LSINFO_ENDIAN_LITTLE indication from tme_sparc64_load(),
	instead of figuring it out ourselves. 
	(_tme_stp103x_ls_asi_quad): Fixed a bug where we were checking for an
	stda instruction instead of an ldda instruction. 
	(_tme_stp103x_ls_asi_tsb_ptr): Fixed a bug where we weren't shifting
	the tag access register image into a TSB entry offset. 
	(_tme_stp103x_ls_asi_tlb_data_in): Fixed a bug where we weren't
	invalidating a TLB entry before replacing it. 
	(_tme_stp103x_ls_asi_mmu_demap): Now use _tme_stp103x_tlb_invalidate()
	to invalidate TLB entries. 
	(_tme_stp103x_ls_asi_dcache): Separate the code that handles writing
	zero to a tag and the code that handles the special PROM writes. 
	Added support for reading tags, always as zero. 
	(_tme_stp103x_block_buffer_bswap):
	(_tme_stp103x_ls_cycle_block_ld):
	(_tme_stp103x_ls_cycle_block_st):
	(_tme_stp103x_ls_asi_block): Added. 
	(_tme_stp103x_new): Now initialize tme_sparc_vis_ls_fault_illegal. 
	Added support for ASI_NUCLEUS_QUAD_LDD_LITTLE and the VIS partial
	store and short load ASIs. 

	* ic/stp22xx/Makefile.am: Added stp222x-impl.h to EXTRA_DIST. 

	* ic/stp22xx/stp220x.c: Added a missing static to
	_tme_stp2210_mc124x9_subregion. 
	(_tme_stp220x_tlb_fill_transition): Fixed a bug where we would return
	a TLB entry that could handle read and write cycles, even if the
	old-style TLB entry didn't support what the caller wasn't filling for. 

	* ic/stp22xx/stp222x-impl.h: Now track the active IDIs in struct
	tme_stp222x.  Added a prototype for tme_stp222x_mdu_intcon(). 

	* ic/stp22xx/stp222x-main.c: Changed the obio offset for the audio IDI
	to zero, to match the new stp2024 emulation. 
	(_tme_stp222x_signal): Now call tme_stp222x_mdu_intcon() to handle an
	interrupt signal. 
	(_tme_stp222x_tlb_fill_transition): Fixed a bug where we would return
	a TLB entry that could handle read and write cycles, even if the
	old-style TLB entry didn't support what the caller wasn't filling for. 

	* ic/stp22xx/stp222x-mdu.c: Added the TME_STP222X_MDU_IDI_TEST macro. 
	(tme_stp222x_mdu_intcon): Added. 
	(tme_stp222x_mdu_regs_clear): If the IDI is being updated to received,
	or if the IDI is still active in the interrupt contentrator, mark the
	IDI is received. 

	* ic/stp22xx/stp22xx.c (tme_stp22xx_enter_master)
	[TME_STP22XX_BUS_TRANSITION]: Before we enter, if we were making a bus
	master cycle callout, find the completion and force it to be valid,
	since the transition code may not get a chance to do that before we
	are reentered by another master. 
	(tme_stp22xx_slave_cycle) [TME_STP22XX_BUS_TRANSITION]: Before we make
	a bus master cycle callout, assume that the callout will complete
	without error.  When the callout returns, validate the completion only
	if tme_stp22xx_enter_master() didn't do it. 

Tue Jun 16 00:31:33 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/Makefile.am: Added stp22xx, ncr89c105, stp2024, and ad184x. 

Tue May 05 22:12:56 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/stp22xx/stp222x-iommu.c:
	* ic/stp22xx/stp222x-stc.c: Added. 

Sat Feb 28 16:48:11 2009  Matt Fredette  <fredette@alum.mit.edu>

	* ic/ncr89c105.c ic/sparc/stp103x.c ic/stp22xx/Makefile.am
	  ic/stp22xx/stp220x.c ic/stp22xx/stp222x-asearch.c
	  ic/stp22xx/stp222x-aspace.c ic/stp22xx/stp222x-impl.h
	  ic/stp22xx/stp222x-main.c ic/stp22xx/stp222x-mdu.c
	  ic/stp22xx/stp222x-timer.c ic/stp22xx/stp22xx-impl.h
	  ic/stp22xx/stp22xx.c libtme/host/x86/misc-x86.c tme/completion.h
	  tme/bus/Makefile.am tme/bus/upa.h:

	  Added. 

Fri Oct 03 00:48:18 2008  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-insns-auto.sh: In the load and store functions, added
	support for verifying and replaying transfers for recode.  In the slow
	load and store functions, a TLB entry now has a token pointer that is
	always defined, and we no longer have the tme_bus_tlb_global to point
	a TLB entry back to itself.  When recode is supported, call a function
	to update the corresponding recode TLB entry. 

Wed Sep 24 23:04:32 2008  Matt Fredette  <fredette@alum.mit.edu>

	* Makefile.am (dist-hook): Now remove any
	${distdir}/libtme/recode-host.c. 

	* ic/sparc/sparc-rc-ls.c libtme/recode-rws.c libtme/token.c
	  libtme/host/Makefile.am libtme/host/x86/Makefile.am
	  libtme/host/x86/rc-x86-rws.c tme/token.h tme/host/Makefile.am:

	  Added. 

	* libtme/host/x86/Makefile: Removed. 

	* tme/memory.h: Added tme_shared to the definition of
	tme_memory_atomic_flag_t, and removed the requirement that a lock be
	gived in calls to tme_memory_atomic_read_flag() and
	tme_memory_atomic_write_flag().  Added tme_memory_atomic_init_flag(). 

	* tme/generic/fb.h: Added members for the first and last bytes updated
	in the real framebuffer memory. 

Wed Jul 02 00:01:39 2008  Matt Fredette  <fredette@alum.mit.edu>

	* libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_jump): A
	TME_RECODE_OPCODE_JUMP instruction now always jumps somewhere.  Any
	alternate jump is taken if the jump recode flag is set.  A jump jumps
	to the instructions thunk epilogue if it can't be chained, otherwise
	it jumps to the jump-chain sub. 
	(_tme_recode_x86_insn_size_max_check): Added. 
	(tme_recode_host_insns_thunk_new): Now call
	tme_recode_insns_thunk_invalidate_all() when there is no space for
	another instructions thunk. 

	* libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): Fixed a
	bug found by -Wuninitialized where we wouldn't initialize
	reg_x86_other for loads. 

	* libtme/host/x86/recode-x86.c (tme_recode_host_ic_new): The new
	TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT offset in the jump chain subs
	is used when the address of the jump to chain is already in the c
	register, and the zero offset in the subs is used when the address of
	the jump to chain is at the c register plus six
	(the size of the 32-bit conditional alternate jump).  After the
	indirect jump at the end of the jump chain subs, emit an undefined
	instruction, to avoid unnecessary speculation by the CPU.  No longer
	set the first variable thunk offset; machine-independent code does
	that. 
	Call _tme_recode_x86_insn_size_max_check(). 

	* tme/recode.h: Now define the TME_RECODE_JUMP_ options.  Now define
	TME_RECODE_INSNS_THUNK_INSNS_MAX.  Added the
	tme_recode_ic_thunk_off_variable member.  Added a prototype for
	tme_recode_insns_thunk_invalidate_all(). 

	* tme/host/recode-mmap.h: Now define TME_RECODE_HOST_THUNK_SIZE_MAX. 

	* tme/host/recode-x86.h: Replaced TME_RECODE_HOST_THUNK_INSNS_MAX with
	TME_RECODE_HOST_INSN_SIZE_MAX and moved TME_RECODE_HOST_THUNK_SIZE_MAX
	to the host recode header that is providing the instructions thunk
	memory.  Replaced the tme_recode_x86_ic_thunk_off_variable member with
	a machine-independent member. 

Tue Jul 01 02:02:57 2008  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-rc-insns.c: Removed
	TME_SPARC_RECODE_INSN_NO_UPDATE_PC_NEXT, since instructions that need
	to update PC_next, now update both PC and PC_next themselves, instead
	of relying on TME_SPARC_RECODE_INSN_UPDATE_PCS.  Updated the recode
	state flags for jumps.  In various places, now track some statistics. 
	(_tme_sparc_recode_insn_assist_redispatch): Added. 
	(_tme_sparc_recode_insn_assist_store):
	(_tme_sparc_recode_insn_assist_full): Before returning, call
	_tme_sparc_recode_insn_assist_redispatch(), which will redispatch and
	not return if the recode page for the instructions thunk is no longer
	valid. 
	[_TME_SPARC_STATS] (_tme_sparc_recode_insns_total): Added. 
	(_tme_sparc_recode_recode): Don't update PC and PC_next automatically
	at the beginning of each instructions thunk, just to make PC valid
	from PC_next.  Instead, track where the valid PC is, and update them
	only for full assists and control transfer instructions.  Now
	calculate the worst-case position in the recode instructions buffer,
	past which we may not be able to recode another instruction.  In a few
	places where we have to immediately stop recoding, we may have recoded
	no instructions at all for the thunk.  In this case, return zero
	instead of calling abort().  It was too hard to get
	TME_SPARC_RECODE_INSN_NO_UPDATE_PC_NEXT to work all of the time, so
	now everywhere we need to update PC_next, update both PC and PC_next. 
	Now set the new recode flags for jumps, for the control transfer
	instructions. 
	Fixed a bug where we would emit a sethi instruction even if it is
	annulled in the delay slot of an unconditional branch.  At the end of
	the instructions thunk, emit a TME_RECODE_OPCODE_JUMP instruction. 

	* ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_failed): No
	longer abort(), so we can continue if needed. 
	(tme_sparc_recode_verify_begin): Added support for turning
	verification on and off. 
	(tme_sparc_recode_verify_end): Added more fields to ignore in the bulk
	comparison. 
	(tme_sparc_recode_insns_dump): Added. 

	* ic/sparc/sparc-recode.c: Moved the #include of the verify code after
	tme_sparc_recode_invalidate_all().  Renamed the
	tme_sparc_recode_src_key_offset_chain member to
	tme_sparc_recode_chain_src_key_offset. 
	(tme_sparc_recode_invalidate_all): Added. 
	(_tme_sparc_recode_jump_chain) [_TME_SPARC_RECODE_VERIFY]: Stop
	chaining only if the verifier is on. 
	(tme_sparc_recode): Now save the cacheable recode page.  While an
	instructions thunk is running, it may need to confirm that its page is
	still valid. 
	(tme_sparc_recode_dump_insns): Updated the dump of
	TME_RECODE_OPCODE_JUMP instructions. 

	* libtme/recode-conds.c (tme_recode_conds_thunk): Make sure the first
	variable thunk goes after this conditions thunk. 

	* libtme/recode-flags.c (tme_recode_flags_thunk): Make sure the first
	variable thunk goes after any instructions added for a flags thunk. 

	* libtme/recode-ic.c (tme_recode_ic_new): Make sure the first variable
	thunk goes after any thunks made by tme_recode_host_ic_new(). 

	* libtme/recode-impl.h: Renamed tme_recode_host_thunk_flush_all() to
	tme_recode_host_thunk_invalidate_all(). 

	* libtme/recode-insns.c (tme_recode_insns_thunk): Fixed a comment. 
	(tme_recode_insns_thunk_invalidate_all): Added. 

	* libtme/host/recode-mmap.c (tme_recode_host_thunk_flush_all): Renamed
	to tme_recode_host_thunk_invalidate_all(). 

	* libtme/host/x86/rc-x86-conds.c (tme_recode_host_conds_thunk_new): No
	longer update the removed tme_recode_x86_ic_thunk_off_variable member. 

	* libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_new):
	(_tme_recode_x86_flags_thunk_chain): No longer update the removed
	tme_recode_x86_ic_thunk_off_variable member. 

Mon Jun 30 22:42:10 2008  Matt Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-screen.c (_tme_gtk_screen_new): Fixed the
	gtk_window_set_policy() arguments, so the top-level window always
	grows and shrinks automatically. 

Sun Jun 01 23:25:11 2008  Matt Fredette  <fredette@alum.mit.edu>

	* ic/sparc/sparc-rc-cc.c ic/sparc/sparc-rc-insns.c
	  ic/sparc/sparc-rc-verify.c ic/sparc/sparc-recode.c
	  libtme/recode-conds.c libtme/recode-flags.c libtme/recode-ic.c
	  libtme/recode-impl.h libtme/recode-insns.c libtme/recode-regs.c
	  libtme/host/recode-mmap.c libtme/host/x86/Makefile
	  libtme/host/x86/rc-x86-conds.c libtme/host/x86/rc-x86-flags.c
	  libtme/host/x86/rc-x86-insns.c libtme/host/x86/rc-x86-regs.c
	  libtme/host/x86/rc-x86-subs-asm.S libtme/host/x86/recode-x86.c
	  tme/recode.h tme/host/recode-mmap.h tme/host/recode-x86.h:

	  Added. 

Thu Sep 06 23:35:41 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* Release 0.6 out.

	* TODO: Updated. 

	* ic/ncr53c9x.c: Fixed some comments. 
	(_tme_ncr53c9x_scsi_cycle): When we transfer in from the SCSI bus, if
	we need to detect the the transfer residual based on the data
	transferred, try to update the transfer residual. 

	* machine/sun4/sun44c-mmu.c (_tme_sun44c_buserr_common): A bus error
	that is asynchronous for the CPU isn't reported as a hard fault to the
	CPU, but if the initiator is another bus master, it is reported to
	that master as a hard fault. 

	* scsi/scsi-tape.c (tme_scsi_tape_cdb_xfer0): In the NetBSD PR
	pkg/34536 hack, only clear the Illegal Length Indicator (ILI) flag. 
	More importantly, this preserves the filemark flag, which is needed
	for SunOS tape installs to work. 

Sun Aug 26 14:02:04 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* configure.in: Bumped version to 0.6. 
	Now check for the alignment of long, when it's 64 bits.  Added support
	for sun4 systems. 

	* ic/ieee754/ieee754-precision.sh: Added some missing ${prefix}es to
	the variable names in the precision-independent statements. 

Sat Aug 25 23:12:31 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb.c (_tme_fb_xlat_colors_get_set): If the colors that the
	destination framebuffer needs to allocate don't depend on the source
	framebuffer, return a colorset signature that destination framebuffers
	can use to avoid reallocating the same set of colors repeatedly.  When
	the number of colors to allocate is clearly more than the destination
	could ever allocate, and source pixels are mapped to intensities,
	remove some of the less significant bits of the source intensities to
	reduce the number of colors needed.  Now give a distinct pixel value
	for each distinct color we ask for, especially when we're asking for a
	lot of duplicate colors as the result of reducing the range of the
	source intensities (see above). 

	* host/gtk/gtk-display.c (_tme_gtk_display_menu_radio): Added. 

	* host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Now only
	reallocate the GdkImage when the framebuffer size changes, and the
	colors when the final mapping from source color to destination pixel
	changes.  When allocating colors, now only allocate distinct colors. 
	(_tme_gtk_screen_submenu_scaling): Added. 
	(_tme_gtk_screen_new): Now use _tme_gtk_display_menu_radio() to create
	the scaling submenu. 

	* ic/i825x6.c: Added a union to fix an aliasing problem with
	TME_I825X6_RX_BUFFER_NEXT().  From skrll@netbsd.org. 
	(_tme_i825x6_rx_buffers_add): Now busy a TLB before checking if it's
	valid and useful, and unbusy it for filling if it's not.  After
	filling it, loop to busy and check it again.  When we're done with the
	TLB entry, unbusy it. 
	(_tme_i825x6_callout_ca): When the receive unit is being started,
	always abort it first, unless it was already idle.  Before, we
	wouldn't abort it if it was out of resources, which was wrong since
	it's possible to run out of receive frame descriptors but not receive
	buffers. 
	(_tme_i825x6_callout_cu): Don't abort() for a DIAGNOSE command.  From
	sigmfsk@aol.com in NetBSD PR pkg/35305. 
	(_tme_i825x6_signal): Don't assume that xor-ing the level out of the
	signal value leaves only the base signal; use TME_BUS_SIGNAL_WHICH()
	instead. 
	(_tme_i825x6_read): Keep track of the transmit packet's size in a new
	variable, since the DMA read and write helper macros destroy rc.  From
	sigmfsk@aol.com in NetBSD PR pkg/35305. 

	* ic/z8530.c (_tme_z8530_channel_reset): On a hardware reset, clear
	the IUS bits and reset RR2.  Now take a pointer to the structure for
	the whole chip, since some registers are common to both channels.  All
	callers changed. 
	(_tme_z8530_channel_init): Now take a pointer to the structure for the
	whole chip, since some registers are common to both channels.  All
	callers changed. 
	(_tme_z8530_rr0_update): Fixed a bug where we would use the RR15 value
	where we meant to use the WR15 value. 
	(_tme_z8530_rr2_update):
	(_tme_z8530_int_pending): Added. 
	(_tme_z8530_intack): Now use _tme_z8530_int_pending() to see if an
	interrupt is pending, and call _tme_z8530_rr2_update() to update RR2
	and get the vector to use.  Now check a socket flag to see if the IEI
	pin is tied low. 
	(_tme_z8530_callout): Now use _tme_z8530_int_pending() to see if an
	interrupt is pending. 
	(_tme_z8530_bus_cycle): When an interrupt is acknowledged, call
	_tme_z8530_rr2_update() to update RR2. 

	* ic/m68k/m6888x-auto.sh: No longer use the IEEE754 sub function to
	implement fcmp, use a specific m6888x function instead. 

	* ic/m68k/m6888x.c (tme_m68k_fpgen): Fixed a bug where a byte or word
	source operand in a register would get sign-extended and stored back
	into the register, destroying the other parts of the register. 
	(_tme_m6888x_fcmp): Added. 
	(tme_m68k_fmove_rm): We don't use TME_M68K_INSN_OP1(), so there's no
	need to set _op1. 
	(tme_m68k_fmovem): Fixed a serious bug where we wouldn't advance the
	effective address after storing the last 32-bit word of a register's
	value. 
	(tme_m68k_fsave): Fixed a buffer overflow bug where we could write the
	BIU flags outside of the frame structure. 

	* ic/m68k/m68k-insns-auto.sh: The cmpm, addx, and subx instructions
	access the source operand before the destination operand, and we had
	it backwards.  Now generate the wrapper functions for a move of an
	address register to a predecrement or postincrement EA with that same
	address register. 
	(tme_m68k_movem_${name}${size}): Now calculate the total size of the
	transfer early, so we can correctly emulate the behavior of storing
	the same address register used in a predecrement EA on the different
	CPUs. 
	(tme_m68k_moves${size}): Now when storing the same address register
	used in a predecrement EA, store the original value.  The BCD math
	functions can only fault when they access memory, and they must
	advance an address register right after it's used, in case the same
	address register is used for the other operand. 

	* ic/m68k/m68k-insns.c (tme_m68k_tas): Removed the
	TME_M68K_INSN_CANFAULT, since tme_m68k_rmw_start() does this if
	needed. 
	(tme_m68k_cmp2_chk2): Fixed several bugs.  From sigmfsk@aol.com in
	NetBSD PR pkg/33969. 

	* ic/m68k/m68k-iset-expand.pl: As a special exception, expand a move
	instruction that moves an address register into a predecrement or
	postincrement EA with the same address register, to use a move wrapper
	function. 

	* ic/m68k/m68k-iset.txt: Fixed a bug in decoding cas instructions -
	their size field actually doesn't work like any other. 

	* ic/m68k/m68k-misc.c (tme_m68k_go_slow): Only make the first and last
	valid fast pointers from the TLB entry if it supports fast reading. 
	(tme_m68k_rmw_start): Fixed a bug where we would mark an instruction
	as possibly faulting, even when we wouldn't make any normal bus cycle
	calls. 
	Corrected a byteswapping macro. 
	(tme_m68k_rmw_finish): Corrected a byteswapping macro. 

	* ic/m68k/m68k-opmap-make.pl: Now recognize the
	move-same-address-register-to-predecrement and -postincrement
	functions wherever the move function is recognized. 

	* libtme/threads-sjlj.c: In struct tme_sjlj_thread, when GTK is in use
	track the current timeout handle, and have space for some fixed
	timeout handles.  We no longer track a single timeout tag, since
	removing a timeout that hasn't fired yet may not prevent it from
	firing.  Now, for each file descriptor, track a different thread for
	each file descriptor condition. 
	(tme_sjlj_threads_init): Initialize the file descriptor condition to
	threads mapping. 
	(tme_sjlj_dispatch_timeout) [HAVE_GTK]: Now remove no longer used
	timeouts when they occur naturally, and free their timeout handles. 
	(tme_sjlj_dispatch_fd): Now dispatch different threads depending on
	the file descriptor conditions that are present. 
	(tme_sjlj_threads_run): Now always do a select, even if there are no
	threads blocking on file descriptors.  Now make a GdkInputCondition
	value for each file descriptor that is ready, for
	tme_sjlj_dispatch_fd(). 
	(tme_sjlj_thread_create) [HAVE_GTK]: Now initialize the timeout
	handles. 
	(tme_sjlj_yield): Now correctly track a different thread for each file
	descriptor condition, since there are often different threads managing
	the same file descriptor.  When GTK is in use, timeouts can actually
	expire up to 1ms early, so account for this, and no longer try to
	remove an old timeout now, since it may still fire anyways.  Instead,
	allocate and use another timeout handle, which will be managed by
	tme_sjlj_dispatch_timeout(). 

	* machine/sun/sun-obie.c (_tme_sun_obie_bus_signal): Fixed a bug where
	instead of managing the INTR bit in the CSR, we were just passing the
	i82586's interrupt signal through to the mainbus.  This was breaking
	SunOS.  Found by sigmfsk@aol.com in NetBSD PR pkg/35305.  Now also
	pass a reset signal from obio up to the i82586. 
	(_tme_sun_obie_connections_new): Now use _tme_sun_obie_bus_signal to
	handle bus signals coming from obio. 

	* scsi/emulexmt02.c (_tme_emulexmt02_cdb_mode_sense): Now use
	TME_EMULEXMT02_BLOCK_SIZE instead of the hard-coded constant. 
	(_tme_emulexmt02_cdb_mode_select): Avoid a gcc warning about a
	comparison whose result is always known due to the limited range of a
	type. 
	(tme_scsi_tape_emulexmt02_init): Now provide the fixed block size to
	the machine-independent code. 

	* scsi/scsi-cdb.c (tme_scsi_device_mode_select_data): Added. 
	(_tme_scsi_device_make_inquiry_string): Fixed a type to get better
	type agreement.  From tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 

	* scsi/scsi-tape.c (tme_scsi_tape_cdb_xfer0): Don't pad out a block
	with zeroes if the filemark indication is set. 
	(_tme_scsi_tape_mode_select_data):
	(tme_scsi_tape_cdb_mode_select): Avoid a gcc warning about a
	comparison whose result is always known due to the limited range of a
	type. 

	* tme/generic/fb.h: Now define TME_FB_COLORSET_NONE. 

Sat Aug 25 19:52:23 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-display.h: Now store a colorset signature in struct
	tme_gtk_screen.  Define struct tme_gtk_display_menu_item, and added a
	prototype for _tme_gtk_display_menu_radio(). 

Fri Aug 24 01:21:50 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* acinclude.m4 (AC_CHECK_ALIGNOF): Some compilers will do a smaller
	read than you expect, if they know that the value read will only be
	used at a smaller size later.  A little math on the value read
	discourages this. 
	(AC_CHECK_SHIFTMAX): Don't create the center value with one
	expression, which would do the shifting in type int.  Defeat any
	constant optimizations on the shift count by using sscanf to
	initialize it. 

	* generic/float-auto.sh (tme_float_infinity_${_builtin_type}):
	(tme_float_negative_zero_${_builtin_type}): Added. 
	(tme_float_radix${radix}_mantissa_exponent_${_builtin_type}): If the
	value is a zero, just return the same value.  Fixed a bug where we
	would return a mantissa that was exactly the radix (instead of
	reducing it again to 1). 

	* host/posix/posix-serial.c (_tme_posix_serial_th_ctrl): If a TIOCMGET
	ioctl fails, be sure to use a zero modem state instead of garbage. 

	* ic/am7930.c (_tme_am7930_bus_cycle): Fixed a bug where we used
	TME_BUS16_LOG2 but the device is only eight bits wide. 

	* ic/ieee754/ieee754-misc-auto.sh (tme_ieee754_${precision}_value_to_builtin):
	Use the new tme_float_infinity_${_builtin_type}() and
	tme_float_negative_${_builtin_type}() functions to get built-in
	infinities and negative zeroes. 
	(tme_ieee754_${precision}_value_from_builtin): Detect a negative zero
	using a bit-for-bit comparison to a positive zero, since the C
	equality operator may treat all zeroes as equal.  Fixed a bug where
	roundup in a builtin-to-integer cast would affect the conversion. 
	Removed an extraneous assignment to factor in the shell script. 

	* ic/sparc/sparc-misc.c (tme_sparc32_dump_memory): To avoid an
	assertion failure with TLB lock debugging turned on, now save, set,
	and restore the busy flag on the DTLB entry that the load function
	will use (assuming that it will only use one). 

	* machine/sun2/sun2-mainbus.c (tme_machine_sun2,zs): Override the
	default z8530 socket flags - on a sun2, the IEI lines are tied low. 

	* machine/sun3/SUN3-CARRERA: Removed the "delay 10000" option from
	bpf1, to speed things up in general - however it is still needed when
	netbooting NetBSD, to avoid a race condition in the kernel RARP client
	(when the RARP response comes back before the tsleep() starts, the
	wakeup() is lost). 

	* machine/sun3/sun3-mainbus.c (machine/sun3/sun3-mainbus.c): Now
	propagate a reset signal from the m68k out to the busses. 

	* tme/threads.h: Now include <sys/time.h>. 

	* tme/generic/float.h: Added prototypes for
	tme_float_infinity_${_builtin_type}() and
	tme_float_negative_zero_${_builtin_type}(). 

	* tme/ic/z8530.h: Started a set of socket flags, and added the
	tme_z8530_socket_flags to struct tme_z8530_socket. 

	* tme/machine/sun.h: In TME_SUN_Z8530_SOCKET_INIT, supply a default
	value for the z8530 socket flags. 

Thu Mar 29 01:56:40 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Fixed bugs where we would use the wrong
	masks with TME_FB_XLAT_MAP_LINEAR_SCALE() when we needed to scale
	large intensities down into a lookup range,

	* host/posix/posix-serial.c (_tme_posix_serial_th_reader): If we get
	EOF, exit the thread. 

	* ic/m68k/m68k-impl.h: Keep the m68k TLB array pointers in unions with
	regular bus TLB pointers, to avoid any aliasing problems when
	allocating them. 

	* ic/m68k/m68k-misc.c (_tme_m68k_connection_make): When allocating the
	m68k TLB arrays, pass pointers to the regular bus TLB pointers in
	unions in struct tme_m68k, to avoid any aliasing problems. 

	* ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): Cast a constant
	to an unsigned type to silence a gcc warning. 

	* ic/sparc/sparc-impl.h: Keep the sparc TLB array pointers in unions
	with regular bus TLB pointers, to avoid any aliasing problems when
	allocating them. 

	* ic/sparc/sparc-insns-auto.sh: In the jmpl instructions, cast a
	constant to an unsigned type to silence a gcc warning. 

	* ic/sparc/sparc-insns.c (tme_sparc32_rdpsr):
	(tme_sparc32_wrpsr): Cast constants to an unsigned type to silence a
	gcc warning. 

	* ic/sparc/sparc-misc.c (_tme_sparc_connection_make): When allocating
	the TLB arrays, pass pointers to the regular bus TLB pointers in
	unions in struct tme_sparc, to avoid any aliasing problems. 
	(tme_sparc32_trap): Cast a constant to an unsigned type to silence a
	gcc warning. 
	(tme_sparc32_dump_memory): Added. 

	* machine/sun/sun-fb.c (TME_SUNFB_S4_REG): Added. 
	(tme_bt458_omap_best): Fixed a bug where we would use the final loop
	counter as the best colormap index. 
	(_tme_sunfb_callout): Reworked to handled failed callouts better, and
	added support for calling out framebuffer interrupts. 
	(_tme_sunfb_callout_thread): The callout thread is now always present,
	running when a condition is notified. 
	(tme_sunfb_memory_update): Now notify the callout thread to call out
	an interrupt if one is now pending. 
	(tme_sunfb_bus_cycle_bt458): Now support 8-bit and 32-bit accesses. 
	Schedule a mode change callout whenever the colormap or overlay map
	changes.  Fixed bugs where we wouldn't read and write the bt458
	register set correctly. 
	(tme_sunfb_bus_cycle_s4): If a write covers the status register, clear
	any pending interrupt.  Call _tme_sunfb_callout() to make any
	callouts. 
	(tme_sunfb_new): Initialize the callout thread condition, and create
	the callout thread. 
	(tme_sun_cgthree): Set the correct sunfb flags for a cgthree.  Fixed a
	bug where we wouldn't initialize the bt458 colormap pointers to point
	to the colormap. 

	* machine/sun/sun-fb.h: Since the callout thread is always present,
	removed the flag that marked when it was.  Added flags for specifying
	which byte in a 32-bit access to an 8-bit register is used.  In struct
	tme_sunfb now track whether or not the framebuffer interrupt is
	asserted, added a condition for notifying the callout thread, and
	added an alias for the first S4 basic register. 

	* machine/sun/sun-keyboards.txt: Removed the acute keysym from the US
	type 4 keyboard.  Its definition is the same as apostrophe, and it was
	causing problems on hosts that actually have acute.  This is really a
	bug in the keyboard emulation. 

	* machine/sun4/SUN4-75: Many changes. 

	* machine/sun4/sun44c-cache.c (_tme_sun44c_cache_new): Cast some
	expressions in comparisons to an unsigned type, to silence a gcc
	warning. 

	* machine/sun4/sun44c-control.c (_tme_sun44c_control_cycle_handler):
	Cast a promoted expression to an unsigned type in a ternary operator
	expression to silence a gcc warning. 

	* scsi/scsi-cdrom.c (tme_scsi_cdrom_cdb_read_toc):
	(tme_scsi_cdrom_cdb_mode_sense): Cast some expressions to unsigned
	types to silence a gcc warning. 

Sun Mar 25 21:18:50 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* dist/softfloat/softfloat/bits64/softfloat.c (float128_rem): Added a
	cast to get better type agreement.  From tsutsui@ceres.dti.ne.jp in
	NetBSD PR pkg/34113. 

	* generic/bus-el.c (_tme_bus_intack): Now unlock the bus before
	calling a device's interrupt acknowledge function, to avoid a
	deadlock. 

	* ic/am7990.c (_tme_am7990_receive): Added a cast to avoid a
	signed/unsigned comparison. 

Sat Mar 03 15:36:15 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-mouse.c (_tme_gtk_mouse_mouse_event): Now discard
	double- and triple-click button events, since normal button press and
	release events are always generated also. 

	* machine/sun/sun-cgtwo.c (_tme_suncg2_callout): Fixed a bug where we
	tested the wrong variable for the mode change callout bit. 

Wed Feb 21 01:52:28 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* host/bsd/bsd-bpf.c (_tme_bsd_bpf_callout): Now check that the packet
	being written has a reasonable size, and that the write succeeds. 
	From sigmfsk@aol.com in NetBSD PR pkg/35305. 

	* host/gtk/gtk-display.h: Changed the signedness of the
	tme_gtk_screen_mouse_warp_x and tme_gtk_screen_mouse_warp_y members to
	get better type agreement.  From tsutsui@ceres.dti.ne.jp in NetBSD PR
	pkg/34113. 

	* host/gtk/gtk-mouse.c: Changed some types to get better type
	agreement.  From tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 

	* host/gtk/gtk-screen.c (_tme_gtk_gdkimage_scanline_pad): Removed the
	if that tests for the eight-bit case.  This avoids a gcc4 warning
	about a possible missing return value, even though the possibility of
	that was zero. 

	* ic/i825x6reg.h: The size mask in an i82586 TBD is 0x3fff (it's
	0x7fff on a i82596).  From sigmfsk@aol.com in NetBSD PR pkg/35305. 

	* ic/ncr53c9x.c (_tme_ncr53c9x_stimreg_msec): Fixed a gcc4 warning. 

	* ic/ieee754/ieee754-ops-auto.sh: Now perform negation by multiplying
	the source operand by -1, which correctly negates 0.0 into -0.0.  From
	sigmfsk@aol.com in NetBSD PR pkg/34616. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Simplified how
	PC-relative EAs are calculated.  This should fix NetBSD PR pkg/34538. 

	* ic/sparc/sparc-misc.c (tme_sparc_new): Increased the instruction
	burst size to 800. 
	(tme_sparc_do_reset): Now poison all idle type state to force the idle
	type to retrain, since we may be booting a new kernel. 

	* libtme/module.c (tme_module_open): Changed the signedness of
	tokens_count to get better type agreement.  From
	tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 

	* machine/sun/sun-si.c (_tme_sun_si_bus_cycle_regs): Fixed an
	uninitialized variable bug that wasn't noticed by gcc3, because the
	value was never used.  From tsutsui@ceres.dti.ne.jp in NetBSD PR
	pkg/34113. 
	(tme_sun_si): Changed a type to get better type agreement.  From
	tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 

	* tme/memory.h (tme_memory_atomic_pointer_write): Fixed a bug where we
	tried to use a ternary operator expression as an lvalue. 

Fri Feb 16 02:50:23 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* host/bsd/bsd-bpf.c (_tme_bsd_bpf_read): Fixed a bug where we would
	drop packets or pass garbage packets because we weren't using
	BPF_WORDALIGN() to determine the offset of the next packet.  Added
	code to try to detect and strip off any CRC accidentally passed up
	through BPF from a host network device driver. 

	* ic/m68k/m68010.c (_tme_m68010_rte): A zero returned by
	tme_m68k_sequence_fill() or tme_m68k_insn_buffer_fill() also means a
	format error. 

	* ic/m68k/m68020.c (_tme_m68020_rte): A zero returned by
	tme_m68k_sequence_fill() or tme_m68k_insn_buffer_fill() also means a
	format error. 

	* ic/m68k/m68k-execute.c ic/m68k/m68k-impl.h
	  ic/m68k/m68k-insns-auto.sh ic/m68k/m68k-insns.c
	  ic/m68k/m68k-misc-auto.sh ic/m68k/m68k-misc.c:

	  Although I hate doing this, many changes to convert the m68k
	  emulation to the new TLB and memory discipline.  This has mainly
	  affected fast instruction fetching and memory access.  Fast
	  instruction fetches now happen directly into the instruction buffer,
	  with some optimizations to lessen the penalty for that.  Fast
	  fetches are now kept entirely out of the transfer accounting, and
	  the functions that empty and fill the instruction buffer from an
	  exception frame are also simpler now. 
	  All memory access functions now busy and unbusy a TLB entry and use
	  the generic memory access functions when doing fast transfers. 
	  The tme_m68k_rmw_start() and tme_m68k_rmw_finish() are completely
	  changed for the new TLB discipline.  All of the atomic instructions
	  are also completely changed.  All callouts are now wrapped in
	  tme_m68k_callout_unlock() and tme_m68k_callout_relock(), which will
	  unbusy and rebusy any instruction TLB entry for the fast executor,
	  and poison the fast executor if that TLB entry is now invalid. 

Thu Feb 15 02:15:41 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/keyboard.c (_tme_keysym_state_get):
	(tme_keyboard_buffer_in_macro):
	(tme_keyboard_buffer_out_map):
	(tme_keyboard_buffer_out_mode):
	(_tme_keyboard_buffer_in2):
	(_tme_keyboard_buffer_in0): Use tme_keyboard_hash_data_from_keyval()
	to convert a tme_keyboard_keyval_t to a tme_hash_data_t. 

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_x11_new):
	(_tme_gtk_keyboard_key_event): Use
	tme_keyboard_hash_data_from_keyval() and
	tme_keyboard_hash_data_to_keyval() to convert between
	tme_keyboard_keyval_t and tme_hash_data_t. 

	* machine/sun/sun-bwtwo.c: Removed much code, which became the new
	generic Sun framebuffer code.  The remaining bwtwo code now uses this
	generic support.  Added support for the SBus bwtwo. 

	* machine/sun/sun-cgtwo.c (_tme_suncg2_validate_bitmaps):
	(_tme_suncg2_validate_pixmap): Don't attempt to translate using
	unsigned longs on 64-bit hosts. 
	(_tme_suncg2_mode_change): Don't try to make any sense of the case
	where the pixel colors don't select any bitmap.  In this case, or when
	multiple bitmaps seem to be selected, just display the pixmap. 

	* machine/sun2/sun2-control.c (_TME_SUN2_REG_ACCESSED): Silence a
	warning about comparing an unsigned quantity to be greater than or
	equal to zero.  This would happen on 64-bit big-endian systems, due to
	their particular struct tme_ic register layout. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_mmu_reset): Now busy and
	unbusy-fill the reset TLBs, so they are marked valid. 

	* machine/sun4/sun4-impl.h: Added a prototype for _tme_sun4_reset(). 

	* machine/sun4/sun4-mainbus.c (_tme_sun4_reset): Added. 
	(_tme_sun4_command): Now use _tme_sun4_reset() to do the reset. 
	(tme_machine_sun4): Fixed the usage string. 

	* machine/sun4/sun44c-control.c (_tme_sun44c_control_cycle_handler): A
	write to the software reset bit in the enable register clears all
	other bits in the register, and now call _tme_sun4_reset() to do the
	reset. 

	* scsi/scsi-bus.c (_tme_scsi_bus_cycle): Skip any SCSI connection that
	isn't waiting on any events and has no actions to take. 

	* tme/hash.h: Added macros for converting between tme_hash_data_t and
	some integral types. 

	* tme/generic/ethernet.h: Define some Ethernet packet types. 

	* tme/generic/keyboard.h: Added macros to convert between a keyval and
	a tme_hash_data_t. 

	* tme/scsi/scsi-cdb.h: Define extended sense key, ASC, and ASCQ
	values.  Define struct tme_scsi_device_mode_blocks and give a
	prototype for tme_scsi_device_mode_select_data(). 

Mon Feb 12 23:50:36 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus.c (tme_bus_tlb_map): Fixed a word-size bug, where the
	address offset was kept as a tme_bus_addr_t.  Since this offset can be
	negative, and it's used in pointer arithmetic, it has to be a signed
	long. 

	* generic/fb-xlat-auto.sh (TME_FB_XLAT_SHIFT_DST): Now detect when we
	shifted a tme_uint32_t by 32 on an architecture where SHIFTMAX_INT32_T
	is less than 32, and force the shifted result to zero. 

	* ic/ncr5380.c (_tme_ncr5380_bus_tlb_fill): Fixed a bug where we
	wouldn't notice a TLB that was invalid. 

	* ic/ieee754/ieee754-misc-auto.sh (tme_ieee754_${precision}_value_builtin_set):
	When rewriting x to be an infinity, don't set the float format until
	the end, because we still need to test the original format x's sign. 
	After converting a native result to the best native format for the
	IEEE754 precision, don't forget to update x's float format. 
	(tme_ieee754_${precision}_value_to_builtin): When the format has an
	explicit integer bit, don't treat it as a fraction bit when the
	exponent is the biased maximum. 

	* ic/m68k/m68k-bus-auto.sh: Fixed a bug where tme_m68k_router_32 was
	defined static. 

	* ic/sparc/sparc-misc-auto.sh: Make sure that TME_SPARC_IREG_FPX is
	aligned to four, since it is often used as a register pair, and the
	ldd/std functions expect the first register of a pair (and later, some
	quad load/store functions) to be aligned. 

	* machine/sun/sun-si.c (_tme_sun_si_tlb_fill_regs): Fixed a bug where
	we were filling TLBs that supported fast reading.  We can't support
	fast reading, because we have to fault on byte accesses, to support
	the SunOS sc/si probes. 

Tue Jan 30 22:57:08 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/am7990.c (_tme_am7990_init): Now log the init.  Fixed a bug where
	we wouldn't start reading the Ethernet again after exiting loopback
	mode. 
	(_tme_am7990_start): Now log the start. 
	(_tme_am7990_receive): Append dummy CRC bytes to each received frame. 
	Log receive MISS and BUFF errors. 
	(_tme_am7990_transmit): Log transmit BUFF errors. 
	(_tme_am7990_bus_cycle): Log writes to CSRs other than CSR0. 

Sun Jan 21 15:45:01 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* libtme/misc.c (tme_misc_tokenize):
	(_tme_misc_number_parse): Don't use the ctype macros with a char,
	since it will be sign-extended to an int. 

	* libtme/module.c (tme_module_open): Don't use the ctype macros with a
	char, since it will be sign-extended to an int. 

	* serial/serial-kb.c (tme_serial_,kb,keyboard): Don't use the ctype
	macros with a char, since it will be sign-extended to an int. 

Fri Jan 19 01:01:07 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-display.h: In struct tme_gtk_display, track the next
	keysym to try in the unused keysym allocator. 

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Don't consider a
	conversion of a string to a keysym successful unless the keysym
	reverses to that same string. 
	Fixed a bug in the code that tries to allocate an unused keysym for an
	unknown string, where we would repeatedly allocate the first unused
	keysym over and over again. 

	* ic/sparc/sparc-impl.h: Increased the size of the ITLB hash. 

	* ic/sparc/sparc-insns-auto.sh: Now emit code in the load and store
	functions to track DTLB fills under _TME_SPARC_STATS. 

	* machine/sun/sun-keyboards.txt: Added a map for the US type 4
	keyboard. 

	* scsi/cdrom-tme.c:
	* scsi/scsi-cdrom.c:
	* tme/scsi/scsi-cdrom.h: Added. 

	* scsi/scsi-device.c (tme_scsi_device_check_condition): Added. 

	* tme/scsi/scsi-device.h: Added a prototype for
	tme_scsi_device_check_condition(). 

Thu Jan 18 02:15:49 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* tme/common.h: Added definitions of __tme_predict_true() and
	__tme_predict_false() for gcc>=2.96. 

Sun Jan 14 16:53:04 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus-el.c (tme_generic,bus): Fixed a printf string.  Some
	changes to silence gcc -Wuninitialized. 

	* ic/sparc/Makefile.am: Added sparc-fpu-auto.sh to EXTRA_DIST. 

	* ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): In NetBSD 3.x,
	the idle loop wrpsrs use %l1 instead of %g1, and the annulled wrpsr
	writes IPL_SCHED << 8, not PSR_PIL. 

	* ic/sparc/sparc-fpu-auto.sh: Removed the parameter lists from some
	macro #undefs. 

	* ic/sparc/sparc-fpu.c (tme_sparc_fpu_new): Removed the parameter list
	from a macro #undef. 

	* ic/sparc/sparc-insns.c (tme_sparc32_wrpsr): Updated the
	netbsd32-type-0 idle type comment. 

	* ic/sparc/sparc-misc.c (tme_sparc_new): Increased the burst size. 

	* libtme/threads-sjlj.c (tme_sjlj_yield) [HAVE_GTK]: Fixed a bug where
	we could round the number of microseconds to a whole second and leave
	it that way. 

	* machine/Makefile.am: Added the sun4 directory to DIST_SUBDIRS. 

	* machine/sun/sun-fb.c (tme_bt458_omap_best): Fixed a bug caught by
	gcc -Wuninitialized. 

	* scsi/Makefile.am: Added scsi-cdrom.c and cdrom-tme.c to
	tme_scsi_la_SOURCES. 

	* scsi/scsi-tape.c (_tme_scsi_tape_mode_select_data): Fixed a bug
	caught by gcc -Wuninitialized. 

	* tme/scsi/Makefile.am: Now install scsi-cdrom.h. 

Mon Jan 08 00:59:04 2007  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/Makefile.am: Added sbus to DIST_SUBDIRS. 

	* bus/sbus/Makefile.am:
	* bus/sbus/sun-fbs4.c:
	* tme/ic/bt458.h: Added. 

	* generic/scsi.c (tme_scsi_phase_resid): Added. 

	* ic/Makefile.am: Added sparc to DIST_SUBDIRS. 
	Now build tme_ic_ncr53c9x.la, tme_ic_mk48txx.la, tme_ic_nec765.la,
	tme_ic_am7930.la, tme_ic_am7990.la, and tme_ic_lsi64854.la. 

	* ic/ncr53c9x.c: Added tme_ncr53c9x_transfer_resid_detect_state to
	struct tme_ncr53c9x, for detecting the SCSI transfer residual while
	data is being transferred. 
	(_tme_ncr53c9x_cs_monitor_phase): Now take a new argument that will
	force the phase to be checked, even if there isn't any SCSI transfer
	residual.  All callers changed. 
	(_TME_NCR53C9X_CS_MONITOR_PHASE): Now check the phase immediately. 
	(_TME_NCR53C9X_CS_TRANSFER): Now initialize the transfer residual
	detect state to zero. 
	(_tme_ncr53c9x_update): In TME_NCR53C9X_CMD_TRANSFER, fixed bugs for
	the MESSAGE IN phase, and simplified the sequence for the MESSAGE OUT
	phase.  Fixed many bugs for all of the target selection commands. 
	(_tme_ncr53c9x_callout): When we're detecting the transfer residual
	while data is being transferred, we can't transfer more than one byte
	at a time from a TLB that only supports slow reading, and also call
	tme_scsi_phase_resid() to do the detection. 
	Don't hold ACK on a transfer unless it definitely includes the last
	byte of the transfer. 
	(_tme_ncr53c9x_scsi_cycle): Fixed a bug where we wouldn't note an
	automatically asserted ACK or ATN in the active SCSI cycle. 
	(_tme_ncr53c9x_bus_cycle): Fixed a bug where we wouldn't add to the
	data FIFO at the head. 

	* ic/nec765.c (_tme_nec765_bus_cycle): More correctly alias reads and
	writes to register number two on an i82072 to the MSR and DRS,
	respectively.  This allows both the NetBSD fdc and the SunOS fd
	drivers to work.

	* ic/sparc/sparc-execute.c: Now define tme_sparc_idle_type_pc
	appropriately for the version. 
	(_TME_SPARC_EXECUTE_NAME): When we begin a new instruction burst, if
	the first instruction in the burst is the beginning of the idle loop,
	go idle. 
	Check an annulled instruction for the netbsd32-type-0 idle type. 
	Check a branch for the sunos32-type-0 idle type.  Fixed a bug where
	repeated annulled instructions could cause the instruction burst to
	never finish. 

	* ic/sparc/sparc-fpu-auto.sh: Avoid a gcc -Wuninitialized warning by
	setting fpreg_rd_format even for an unimplemented operation. 

	* ic/sparc/sparc-impl.h: Added support for idle types. 

	* ic/sparc/sparc-insns-auto.sh: In the slow read and write functions,
	fixed a bug found by gcc -Wuninitialized in the unusual case where
	this cycle is part fast, part slow, where we would use use an
	uninitialized resid. 

	* ic/sparc/sparc-insns.c (tme_sparc32_rdasr): To avoid a gcc
	-Wuninitialized warning, for an unimplemented rdasr set value to zero
	even though we abort(). 
	(tme_sparc32_rdpsr): Added support for the sunos32-type-0 idle type. 
	(tme_sparc32_wrpsr): Added support for the sunos32-type-0 and
	netbsd32-type-0 idle types. 

	* ic/sparc/sparc-misc.c (_tme_sparc_command):
	(tme_sparc_do_idle): tme_sparc_fetch_nearby): Added. 
	(tme_sparc_new): Now set _tme_sparc_command to handle commands. 
	Poison the initial idle type state. 

	* machine/sun/sun-cgtwo.c: Use the new generic tme_sunfb_ functions
	and macros instead of the older tme_sun_fb_p4_ functions. 

	* machine/sun/sun-fb.c: Replaced the old tme_sun_fb_p4_ functions with
	the new generic tme_sunfb_ functions, and added support for more
	sizes. 
	Added all of the new generic Sun framebuffer support, including some
	out-of-place Bt458 support. 
	(tme_sun_cgthree): Added. 

	* machine/sun/sun-fb.h: Removed most of the P4-specific definitions. 
	Added many definitions for a generic Sun framebuffer, including some
	P4 and S4 specifics. 

	* machine/sun4/sun4-mainbus.c (tme_machine_sun4,bwtwo):
	(tme_machine_sun4,si):
	(tme_machine_sun4,cgtwo): Removed. 

	* scsi/scsi-bus.c (_tme_scsi_bus_cycle): Added an assert to the
	bulk-copy code to check that the target is always in sequence step
	one. 

	* scsi/scsi-device.c (_tme_scsi_device_cycle): Now log the message in
	a MESSAGE_OUT phase.  Now extended messages have their own dispatch
	array. 
	(tme_scsi_device_target_mc): Added. 
	(tme_scsi_device_new): By default, a new device will reject
	synchronous negotiation. 

	* scsi/scsi-msg.c (tme_scsi_device_msg_target_reject): Added. 

	* tme/generic/scsi.h: Added the prototype for tme_scsi_phase_resid(). 

	* tme/ic/Makefile.am: Added bt458.h to tmeicinclude_HEADERS. 

	* tme/machine/sun.h: Added a prototype for tme_sun_cgthree(). 

	* tme/scsi/scsi-device.h: Now define TME_SCSI_DEVICE_DO_MSG_EXT(). 
	Added a dispatch array for extended messages to struct
	tme_scsi_device. 
	Now declare tme_scsi_device_target_mc(). 

	* tme/scsi/scsi-msg.h: Now define TME_SCSI_MSG_EXT_SDTR.  Now declare
	tme_scsi_device_msg_target_reject(). 

Sun Nov 26 16:37:55 2006  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus.c (tme_bus_tlb_fill): Fixed bugs in the support for bus
	connections with nonzero sourced-address masks. 

	* ic/am7930.c:
	* ic/am7990.c: Added. 

	* ic/mk48txx.c (_tme_mk48txx_bus_cycle): Added support for a
	platform's year zero. 

	* ic/ieee754/ieee754-misc-auto.sh: Removed the simple
	tme_ieee754_PRECISION_to_int32 functions in favor of the ops versions. 

	* ic/ieee754/ieee754-ops-auto.sh: Now emit ops for from_int32 and
	from_int64.  Now allow an op to override the type of its first source
	operand.  Made the generation of the preprocessor condition more
	general.  Added some more support for integral source operands.  Fixed
	a bug in substituting in softfloat function names. 

	* ic/sparc/sparc-fpu-auto.sh: Fixed the ops that convert between
	integer and floating-point to use the regular IEEE754 ops. 

	* machine/sun4/sun4-mainbus.c (tme_machine_sun4,clock): Now set the
	sun4 year zero in the mk48txx socket. 

	* scsi/scsi-bus.c (_tme_scsi_bus_callout): Now clear the actions and
	events for a connection before they are called out, to prevent calling
	them out again. 
	Added support for the cycle marker bit. 
	(_tme_scsi_bus_cycle): Added support for the cycle marker bit.  Added
	support for TME_SCSI_ACTION_SELECT_WITH_ATN and
	TME_SCSI_ACTION_DMA_INITIATOR_HOLD_ACK.  Moved the bulk DMA copy code
	inside the slow initiator DMA code.  This allows the normal target and
	initiator slow DMA code to always handle the boundaries of a transfer,
	which (especially in the initiator hold ACK case) can be important. 

	* scsi/scsi-tape.c: Added the tme generic SCSI-1 tape to the list. 
	(tme_scsi_tape_cdb_xfer0): Added a big hack to quickly fix NetBSD PR
	pkg/34536. 
	(_tme_scsi_tape_mode_select_data): Added. 
	(tme_scsi_tape_cdb_block_limits):
	(tme_scsi_tape_cdb_mode_select): Implemented. 

	* tme/common.h: Replaced the old TME_FIELD_MASK_EXTRACTS macros with a
	single smarter version. 
	Now TME_FIELD_MASK_DEPOSITU masks the value being deposited. 

	* tme/memory.h [!TME_THREADS_COOPERATIVE]: Now define
	TME_MEMORY_BUS_BOUNDARY to be sizeof(tme_uint8_t), to avoid some
	compiler warnings when the previous value of zero was used in some
	comparisons. 

	* tme/generic/ethernet.h: Fixed a bug where the source address field
	was named tme_ethernet_header_size. 

	* tme/generic/scsi.h: Renumbered the SCSI actions to allow for future
	expansion, and also to add TME_SCSI_ACTION_DMA_INITIATOR_HOLD_ACK,
	TME_SCSI_ACTION_SELECT_WITH_ATN, and TME_SCSI_ACTION_CYCLE_MARKER. 

	* tme/ic/mk48txx.h: Added tme_mk48txx_socket_year_zero to the socket
	structure. 

	* tme/scsi/scsi-device.h: Expanded tme_scsi_device_data to 256 bytes,
	to hold a large MODE SELECT parameter list. 

Thu Nov 16 02:54:40 2006  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus-el.c (_tme_bus_connections_new): Added support for the
	'slot', 'offset', 'controller', and 'dma-offset' arguments. 
	(TME_ELEMENT_SUB_NEW_DECL(tme_generic,bus)): Added real argument
	processing, and added support for the arguments that define bus slots. 

	* generic/bus.c (tme_bus_tlb_fill): If this bus has a controller, and
	the TLB fill request isn't from the controller, pass the TLB fill on
	to the controller. 
	(tme_bus_connection_make): Added support for making a connection to a
	bus controller. 

	* generic/ethernet.c (tme_ethernet_chunks_copy): Made the destination
	chunks structures const. 
	(tme_ethernet_crc32_el): Added. 

	* ic/lsi64854.c ic/ncr53c9x.c ic/nec765.c machine/sun4/sun4-fdc.c
	  scsi/tape-tme.c tme/ic/nec765.h:

	  Added. 

	* ic/ncr5380.c (_tme_ncr5380_signal): Now use TME_BUS_SIGNAL_WHICH()
	to remove the flags from a bus signal. 

	* ic/z8530.c (_tme_z8530_channel_reset): Now have
	TME_Z8530_RR1_ALL_SENT in the reset value for RR1. 
	(_tme_z8530_bus_cycle): Now clear TME_Z8530_RR1_ALL_SENT when transmit
	data is written. 
	(_tme_z8530_read): Now set TME_Z8530_RR1_ALL_SENT when all transmit
	data has been written. 

	* ic/ieee754/ieee754-misc-auto.sh: Now emit prototypes for the
	functions that convert floats to 32-bit integers. 

	* ic/ieee754/ieee754-misc.c (tme_ieee754_fpreg_format): Added. 

	* ic/sparc/cy7c601.c (TME_ELEMENT_X_NEW_DECL(tme_ic_,sparc,cy7c601)):
	The common CY7C601 has a PSR version of 1.  Use the default slow
	instruction fetch function. 

	* ic/sparc/mb86900.c (TME_ELEMENT_X_NEW_DECL(tme_ic_,sparc,mb86900)):
	Use the default slow instruction fetch function. 

	* ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): Now save the ASI
	mask for instructions in the CPU state. 
	Now fetch all instructions with tme_memory_bus_read32(), which gives
	all needed behavior (when threads are cooperative,
	tme_memory_atomic_read32 means a function call).  Now log call
	instructions, which makes reconstructing code flow possible. 

	* ic/sparc/sparc-fpu.c (tme_sparc_fpu_new): Fixed a bug where the FPU
	version wasn't being put into the FSR. 

	* ic/sparc/sparc-impl.h: Now define TME_SPARC_SLOW_FLAG_INSN and
	TME_SPARC_SLOW_FLAG_NO_FAULTS for the slow load and store functions. 
	Now _tme_sparc_bus_fault/tme_sparc32_bus_fault get the flags passed to
	the slow load/store function.  Added a prototype for
	tme_sparc32_fetch_slow(). 

	* ic/sparc/sparc-insns-auto.sh: For the instructions that have
	add-style condition codes, changed the calculation of C to match the
	V8 architecture manual.  In the memory access instructions, instead of
	using a tme_memory_atomic_ function, use a tme_memory_bus_ function,
	which is how it should always have been.  Log jmpl instructions that
	act as call or return instructions, which makes reconstructing code
	flow possible.  In the slow load/store functions, use the ASI mask for
	instructions if the instruction flag is specified, and allow the
	CPU-specific bus fault handler to cancel a fault. 

	* ic/sparc/sparc-insns.c (tme_sparc32_rett): Fixed a bug where a user
	PS wasn't restored into S correctly.  Fixed a bug where we wouldn't
	redispatch after changing the PSR. 
	(tme_sparc32_ticc): Fixed a bug where we thought the trap number was
	in rd, instead of from rs1 + rs2. 

	* ic/sparc/sparc-misc.c (tme_sparc32_fetch_slow): Added. 
	(tme_sparc32_bus_fault): When a fault happens during an instruction
	fetch, ignore the fault if we're supposed to, otherwise return an
	instruction access exception instead of a data access exception. 

	* libtme/module.c (_tme_modules_find): Fixed a bug where we wouldn't
	check the LTDL_SHLIBPATH_VAR directory for modules. 

	* libtme/threads-sjlj.c (tme_sjlj_cond_sleep_yield): Added. 

	* machine/sun/sun-mmu.c: In struct tme_sun_mmu, added members for MMUs
	with an address space hole. 
	(tme_sun_mmu_new): If this MMU has an address space hole, adjust the
	number of address bits and save a mask with the last significant
	address bit set. 
	(_tme_sun_mmu_lookup): If this MMU has an address space hole, and the
	address to look up is in the hole, return the hole PTE. 
	(tme_sun_mmu_pte_set):
	(tme_sun_mmu_segmap_get):
	(tme_sun_mmu_segmap_set): Handle addresses in an address space hole. 
	(tme_sun_mmu_tlb_fill): Fixed a bug in the previous commit that would
	not remember TLBs filled from invalid PTEs for later invalidation when
	those PTEs are made valid.  However, don't remember TLBs filled in the
	address hole. 

	* machine/sun/sun-si.c (_tme_sun_si_tlb_fill): Now use
	tme_bus_tlb_initialize() to make a TLB entry passed on the stack
	invalid, since tme_bus_tlb_invalidate() assumes that the TLB's locks
	have been constructed. 

	* machine/sun4/Makefile.am: Added sun4-fdc.c to
	tme_machine_sun4_la_SOURCES. 

	* machine/sun4/sun4-mainbus.c (_tme_sun4_connections_new): Only fill
	the TLB set allocator on a bus connection for an actual bus, not the
	other devices. 

	* machine/sun4/sun4-timer.c (_tme_sun4_timer_reset): Fixed a
	TME_SUN4_IS_SUN4C to TME_SUN4_IS_SUN44C. 
	(_tme_sun4_timer_cycle_control): Fixed a bug where we had the counter
	values counting down, not up.  Fixed a TME_SUN4_IS_SUN4C to
	TME_SUN4_IS_SUN44C.  Now log for all registers, and make the minimum
	log level much higher to filter out these messages. 

	* machine/sun4/sun44c-mmu.c (_tme_sun44c_buserr_log): On a sun4c, add
	0xf0000000 to the physical address displayed. 
	(_tme_sun44c_tlb_fill_mmu):
	(_tme_sun44c_tlb_fill_pte): Before a TLB has been filled, it has no
	fault handlers, and since the TLB might be on the stack its handler
	count is garbage, so always thread the initiator's bus connection down
	as the first fault handler private value. 

	* scsi/Makefile.am: Added tape-tme.c to tme_scsi_la_SOURCES. 

	* scsi/scsi-device.c (tme_scsi_device_target_phase): Bumped the log
	level for the various data phases so it's easier to filter the
	messages out. 
	(_tme_scsi_device_cycle): Fixed a bug in handling the length byte of
	an extended message. 

	* serial/Makefile.am: Added serial-sink.c to tme_serial_kb_la_SOURCES. 

	* tme/Makefile.am: Replaced atomics.h with memory.h in
	pkginclude_HEADERS. 

	* tme/connection.h: Now define TME_CONNECTION_BUS_SPARC. 

	* tme/threads.h: Now define TME_THREADS_COOPERATIVE to TRUE.  Now
	define tme_thread_suspend_others() and tme_thread_resume_others(). 
	[!TME_NO_DEBUG_LOCKS]: When __FILE__ and __LINE__ aren't defined,
	fixed a bug where we would pass in NULL for __LINE__, instead of zero. 
	Added a prototype for tme_sjlj_cond_sleep_yield(), and the
	tme_cond_sleep_yield() macro.  Removed the old atomic memory access
	support. 

	* tme/generic/bus.h: Now define
	TME_BUS_CONNECTION_INT_FLAG_ADDRESSABLE and
	TME_BUS_CONNECTION_INT_FLAG_CONTROLLER.  Now define struct
	tme_bus_slot.  In struct tme_bus, keep a list of struct tme_bus_slot,
	and track up to one bus connection that is the "controller" of the
	bus. 

	* tme/generic/ethernet.h: Added a const to the prototype for
	tme_ethernet_chunks_copy(), and added a prototype for
	tme_ethernet_crc32_el(). 

	* tme/generic/ic.h: Quadrupled the value of TME_IC_REGS_SIZE, to
	support the SPARC emulations and their large register sets.  In struct
	tme_ic, fixed the definitions for the 64-bit register members, to
	divide the TME_IC_REGS_SIZE by eight instead of sixteen. 

	* tme/ic/Makefile.am: Added sparc.h, mk48txx.h, and nec765.h to
	tmeicinclude_HEADERS. 

	* tme/ic/ieee754.h: Now define macros describing an IEEE754 register
	file.  Added a prototype for tme_ieee754_fpreg_format(). 

	* tme/machine/sun.h: Now define TME_SUN_IDPROM_OFF_MACHTYPE, and
	macros for some possible machine and architecture types.  In struct
	tme_sun_mmu_info, added tme_sun_mmu_info_topindex_bits, for describing
	either the number of top address bits for region, or for the address
	hole. 

	* tme/scsi/scsi-tape.h: In struct tme_scsi_tape, added members for
	describing the minimum, maximum, and current block sizes. 

	* tmesh/tmesh-cmds.c (_tmesh_command_alias): Added. 
	(tmesh_eval): Now dispatch an 'alias' command. 

	* tmesh/tmesh-impl.h: Now define TMESH_COMMAND_ALIAS. 

	* tmesh/tmesh-input.y: Added support for scanning and parsing the new
	'alias' command. 

Sat Sep 30 13:48:38 2006  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/3c400.c bus/multibus/sun-mie.c bus/multibus/sun-sc.c
	  generic/bus-device-auto.sh generic/bus-device.c generic/bus-el.c
	  generic/bus.c host/posix/posix-memory.c host/posix/posix-serial.c
	  ic/am9513.c ic/i825x6.c ic/isil7170.c ic/mm58167.c ic/ncr5380.c
	  ic/z8530.c libtme/Makefile.am libtme/memory-auto.sh
	  machine/sun/sun-bwtwo.c machine/sun/sun-cgtwo.c
	  machine/sun/sun-mmu.c machine/sun/sun-obie.c machine/sun/sun-si.c
	  machine/sun2/sun2-impl.h machine/sun2/sun2-mmu.c
	  machine/sun3/sun3-impl.h machine/sun3/sun3-mmu.c tme/connection.h
	  tme/memory.h tme/tme.h tme/generic/bus-device.h tme/generic/bus.h
	  tme/ic/m68k.h tme/machine/sun.h:

	  Changed how atomic values are handled.  Removed the TME_ATOMIC_ set
	  of macros, which may or may not use a rwlock to serialize access to
	  a value, and added the tme_memory_atomic_ set of macros, which
	  always requires an rwlock argument. 
	  This tme_memory_atomic_ set of macros also takes a compile-time
	  minimum alignment hint, covers a wide range of math operations, and
	  is guaranteed to work atomically for any access, no matter what the
	  actual alignment. 
	  Added the tme_memory_bus_ set of macros, which work just like the
	  tme_memory_atomic_ macros but only within a certain bus size - i.e.,
	  if a 32-bit bus size is specified, and an access crosses one
	  32-bit-aligned address boundary, the access will be split into two
	  atomic accesses. 
	  The tme_memory_atomic_ and tme_memory_bus_ macros should better
	  enable emulation on a non-cooperative threading host someday.  Added
	  the tme_memory_ set of macros, which don't access memory atomically
	  but still take the same compile-time minimum-alignment hint and are
	  guaranteed to work for any actual alignment.  This has caused
	  significant fallout in all TLB handling, since the first and last
	  address fields in a TLB were previously TME_ATOMICs, and TLBs were
	  invalidated by atomically updating these first to be greater than
	  last. 
	  This method would not have worked in a non-cooperative threading
	  host.  First, it was impossible to update both first and last
	  address fields simultaneously, and second, it was impossible to know
	  if anyone was using, or had committed to using, the TLB while you
	  were invalidating it.  Without knowing that the TLB can't be used
	  after invalidation, the invalidator can't continue and make other
	  changes that would give incorrect behavior if the TLB *is* actually
	  used later. 
	  So, TLBs have a new discipline.  They have "busy" and "invalid"
	  atomic flags.  Before a TLB entry is used, its busy flag is marked
	  true, and its invalid flag is checked.  If the invalid flag is true,
	  the TLB is unbusied and prepared for filling (see
	  tme_bus_tlb_unbusy_fill() and tme_bus_tlb_invalidate() for how they
	  synchronize and avoid interesting races), otherwise the TLB entry is
	  valid and won't be invalidated until its busy flag is set to false. 
	  To make this truly thread-safe, someday all slow bus cycle handlers
	  will have to take a TLB entry somehow, so they can correctly busy
	  the TLB entry before making the access. 

	* generic/ethernet.c generic/keyboard.c generic/mouse.c
	  libtme/element.c scsi/acb4000.c serial/serial-kb.c:

	  Now explicitly include errno.h. 

	* host/bsd/bsd-bpf.c host/posix/posix-tape.c serial/serial-kb.h
	  serial/serial-ms.h tme/scsi/scsi-device.h:

	  Now explicitly include tme/threads.h. 

	* ic/mk48txx.c ic/sparc/Makefile.am ic/sparc/cy7c601.c
	  ic/sparc/mb86900.c ic/sparc/sparc-bus-auto.sh
	  ic/sparc/sparc-execute.c ic/sparc/sparc-fpu-auto.sh
	  ic/sparc/sparc-fpu.c ic/sparc/sparc-impl.h
	  ic/sparc/sparc-insns-auto.sh ic/sparc/sparc-insns.c
	  ic/sparc/sparc-misc-auto.sh ic/sparc/sparc-misc.c
	  machine/sun4/Makefile.am machine/sun4/SUN4-75
	  machine/sun4/sun4-impl.h machine/sun4/sun4-mainbus.c
	  machine/sun4/sun4-timer.c machine/sun4/sun44c-cache.c
	  machine/sun4/sun44c-control.c machine/sun4/sun44c-memerr.c
	  machine/sun4/sun44c-mmu.c serial/serial-sink.c tme/ic/mk48txx.h
	  tme/ic/sparc.h:

	  Added. 

	* machine/sun3/sun3-mainbus.c (_tme_sun3_command): Fixed a bug where
	we wouldn't reset the VME bus. 

	* tme/atomics.h: Removed. 

Sun Dec 04 22:53:37 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/ncr5380.c: Fixed a bug in the TME_NCR5380_REG_PUT macro. 
	(_tme_ncr5380_reg_put): Now declared static. 
	(_tme_ncr5380_callout): Fixed a comment.  Fixed a bug where we
	wouldn't set the residual in the SCSI DMA structure. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed a bug where
	we would call the slow executor inside a return() statement. 

	* machine/sun/sun-cgtwo.c (_tme_suncg2_validate_bitmaps): Fixed a bug
	where we were processing the pixmap into the bitmaps from
	left-to-right, instead of from right-to-left like the individual pixel
	bit translation requires. 

	* machine/sun/sun-si.c (tme_sun_si): Now fail and display the usage if
	no si type is given.  Fixed the usage string. 

Sat Jun 11 13:47:23 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/sun/sun-mmu.c: Removed the invalid segment member of the MMU
	structure, since the hardware doesn't have the notion of an invalid
	segment. 
	(tme_sun_mmu_new): Now initialize the segment map with the last PMEG
	number. 
	(tme_sun_mmu_pte_get):
	(tme_sun_mmu_pte_set):
	(tme_sun_mmu_segmap_set): Removed checks for the invalid segment. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_mmu_new): Now zero the MMU
	information structure first, and don't provide the invalid segment
	number. 

	* machine/sun3/sun3-mmu.c (_tme_sun3_mmu_new): Now zero the MMU
	information structure first, and don't provide the invalid segment
	number. 

	* tme/machine/sun.h: Removed tme_sun_mmu_info_seginv from struct
	tme_sun_mmu_info. 

Sun May 15 01:24:11 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* Release 0.4 out.

	* configure.in: Fixed a bug where StaticGray, StaticColor, and
	PseudoColor visuals would be considered indexed.  This would cause the
	translation functions to incorrectly try to map intensities into pixel
	subfields. 

Sat May 14 22:28:29 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* acinclude.m4 (AC_CHECK_FUNC_LONG): Added. 

	* configure.in: Now check for sys/bswap.h, bswap16(), and bswap32(). 
	Now check for isinff(). 
	Instead of taking a set of host display formats in the environment
	variable TME_DISPLAYS, now take the configure argument
	--with-tme-host-displays.  When debugging is disabled, to get best
	performance now define macros that preprocess out a lot of debugging
	code.  Debugging now defaults to disabled. 

	* generic/float.c [!HAVE_ISINFF] (isinff): Added. 

	* host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Now initially
	try to allocate new colors.  For any colors that fail, try to allocate
	best-match colors.  Warn if even best-match colors could not be
	allocated. 

	* ic/ieee754/ieee754-misc.c: Declare more single- and double-precision
	constants. 

	* tme/common.h: Now include <sys/bswap.h> for the byteswapping
	functions.  When the host is big-endian, try to use bswap16() and
	bswap32() for byteswapping functions, otherwise define them.  Now
	define little-endian conversion functions on big-endian hosts. 

	* tme/generic/float.h: Corrected some HAVE_ macros to _TME_HAVE_
	macros.  Now include float.h and limits.h.  Added a prototype for
	isinff(). 

Sat May 14 19:18:42 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Fixed a bug in the initialization of
	dst_masks_default, that was causing incorrect halving translation on
	PseudoColor hosts. 

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Fixed a bug in
	the warning message when a keysym can't be generated by the host
	keyboard. 

	* ic/ieee754/Makefile.am: Added -lm to libtme_ieee754_la_LDFLAGS. 

	* ic/m68k/m68k-opmap-dump.c:
	* machine/sun3/sun3-carrera-eeprom.txt: Added. 

	* ic/m68k/m68k-opmap-make.pl: The previous opcode map functions were
	too big (or complicated?) to be compiled in a reasonable amount of
	time on slower machines.  Now compress the functions down by
	initializing similar roots close to each other, and in groups whenever
	possible.  This cuts down on the amount of params[] refilling and
	function calls, and decreases the size of m68k-opmap.c by almost half. 

	* machine/sun3/Makefile.am: Added sun3-carrera-eeprom.txt to
	examples_DATA. 

	* serial/serial-kb.c (_tme_serial_kb_connection_make): When a keyboard
	macro can't be parsed, instead of aborting, just log a complaint. 

Sat May 14 01:43:33 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* acinclude.m4 (AC_CHECK_FLOAT_FORMAT): Fixed a tme_uint16_t, which
	was causing failures on big-endian systems. 

	* ic/ieee754/softfloat-tme.c: Swapped some declarations that were with
	the wrong comments. 

	* tme/ic/ieee754.h: Declare more single- and double-precision
	constants. 

Wed May 11 00:15:42 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* dist/softfloat/softfloat/bits64/softfloat-macros (add192):
	(sub192): Fixed some gcc3 signed/unsigned comparison warnings. 

	* dist/softfloat/softfloat/bits64/softfloat.c (roundAndPackFloatx80):
	Fixed a gcc3 signed/unsigned comparison warning. 

	* ic/i825x6.c (_tme_i825x6_callout_ru):
	(_tme_i825x6_callout): Fixed some gcc3 signed/unsigned comparison
	warnings. 

	* ic/ieee754/ieee754-misc-auto.sh: Fixed a gcc3 signed/unsigned
	comparison warning. 

	* machine/sun3/sun3-mainbus.c (_tme_sun3_bus_intack): Make signal
	unsigned, to fix gcc3 signed/unsigned comparison warnings. 

	* tme/generic/float.h (tme_float_is_negative): Fixed all conditional
	arms to be conditional expressions, to keep the type of the whole
	expression int. 

Tue May 10 11:15:26 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/sun3/SUN3-CARRERA: Disable obie0 by default. 

Tue May 10 00:38:19 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_attach): Connect the
	key_press and key_release events with gtk_signal_connect_after, so we
	can stop the event from propagating up to parents, where a GtkWindow
	parent will do strange things with arrow key presses. 

	* ic/isil7170.c (_tme_isil7170_bus_cycle): Fixed an off-by-one bug in
	the month register. 

	* machine/sun3/SUN3-CARRERA: Disable the serial console by default. 

Mon May 09 02:01:02 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/sun/sun-cgtwo.c (_tme_suncg2_bus_cycle_regs): Wrap the
	rasterop register log in #ifndef TME_NO_LOG, since the rasterop
	register names array doesn't exist otherwise. 

Mon May 09 01:59:03 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/ethernet.c (tme_ethernet_chunks_copy): Fixed a bug where the
	size of the destination buffer would get loaded with the size of the
	source buffer. 

	* generic/fb.c (_tme_fb_xlat_colors_get_set): Fixed a bug where the
	number of colors allocated wasn't being saved. 

	* ic/i825x6.c (_tme_i825x6_fbl_refill): Now tolerate a Receive Buffer
	with zero size. 
	(_tme_i825x6_callout_ru): Initialize rbd_size early, since its value
	is decreased early when a fake receive buffer is made from the RFD
	Ethernet header space. 

Sat Apr 30 15:22:25 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* configure.in: Now determine the default display depth with xwininfo
	-root, assuming that the root window is at the default depth.  If the
	depth is greater than one, also determine the visual class and any
	subfield masks, and include this information in the destination image
	key.  Add support for color framebuffer images on the sun3. 

	* generic/bus.c (_tme_bus_cycle_xfer_resp_least_lane):
	(tme_bus_cycle_xfer_reg): Added. 

	* generic/fb-xlat-auto.sh: Added support for color source and
	destination images. 

	* generic/fb.c (tme_fb_xlat_best):
	(tme_fb_xlat_is_optimal): Now consider source image class, mapping
	type, mapping size, and subfield masks, and destination image mapping
	type and subfield masks. 
	(_tme_fb_xlat_colors_get_set):
	(tme_fb_xlat_colors_get):
	(tme_fb_xlat_colors_set): Added. 

	* host/gtk/gtk-display.h: Removed the monochrome invert mask from
	struct tme_gtk_display.  Inversion is now specified by the
	framebuffer. 

	* host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Added color
	support.  Now we determine the destination image class, mapping, and
	any subfield masks.  We choose a translation function based on image
	classes, mappings, and subfield masks, and allocate colors on behalf
	of the translation function. 

	* ic/m68k/m68020.c (_tme_m68020_exception): Fixed a bug where a 32-bit
	fetch wasn't marking the B stage as faulted. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed a bug with
	the instruction buffer.  Before, when the slow executor would take a
	fault in the middle of a 32-bit instruction fetch, the successfully
	fetched first 16 bits wouldn't get put in the instruction buffer by
	the fault processing, because a fetch was only accounted for once it
	fully succeeded.  When the fetch was resumed, the first 16 bits was
	lost.  Now, a slow executor fetch is accounted for before it begins,
	which guarantees that any partially fetched instruction makes it into
	the instruction buffer. 

	* ic/m68k/m68k-misc-auto.sh: Now, we update the instruction buffer
	fetch total and sizes values before we do the actual fetch, because we
	may transfer a few bytes and then fault.  Without this, those few
	bytes wouldn't get saved in the exception stack frame by
	tme_m68k_insn_buffer_xfer(), because it wouldn't know about the fetch. 
	Later, when the instruction would be resumed, tme_m68k_fetch32() won't
	refetch them, because it knows they've already been fetched and thinks
	they're still in the instruction buffer. 

	* machine/sun/Makefile.am: Now build sun-cgtwo.c for
	libtme_machine_sun.la. 

	* machine/sun/sun-bwtwo.c (_tme_sunbw2_connections_new): Fill in the
	new parts of the struct tme_fb_connection. 
	(tme_sun_bwtwo): Fixed a bug in the argument processing. 

	* machine/sun/sun-cgtwo.c: Added. 

	* machine/sun2/SUN2-MULTIBUS: Since the Emulex emulation changed
	slightly, make sure that NetBSD will still probe this as an Emulex. 

	* machine/sun3/SUN3-CARRERA: Added support for the cgthree board. 

	* machine/sun3/sun3-mainbus.c (tme_machine_sun3,cgtwo): Added. 

	* machine/sun3/sun3-mmu.c (_tme_sun3_tlb_fill_mmu): Temporarily work
	around a bug in NetBSD/sun3 where the cgtwo is mapped at the wrong
	physical address. 

	* tme/generic/bus.h: Added a prototype for tme_bus_cycle_xfer_reg(). 

	* tme/generic/fb.h: Added macros for the different image classes,
	mapping types, and default subfield masks.  Also added macros for the
	"any" subfield mask, and for the mask of the maximum index value. 
	Expanded struct tme_fb_connection and struct tme_fb_xlat to include
	image class, subfield masks, and mapping information.  Added
	prototypes for tme_fb_xlat_colors_get() and tme_fb_xlat_colors_set(). 

	* tme/machine/sun.h: Added a prototype for tme_sun_cgtwo(). 

Wed Mar 23 12:42:56 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/ieee754/ieee754-ops-auto.sh: Now emit ops for log, log10, and
	exp. 

	* ic/m68k/m68010.c: TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68010): Now
	call tme_m68k_opcodes_init_m68010() to initialize the opcode table. 

	* ic/m68k/m68020.c: TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68020): Now
	call tme_m68k_opcodes_init_m68020() to initialize the opcode table. 

	* ic/m68k/m6888x.c (tme_m68k_fbcc): Fixed a bug in calculating the
	target PC; the displacement is always added to the original PC plus
	two.  Now always take a 32-bit displacement as a proper operand. 

	* ic/m68k/m68k-execute.c: Simplified how instructions are decoded and
	executed.  Now, the first 16-bit instruction word is used to directly
	index an array of 32-bit integers, each of which gives the
	instruction's function number, the function's arguments, immediate
	fetching and EA calculation information, and a single
	special-operation escape bit.  Only two types of immediate fetches are
	supported: a 16-bit fetch, sign-extended to 32 bits, and a 32-bit
	fetch.  All of this speeds things up dramatically. 
	[_TME_M68K_STATS]: Keep statistics on executed instructions. 

	* ic/m68k/m68k-impl.h: Removed TME_M68K_SIZE_SUBMAP_X,
	TME_M68K_SIZE_16U8, TME_M68K_SIZE_16S32, TME_M68K_OPNUM_SUBMAP_X,
	TME_M68K_OPNUM_UNDEF, and the list of special opcodes, all of which
	were used only in the old opcode maps. 
	Added macros for the decoded instruction parameters in the new opcode
	maps. 
	Removed the data structures used by the old opcode maps.  The EA
	register is now a proper IC register.  Added statistics to struct
	tme_m68k.  Removed the declarations of the small immediate arrays. 
	The small immediates are now proper IC registers.  Added declarations
	of the different CPUs' opcode maps and their initialization functions,
	and the instruction function array.  Added declarations for
	tme_m68k_bccl(), tme_m68k_bsrl(), tme_m68k_divl() and tme_m68k_mull(). 

	* ic/m68k/m68k-insns.c (tme_m68k_bccl):
	(tme_m68k_bsrl):
	(tme_m68k_link):
	(tme_m68k_rtd): Now that the opcode map supports 16-bit immediates
	sign-extended to 32 bits, always take a proper 32-bit operand. 

	* ic/m68k/m68k-iset.txt: Now that the opcode map supports 16-bit
	immediates sign-extended to 32 bits again, make rtd and the 16-bit
	versions of link, bsr, bcc, and fbcc take this kind of immediate. 

	* ic/m68k/m68k-misc.c (tme_m68k_exception): Now log a message when a
	double fault causes a processor halt. 

	* ic/m68k/m68k-opmap-make.pl: The initial rewrite of the opcode map
	generation resulted in an enormous opcode map source file, and,
	because the instruction function pointers were in the map entries
	directly, an opcode map array that wasn't 64-bit friendly. 
	Now, the instruction function pointers are in a small separate array
	which is indexed by eight bits in the 32-bit opcode parameter
	information, which is all that remains in the opcode map.  To make
	room for these eight bits, the first EA mode and reg fields are not
	stored (and are instead are swapped in by the instruction executer
	after the instruction function has been fetched), and the special
	operation field has been reduced to a single bit.  To shrink the
	opcode map sources, we take advantage of the fact that each of the
	1024 aligned sets of 64 opcodes (a "root") uses one of a small number
	of patterns to initialize itself (for m68000 through m68020, there are
	only 37 such patterns), and we generate a function to initialize the
	parameters in that pattern.  Also, each CPU uses the previous CPU's
	opcode initialization function to initialize the bulk of its opcode
	map, making changes only as needed. 
	All of this has reduced the size of the opcode map source file
	dramatically. 
	Also, support for 16-bit immediates, sign-extended to 32 bits, has
	been added again. 

Tue Mar 15 02:56:58 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m6888x.c (tme_m68k_fbcc): All 16-bit immediates are now
	sign-extended to 32-bits in a fixed immediate register. 

	* ic/m68k/m68k-insns.c (_tme_m68k_bcc):
	(tme_m68k_bccl):
	(_tme_m68k_bsr):
	(tme_m68k_bsrl): Added. 
	(tme_m68k_bcc): Now just use _tme_m68k_bcc. 
	(tme_m68k_bsr): Now just use _tme_m68k_bsr. 
	(tme_m68k_link): Now handle the 16-bit variant explicitly. 
	(tme_m68k_rtd): Now handle our 16-bit argument correctly. 
	(tme_m68k_mull):
	(tme_m68k_divl): Added. 

Thu Mar 10 13:29:42 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68010.c: Now define _TME_M68K_EXECUTE_OPMAP to
	tme_m68k_opcodes_m68010 when compiling the executors. 
	TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68010): No longer call
	_tme_m68010_decoder_map_init(). 

	* ic/m68k/m68020.c: Now define _TME_M68K_EXECUTE_OPMAP to
	tme_m68k_opcodes_m68020 when compiling the executors. 
	TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68020): No longer call
	_tme_m68020_decoder_map_init(). 

	* ic/m68k/m68k-insns-auto.sh: cas2 now gets its specop2 as a 16-bit
	operand.  moves now must do its own memory cycles, and EA
	postincrement and predecrement. 
	Now track memory statistics in the memory functions. 

	* ic/m68k/m68k-iset.txt: Many simplifications, and some expansions, to
	enable faster instruction dispatching.  Eliminated all specops except
	for specop16 and fpgen, eliminated the #16S32 immediate type (all
	16-bit immediates are now sign-expanded to 32 bits), and bcc and bsr
	are now expanded (multiple iset lines may expand to the same pattern,
	with the first one winning, but also with a system of * understood by
	m68k-opmap-make.pl to count the correct number of duplicates). 

	* ic/m68k/m68k-misc-auto.sh: Now define a 96-bit register for
	immediates.  Now define registers for the constants zero through
	eight. 

	* ic/m68k/m68k-misc.c: Removed the small immediates arrays. 
	(_tme_m68k_connection_break): Now return zero, to silence a warning
	(?). 
	(tme_m68k_new): Increased the instruction burst size to 200.  This
	dramatically improves performance.  Now initialize the small
	immediates. 
	(tme_m68k_redispatch): Count redispatch statistics. 
	(tme_m68k_tlb_fill): Count TLB fill statistics. 
	(tme_m68k_dump): No longer display the specop2 value. 

	* ic/m68k/m68k-opmap-make.pl (operand_final): Removed. 

	* ic/m68k/m68k-opmap-make.pl: Rewritten to support much faster
	dispatching of instructions.  Now each CPU gets an independent
	64K-entry array, indexed by first instruction word, that yields a
	function pointer and 32 bits of parameter information.  This
	information includes struct tme_m68k-relative offsets for the
	function's operands, EA and immediate fetching information, and specop
	information. 

Fri Feb 18 04:12:55 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/sun-mie.c (_tme_sun_mie_tlb_set_allocate): Atomic
	variable changes. 
	(_tme_sun_mie_tlb_fill): Don't invalidate a TLB entry if it happens to
	be the same as the one we're filling. 

	* bus/multibus/sun-sc.c (_tme_sun_sc_bus_cycle_dma): Fixed a bug where
	we would do 16-bit accesses in 8-bit mode. 
	(_tme_sun_sc_intack): Added. 
	(_tme_sun_sc_cycle_new):
	(_tme_sun_sc_callout):
	(_tme_sun_sc_bus_cycle_data_reg):
	(_tme_sun_sc_bus_cycle_icr):
	(_tme_sun_sc_scsi_cycle): Mostly mechanical changes to support the new
	events/actions SCSI bus interface. 
	(_tme_sun_sc_connection_make_scsi): No longer get any predefined SCSI
	sequences. 
	(_tme_sun_sc_connections_new): No longer provide a predefined SCSI
	sequence function. 
	(tme_bus_multibus,sun_sc): Added support for the "vme" argument. 

	* generic/fb-xlat-auto.sh: Fixed a serious bug where we would decide
	that FIFOs are always aligned, even when the FIFO's bits per pixel
	value isn't known at compile time. 
	Fixed a bug where xlat_run would get decremented during every loop
	iteration, instead of only after every translated source 32-bit word. 
	When the loop isn't unrolled for source pixels, this causes xlat_run
	to go negative too early, which can stop translation. 

	* generic/scsi.c (tme_scsi_connection_score): No longer score based on
	a predefined SCSI sequence function. 

	* ic/m68k/Makefile.am: Now build the m6888x support, which depends on
	the ieee754 support. 

	* ic/m68k/m68k-impl.h:
	* tme/ic/m68k.h: Added m6888x support. 

	* ic/m68k/m68k-iset.txt: Added the floating-point instructions. 

	* ic/m68k/m68k-misc.c (_tme_m6888x_enable): Added. 
	(_tme_m68k_connection_score): A bus must not provide an m6888x enable
	function. 
	(_tme_m68k_connections_new): A m68k provides an m6888x enable
	function. 
	(tme_m68k_new): Now pass FPU arguments to tme_m68k_fpu_new(), and
	display the FPU usage with tme_m68k_fpu_usage(). 
	(tme_m68k_do_reset): Reset any FPU. 

	* machine/sun2/SUN2-MULTIBUS: Make the bpf attachment for ie0 delay
	packets slightly.  This works around a sleep/wakeup race condition in
	the NetBSD kernel RARP code. 
	Changed the type of the bwtwo from obmem to multibus, since the bwtwo
	implementation is now common to all sun machines. 

	* machine/sun3/SUN3-CARRERA: Now define an unknown-compliance m68881. 
	Now use the revision 3.0 ROM. 
	Increased the size of the VME bus to the full 4GB.  Commented out the
	sc0 attachment, in favor of the new si0 attachment. 
	To support stock NetBSD 1.6*, make the Emulex tape respond to INQUIRY
	commands in a normal way. 

	* machine/sun3/sun3-control.c (_tme_sun3_control_cycle_handler): Call
	out changes to the FPU and DVMA enable bits.  Silently ignore an
	attempt to enable the Sun FPA. 

	* machine/sun3/sun3-impl.h: Now track the active DVMA TLBs, so that
	they can be invalidated when DVMA is enabled or disabled.  Atomic
	variable fixes, and a prototype for _tme_sun3_mmu_sdvma_change(). 

	* machine/sun3/sun3-mmu.c (_tme_sun3_cycle_dummy):
	(_tme_sun3_sdvma_disabled):
	(_tme_sun3_mmu_sdvma_change): Added. 
	(_tme_sun3_bus_tlb_fill): Now track TLB entries filled for DVMA space. 
	Entries that are filled while DVMA is disabled generate a VME bus
	fault.  For now, bus cycles to unmapped DVMA addresses are ignored. 
	(_tme_sun3_tlb_fill_mmu): Apparently the magic obio mapping of the
	PROM works over a PROM-sized region starting at 0x100000.  Made some
	changes to silence -Wuninitialized. 
	(_tme_sun3_mmu_tlb_set_allocate): Atomic variable changes. 

	* scsi/scsi-bus.c: Replaced the idea of a SCSI sequence with the much
	simpler idea of a bus agent waiting for one or more SCSI events to
	happen, then taking one or more SCSI actions. 
	(_tme_scsi_bus_callout): Now call out the events triggered and actions
	taken to the connection. 
	(_tme_scsi_bus_cycle): Now take the events to wait on and the actions
	to take from the connection.  A connection waits until one of its
	events triggers, then some part of its actions are taken.  There is
	now support for half and full SCSI bus arbitration, and reselection. 
	(_tme_scsi_bus_sequence_get): Removed. 
	(_tme_scsi_bus_connection_score):
	(_tme_scsi_bus_connections_new): We can't provide a predefined
	sequence function any more, or score a connection based on one. 

	* scsi/scsi-device.c (_tme_scsi_device_callout):
	(_tme_scsi_device_cycle): More or less mechanical changes to support
	the new events/actions SCSI bus interface.  Fixed a bug where we would
	go past the end of the message dispatch array for IDENTIFY messages. 
	(tme_scsi_device_connections_new): Removed the predefined SCSI
	sequence member assignment. 

	* scsi/scsi-tape.c (tme_scsi_tape_cdb_inquiry): It looks like
	nonexistent LUNs are reported as "unsupported", and not "not present". 
	Now identify as a SCSI-1 device, and be sure not to return more data
	than the initiator requested. 

	* tme/common.h: Now declare _tme_volatile. 
	Added some missing parentheses to _TME_FIELD_DEPOSIT().  Fixed a bug
	in the definition of the tme_value64_uint32s[] member of union
	tme_value64. 
	Added definitions for tme_value64_imul() and tme_value64_idiv(). 

	* tme/generic/Makefile.am: Now install float.h. 

	* tme/generic/bus.h: Now define TME_BUS_SIGNAL_DRQ and
	TME_BUS_SIGNAL_DACK. 

	* tme/generic/scsi.h: Now define TME_SCSI_ID_SELECTED() and
	TME_SCSI_ID_RESELECTED(), to determine if an ID is being selected or
	reselected.  Replaced the idea of a SCSI sequence with the much
	simpler idea of a bus agent waiting for one or more SCSI events to
	happen, then taking one or more SCSI actions. 

	* tme/ic/Makefile.am: Now install i825x6.h and ieee754.h. 

	* tme/machine/sun.h: Added a prototype for tme_sun_si(). 

	* tme/scsi/scsi-device.h: Removed the old predefined SCSI sequences
	from struct scsi_device. 

	* tme/scsi/scsi-msg.h: Now define TME_SCSI_MSG_IDENTIFY_LUN_MASK, for
	getting the LUN out of an IDENTIFY message. 

	* tmesh/tmesh-input.y: Now define YYMAXDEPTH, to silence -Wundef. 

Thu Feb 17 13:42:44 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* Makefile.am: Added tools/ to SUBDIRS, and dist/ to EXTRA_DIST. 
	Added a dist-hook target to clean the CVS directories out of dist/. 

	* acinclude.m4 (AC_CHECK_FLOAT_FORMAT):
	(AC_CHECK_FLOAT_LIMITS): Added. 

	* configure.in: Bumped version to 0.4. 
	Now check for limits.h and float.h.  Check for volatile, float,
	double, and long double, and the signal handler type. 
	Added ieee754 and ncr5380 to the list of sun3 ICs.  When using gcc,
	now use -Wundef when compiling with warnings, and set the no strict
	aliasing flag.  Add the floating point format configuration to
	tmeconfig.h. 

	* generic/Makefile.am: Now build float.c and float-auto.c, and include
	float-auto.sh and float-auto.c in the distribution. 

	* generic/bus-el.c generic/bus.c machine/sun/sun-mmu.c
	  machine/sun/sun-obie.c machine/sun2/sun2-impl.h
	  machine/sun2/sun2-mmu.c tme/atomics.h tme/generic/bus.h
	  tme/machine/sun.h:

	  Cleaned up atomic variables.  Now atomic variables declared with
	  TME_ATOMIC and TME_ATOMIC_POINTER_TYPE are volatile.  To do this
	  right, TME_ATOMIC_POINTER_TYPE changed to take just the base type
	  pointed to, so there has been some fallout. 

	* generic/float-auto.sh generic/float.c ic/ncr5380.c
	  ic/ieee754/Makefile.am ic/ieee754/ieee754-misc-auto.sh
	  ic/ieee754/ieee754-misc.c ic/ieee754/ieee754-ops-auto.sh
	  ic/ieee754/ieee754-precision.sh ic/ieee754/softfloat-tme.c
	  ic/ieee754/softfloat-tme.h ic/m68k/m6888x-auto.sh ic/m68k/m6888x.c
	  machine/sun/sun-si.c tme/generic/float.h tme/ic/ieee754.h
	  tools/Makefile.am:

	  Added. 

	* host/posix/posix-disk.c (tme_host_posix,disk): Only probe for the
	block size if the device is a character device.  If we have mmap
	support, the block size for all devices must be some multiple of the
	page size - this fixes a bug where we would try to mmap()
	non-page-sized regions at non-page boundaries. 

	* ic/Makefile.am: Added ieee754 to the list of distribution
	subdirectories.  Now build ncr5380.c. 
	Added i825x6reg.h to the list of i825x6 sources. 

	* ic/m68k/m68020.c (_tme_m68020_exception):
	(_tme_m68020_rte): Fixed bugs in the handling of bus fault frames for
	instruction fetches.  Previously, we would always fault on stage B,
	and only on stage C for a 32-bit fetch.  This was supposed to be the
	other way around.  Also, an address error doesn't set a fault bit,
	only a rerun bit. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed some bugs
	caught by gcc -Wuninitialized. 

	* ic/m68k/m68k-opmap-make.pl: Fixed a bug where the illegal opcode
	wouldn't get the 'illegal' specop. 

	* libtme/threads-sjlj.c [HAVE_GTK]: Define G_ENABLE_DEBUG if it isn't
	defined, to silence -Wundef. 

	* machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Fixed a serious bug
	where any page marked as modified was given out as writable, even if
	it wasn't marked as writable.  SunOS likes to set page table entries
	that are modified, but not writable, and this bug was preventing
	proper copy-on-write behavior. 

	* machine/sun2/Makefile.am: No longer build sun2-bwtwo.c. 

	* machine/sun2/sun2-bwtwo.c: Removed. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_connections_new): Fixed bugs
	in forming the list of free buses. 
	(tme_machine_sun2,zs): Now use the standard Sun z8530 socket
	definition. 
	(tme_machine_sun2,bwtwo): Added. 

	* machine/sun3/sun3-mainbus.c (_tme_sun3_bus_signal): Apparently,
	SunOS likes to set both the level 5 and level 7 clock interrupt enable
	bits.  The level 5 bit seems to take precedence. 
	(_tme_sun3_connection_score): Insist on a m68020 or better. 
	(tme_machine_sun3,si): Added. 

	* scsi/emulexmt02.c (_tme_emulexmt02_cdb_request_sense): Fixed a bug
	where we weren't putting the Emulex error code in the sense. 
	(_tme_emulexmt02_cdb_inquiry): Added a hack to make this tape usable
	to install SunOS 4.1.1. 
	(tme_scsi_tape_emulexmt02_init): If the user specified a vendor of
	EMULEX, use the normal INQUIRY CDB handling, instead of returning the
	useless Emulex INQUIRY data.  Now return an illegal command for a
	RESERVE CDB. 

Thu Feb 17 02:14:57 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns.c (tme_m68k_bfffo): Fixed a bug where we were
	using ffs(), which finds the least significant bit set, and not the
	most significant bit set.  Now find the most significant bit set. 

	* ic/m68k/m68k-verify.c (_tme_m68k_verify_end): Added better support
	for verifying bitfield instructions.  Don't try to verify
	floating-point instructions. 
	(tme_m68k_verify_end_branch): Now leave the m68k structure unchanged. 

	* machine/sun/Makefile.am: Added sun-fb.h and sun-si.c to the sources
	list.  Added tme-sun-eeprom.pl to the distribution. 

Wed Jan 26 13:13:29 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* host/gtk/gtk-display.h: If G_ENABLE_DEBUG isn't defined, define it
	to zero.  Some GTK installations apparently require this. 

	* host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Allocate a
	GdkImage with the extra scanlines needed to hold the overtranslation
	that the automatically generated functions do. 

	* ic/isil7170.c: Include <time.h> and not <sys/types.h> to get struct
	tm. 

	* ic/m68k/m68020.c (_tme_m68020_exception): Store the memory Z buffer. 
	(_tme_m68020_rte): Restore the memory Z buffer. 

	* libtme/module.c (tme_module_open): Fixed a bug where were freeing
	the tokens array twice. 

	* scsi/scsi-msg.c (tme_scsi_device_msg_identify): Now set the
	addressed LUN. 

Sun Jan 16 01:24:37 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Added support for
	executing floating-point general instructions. 

Fri Jan 14 12:27:41 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* dist/softfloat/processors/386-GCC.h
	  dist/softfloat/processors/SPARC-GCC.h
	  dist/softfloat/softfloat/README.txt
	  dist/softfloat/softfloat/SoftFloat-history.txt
	  dist/softfloat/softfloat/SoftFloat-source.txt
	  dist/softfloat/softfloat/SoftFloat.txt
	  dist/softfloat/softfloat/timesoftfloat.txt
	  dist/softfloat/softfloat/bits32/softfloat-macros
	  dist/softfloat/softfloat/bits32/softfloat.c
	  dist/softfloat/softfloat/bits32/timesoftfloat.c
	  dist/softfloat/softfloat/bits32/386-Win32-GCC/Makefile
	  dist/softfloat/softfloat/bits32/386-Win32-GCC/milieu.h
	  dist/softfloat/softfloat/bits32/386-Win32-GCC/softfloat-specialize
	  dist/softfloat/softfloat/bits32/386-Win32-GCC/softfloat.h
	  dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/Makefile
	  dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/milieu.h
	  dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat-specialize
	  dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat.h
	  dist/softfloat/softfloat/bits32/templates/Makefile
	  dist/softfloat/softfloat/bits32/templates/milieu.h
	  dist/softfloat/softfloat/bits32/templates/softfloat-specialize
	  dist/softfloat/softfloat/bits32/templates/softfloat.h
	  dist/softfloat/softfloat/bits64/softfloat-macros
	  dist/softfloat/softfloat/bits64/softfloat.c
	  dist/softfloat/softfloat/bits64/timesoftfloat.c
	  dist/softfloat/softfloat/bits64/386-Win32-GCC/Makefile
	  dist/softfloat/softfloat/bits64/386-Win32-GCC/milieu.h
	  dist/softfloat/softfloat/bits64/386-Win32-GCC/softfloat-specialize
	  dist/softfloat/softfloat/bits64/386-Win32-GCC/softfloat.h
	  dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/Makefile
	  dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/milieu.h
	  dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat-specialize
	  dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat.h
	  dist/softfloat/softfloat/bits64/templates/Makefile
	  dist/softfloat/softfloat/bits64/templates/milieu.h
	  dist/softfloat/softfloat/bits64/templates/softfloat-specialize
	  dist/softfloat/softfloat/bits64/templates/softfloat.h:

	  Import of SoftFloat Release 2b. 

	* dist/softfloat/softfloat/bits32/softfloat.c:
	* dist/softfloat/softfloat/bits64/softfloat.c: Added the tme/softfloat
	glue and removed some unused variables. 

Fri Jan 14 11:44:18 2005  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/sun/tme-sun-eeprom.pl: Make selftest-#megs default to zero. 
	* tools/tme-binary-struct.pl.in: When standard input is a terminal, we
	don't read any input. 

Thu Aug 19 12:27:24 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* acinclude.m4 (AC_CHECK_SHIFTSIGNED): Added. 

	* configure.in: Use AC_CHECK_SHIFTSIGNED() to see if right shifts of
	signed integrals preserve sign. 
	Added support for sun3 systems. 

	* generic/bus-el.c (_tme_bus_intack): If a device doesn't acknowledge
	interrupts, return any user-specified vector on the bus connection
	before falling back to the undefined vector. 
	(_tme_bus_connections_new): Now allow the user to specify a vector on
	the bus connection. 
	(tme_generic,bus): Added a hack that allows the user to specify a 4GB
	bus on a 32-bit system. 

	* ic/Makefile.am: Now build tme_ic_isil7170.la. 

	* ic/i825x6.c (_tme_i825x6_callout_cu): Added a missing break
	statement to a switch arm. 

	* ic/isil7170.c ic/m68k/m68020.c machine/sun/sun-bwtwo.c
	  machine/sun/sun-fb.c machine/sun/sun-fb.h machine/sun/sun-obie.c
	  machine/sun/tme-sun-eeprom.pl machine/sun3/Makefile.am
	  machine/sun3/SUN3-CARRERA machine/sun3/sun3-control.c
	  machine/sun3/sun3-impl.h machine/sun3/sun3-mainbus.c
	  machine/sun3/sun3-mmu.c tme/ic/isil7170.h
	  tools/tme-binary-struct.pl.in:

	  Added. 

	* ic/m68k/Makefile.am: Removed an inadvertent m68k-verify.c from
	tme_ic_m68k_la_SOURCES. 

	* ic/m68k/Makefile.am: Now compile m68020.c. 

	* ic/m68k/m68k-misc.c (tme_m68000_exception_process):
	(tme_m68020_exception_process): For illegal instruction exceptions,
	now use the line A or line F vector as appropriate. 
	(tme_m68k_rte_start): Added some TME_M68K_SEQUENCE_RESTARTING
	protection. 

	* libtme/threads-sjlj.c: Removed the unused
	tme_sjlj_thread_cond_notified field from the thread structure. 
	(tme_sjlj_thread_create): Initialize the thread's linkage in the
	timeout list. 

	* machine/Makefile.am: Added the sun3 directory to DIST_SUBDIRS. 

	* machine/sun/Makefile.am: Now build sun-bwtwo.c, sun-fb.c, and
	sun-obie.c for libtme_machine_sun.la. 
	Now make the tme-sun-eeprom script. 

	* machine/sun/sun-keyboards.txt: Added a map for the type 3 keyboard. 

	* machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Don't invalidate the
	old TLB entry if it happens to be the same one we're filling. 

	* tme/common.h: Now define TME_FIELD_MASK_EXTRACTU and the internal
	_TME_FIELD_MASK_FACTOR, for extracting field values using a mask. 

	* tme/generic/bus.h: Now define TME_BUS_CYCLE_SYNCHRONOUS_EVENT.  Now
	track a single interrupt vector for a connection, for those
	connections that only use a single, nonprogrammable vector. 

	* tme/ic/Makefile.am: Now install isil7170.h. 

	* tme/machine/sun.h: To allow for more code sharing, now define
	TME_SUN_Z8530_SIZE and TME_SUN_Z8530_SOCKET_INIT.  Added prototypes
	for tme_sun_obie() and tme_sun_bwtwo(). 

Wed Aug 11 12:30:28 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68010.c: Removed GROUPn_ from the TME_M68K_EXCEPTION_ macro
	names, since those group numbers applied to only the 68000 and 68010. 
	Also added the new TME_M68K_VECTOR_ macros. 

	* ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed problems with
	the way that tracing is handled, to enable support for 68020 tracing
	and its new trace exception frame format.  Fixed a bug in the code
	that detects a 32-bit branch.  Fixed a bug in decoding the divul and
	mulul extension words.  Added missing declarations for some variables
	used in 68020 effective address calculation. 

	* ic/m68k/m68k-impl.h: Replaced TME_M68K_FLAG_T with TME_M68K_FLAG_T0
	and TME_M68K_FLAG_T1, and use them wherever possible.  Removed the
	GROUPn_ from the TME_M68K_EXCEPTION_ macros, since the original group
	numbers were specific to the 68000 and 68010.  Added more exception
	frame format identifier macros.  Added new macros for the exception
	vectors. 
	(TME_M68K_INSN_BRANCH):
	(TME_M68K_INSN_CHANGE_SR): Improved tracing support. 

	* ic/m68k/m68k-insns-auto.sh: The old asr expansion (which was the
	same as the lsr expansion, but with a signed operand and result) had
	bugs and also required that right shifts of a signed operand be
	arithmetic.  Added a new expansion that fixes these problems. 
	Removed the _GROUPn from the TME_M68K_EXCEPTION_ macro names, since
	the group numbers were specific to the 68000 and 68010.  Also added
	the new TME_M68K_VECTOR_ macros. 
	In the bus-cycle functions, recognize the
	TME_BUS_CYCLE_SYNCHRONOUS_EVENT pseudo-error, and make it force the
	executer to check external events before executing the next
	instruction. 

	* ic/m68k/m68k-insns.c: Removed the _GROUPn from the
	TME_M68K_EXCEPTION_ macro names, since the group numbers were specific
	to the 68000 and 68010.  Also added the new TME_M68K_VECTOR_ macros. 
	Where applicable, store the current PC as the last PC before setting
	the next PC as the current PC.  This supports format 2 exception
	frames, which stack the address of the instruction that caused the
	exception. 
	(tme_m68k_movec): Added support for the 68020 control registers. 

	* ic/m68k/m68k-misc-auto.sh: Create registers for the next program
	counter, the 68020 cacr and caar, and the always-zero register. 

	* ic/m68k/m68k-misc.c: Removed the _GROUPn from the
	TME_M68K_EXCEPTION_ macro names, since the group numbers were specific
	to the 68000 and 68010.  Also added the new TME_M68K_VECTOR_ macros. 
	(_tme_m68k_bus_interrupt):
	(tme_m68k_external_check): Implement a system that prevents NMI from
	being repeatedly accepted.  If the interrupt priority mask is already
	seven, only accept an NMI on a transition from deasserted to asserted. 
	(tme_m68k_new): Now set the mask of T bits used by the processor. 
	(tme_m68k_do_reset): Now clear the E and F bits in the 68020 cacr. 
	Fixed a bug where we loaded the initial SSP and PC from supervisor
	data space instead of the correct supervisor program space. 
	(tme_m68k_change_sr): Only recognize the M bit on a 68020 or greater,
	and fixed bugs in the selection of the correct stack pointer control
	register. 
	(tme_m68k_exception_process): Renamed to tme_m68000_exception_process,
	since the grouping and priority it implements are specific to the
	68000 and 68010. 
	(tme_m68020_exception_process): Added. 
	(tme_m68k_bitfield_offset): Simplified the bitfield byte offset
	calculation for negative bit offsets. 
	(tme_m68k_bitfield_width): Don't bother masking a bitfield width that
	was encoded in the instruction; it can't be greater than 31. 
	(_tme_m68k_bitfield_read): If the bitfield is in memory, note that the
	current instruction can fault.  Fixed bugs where we assumed that
	TME_BIT(32) is zero mod 2^32, when it may be 1 because of shift
	limiting, which would cause us to fail to mask and/or sign-extend a
	32-bit bitfield value correctly. 
	(tme_m68k_bitfield_write_unsigned): Fixed a bug where we wouldn't mask
	the value we were given before setting the flags.  Fixed bugs where we
	assumed that TME_BIT(32) is zero mod 2^32, when it may be 1 because of
	shift limiting.  If the bitfield is in memory, note that the current
	instruction can fault. 

	* ic/m68k/m68k-verify.c (tme_m68k_verify_mem_any): Fixed a bug where
	we wouldn't properly verify transfers of endianless data. 
	(tme_m68k_verify_init): Now set up a full 32-bit address space. 
	(_tme_m68k_verify_end): Store %a7 back in its proper stack pointer
	control register, so we can verify changes to the control registers. 
	Ignore extra verifier memory reads on bitfield instructions; the
	verifier bitfield implementation often reads addresses not covered by
	the bitfield. 

Mon May 17 11:57:01 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* host/bsd/bsd-bpf.c: Added support for the "delay" option, which
	delays all incoming packets for a user-specified number of
	microseconds. 
	(_tme_bsd_bpf_read): Fixed a bug where a TME_ETHERNET_READ_PEEK read
	would discard the read packet. 

Fri May 14 00:56:19 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* host/bsd/bsd-bpf.c: Removed the unused tme_bsd_bpf_cond_writer
	structure member. 
	(tme_host_bsd,bpf): Fixed a bug where we weren't initializing the
	tme_bsd_bpf_conf_reader condition. 

Tue May 11 12:03:36 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/i825x6.c: Added some logging. 
	(_tme_i825x6_callout_ru): Don't set the B bit in RFD status fields. 

	* libtme/misc.c (_tme_misc_number_parse): Some changes to silence gcc
	-Wuninitialized. 

Tue May 04 01:17:27 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/sun-mie.c:
	* ic/i825x6.c:
	* ic/i825x6reg.h:
	* tme/ic/i825x6.h: Added. 

	* machine/sun2/SUN2-MULTIBUS: Added commands to create ie0. 

Fri Apr 30 12:11:36 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/3c400.c bus/multibus/sun-sc.c generic/bus-el.c
	  ic/am9513.c ic/z8530.c ic/m68k/m68k-insns.c ic/m68k/m68k-misc.c
	  machine/sun2/sun2-mainbus.c tme/generic/bus.h:

	  Reworked bus signals in several ways: Added the notion of the bus
	  signals set.  Every bus should support multiple device-specific bus
	  signals sets, added by elements connecting to the bus.  This enables
	  elements to pass these device-specific bus signals to each other. 
	  Now bus signals are only specified as either asserted or negated,
	  and devices almost never signal edges.  For devices that only drive
	  signals either high or low, you can exclusive-or
	  TME_BUS_SIGNAL_LEVEL_ASSERTED with either TME_BUS_SIGNAL_LEVEL_HIGH
	  or TME_BUS_SIGNAL_LEVEL_LOW as appropriate, and provide that to the
	  device such that the device only needs to exclusive-or that with the
	  signal level to get the right asserted or negated level.  Also
	  expanded the number of generic bits in a signal value, and improved
	  the set of macros used to compose and decompose signal values. 

	* bus/multibus/sun-sc.c generic/bus.c ic/m68k/m68k-misc.c
	  machine/sun/sun-mmu.c tme/generic/bus.h:

	  Made changes to the TLB protocol, to better support reentrant
	  devices.  Now, a TLB entry passed to a fill function is expected to
	  be local on the stack, and it "reserves" the real, backing TLB entry
	  in the device's state.  This prevents the case where a device tries
	  to fill the same backing TLB entry at the same time in two or more
	  threads.  TLB fill functions for devices that need to invalidate
	  outstanding TLBs always invalidate the backing TLB entry.  After a
	  TLB fill has finished, the caller checks its reservation on the
	  real, backing TLB, and copies the local TLB back if the reservation
	  has not been broken.  Devices that want to use a TLB entry
	  immediately after the fill function returns must use the local TLB,
	  since it cannot have been invalidated yet.  Also made fixes to TLB
	  entry users that avoid rereading fields that are destroyed by
	  invalidation, after the device has committed to using the TLB entry,
	  since invalidation can happen at any time.  Also made the TLB
	  tme_bus_tlb_emulator_off_read member const. 

	* generic/Makefile.am:
	* generic/bus-device.c:
	* tme/generic/bus-device.h: Added generic bus-device support for real
	bus interfaces and bus-mastering. 

Fri Apr 30 01:46:01 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* configure.in: Added the i825x6 to the list of ICs for the sun2. 

	* bus/multibus/Makefile.am: Now compile sun-mie.c. 

	* ic/Makefile.am: Now build tme_ic_i825x6.la. 

	* tme/common.h: Added the TME_X_VERSION versioning macros.  Simplified
	the definition of TME_RANGES_OVERLAP. 

	* tme/generic/ethernet.h: Now define TME_ETHERNET_LENGTH_SIZE and
	TME_ETHERNET_HEADER_SIZE. 

	* tme/ic/m68k.h: Removed the ancient tme_m68k_tlb_bus_wrlock_on_read
	macro. 

Sun Mar 28 23:38:28 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus-device-auto.sh: Added. 

Fri Feb 20 12:42:11 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-execute.c [_TME_M68K_EXECUTE_FAST]: Make the fast
	emulator load pointers const. 

Fri Jan 09 03:42:48 2004  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus-el.c ic/am9513.c ic/m68k/m68k-misc.c
	  machine/sun2/sun2-mainbus.c tme/generic/bus.h:

	  Increased the possible number of signal flag bits. 
	  (TME_BUS_SIGNAL_WHICH): Renamed to TME_BUS_SIGNAL_INDEX, all callers
	  changed, and added a new macro with the same old name that simply
	  masks off the signal flag bits. 
	  (TME_BUS_SIGNAL_WHICH_INT): Renamed to TME_BUS_SIGNAL_INDEX_INT, all
	  callers changed. 

	* generic/bus.c (tme_bus_addr_parse_any): Now use
	tme_misc_unumber_parse_any(). 

	* generic/disk.c (tme_disk_dimension_parse): Now use
	tme_misc_unumber_parse(). 

	* generic/fb-xlat-auto.sh: No longer emit some pixel-doubling code in
	optimized translation functions for formats for 24 or more bits per
	pixel, because that code would expand to shifts of more than 32 bits,
	tripping gcc -Werror. 

	* host/gtk/gtk-screen.c (_tme_gtk_gdkimage_bipp): Fixed a bug where
	this would fail when bipp > depth, which is common on deep
	framebuffers. 

	* libtme/misc.c (_tme_misc_number_parse):
	(tme_misc_unumber_parse_any):
	(tme_misc_number_parse_any):
	(tme_misc_unumber_parse):
	(tme_misc_number_parse): Added. 

	* tme/misc.h: Added prototypes for tme_misc_unumber_parse_any,
	tme_misc_number_parse_any, tme_misc_unumber_parse, and
	tme_misc_number_parse. 

Wed Oct 29 02:03:26 2003  Matthew Fredette  <fredette@alum.mit.edu.>
 
	* Release 0.2 out.

	* host/gtk/gtk-screen.c: Some quick changes for GTK 2 compatibility. 

Sat Oct 25 17:08:02 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/am9513.c ic/mm58167.c ic/z8530.c ic/z8530reg.h
	  ic/m68k/m68k-execute.c ic/m68k/m68k-insns.c ic/m68k/m68k-iset.txt
	  ic/m68k/m68k-misc.c ic/m68k/m68k-verify.c tmesh/tmesh-cmds.c
	  tmesh/tmesh-util.c:

	  RCS Id, header comment, and license sweep. 

Thu Oct 16 03:02:11 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* configure.in: Now check for size_t. 
	Now make sure that <net/bpf.h> defines BIOCSHDRCMPLT before deciding
	that bpf support is present. 

	* generic/bus.c generic/keyboard.c host/bsd/bsd-bpf.c
	  host/bsd/bsd-if.c host/gtk/gtk-display.h host/gtk/gtk-keyboard.c
	  host/posix/posix-tape.c ic/am9513.c ic/m68k/m68k-impl.h
	  libtme/log-prf.c machine/sun2/sun2-mmu.c scsi/scsi-cdb.c
	  scsi/scsi-tape.c serial/kb-sun.c serial/serial-kb.c
	  serial/serial-ms.c tme/generic/keyboard.h tme/scsi/scsi-device.h
	  tmesh/tmesh-cmds.c tmesh/tmesh.c:

	  Fixed many small bugs caught by the gcc3 -Wall -Wuninitialized. 

	* host/posix/posix-disk.c: Fixed various type problems found by gcc3. 

	* scsi/acb4000.c (_tme_acb4000_cdb_bad): Fixed a bug where we set the
	amount of valid sense to TRUE instead of to a byte count. 

	* scsi/scsi-bus.c (_tme_scsi_bus_cycle): Work around an aliasing
	warning. 

	* tme/common.h: Fixed a bug where tme_value64_set had a conditional
	with two different result types. 
	When included by the implementation, now try to bring in standard
	headers to get string and memory function prototypes.  Added an
	incomplete list of prototypes for when standard headers aren't
	available. 

Mon Sep 29 11:42:56 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Added many comments, clarified some obscure
	code, and fixed a bug where unoptimized halving translators wouldn't
	shift the source FIFOs by two pixels when they had to. 

Wed Sep 10 01:49:22 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Fixed various bugs when the destination
	FIFOs may not be aligned, and when doubling.  These bugs were mostly
	found by inspection, and the fixes haven't been tested. 

Mon Sep 01 14:58:57 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* configure.in: Changed the version number. 
	Now only build the bsd host modules on BSD-like systems. 

	* generic/keyboard.c (_tme_keyboard_buffer_in0): Now examine any
	keycode on the user's event to determine if an earlier press of a
	different keysym from the same keycode has actually released. 

	* host/gtk/gtk-display.h: Now keep a mapping from keysym to keycode,
	for those keysyms that can only be generated by one keycode. 

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_x11_new):
	(_tme_gtk_keyboard_key_event):
	(_tme_gtk_keyboard_new): Now keep a mapping from keysym to keycode,
	for those keysyms that can only be generated by one keycode, and add
	that keycode to key events. 

	* host/posix/posix-tape.c: Some changes to silence gcc
	-Wuninitialized. 

	* host/posix/posix-tape.c (_tme_posix_tape_xfer1): When we hit the end
	of the media, don't try to skip ahead to a nonexistent next segment. 

	* libtme/hash.c (_tme_hash_lookup_internal): When the lookup succeeds,
	be sure to return the handle the bucket. 

	* libtme/log.c: Fixed many of the non-stdarg declarations of the
	variable-argument functions. 

	* machine/sun2/SUN2-MULTIBUS: Now set a fixed key rate on kbd0, to
	work around a bug in NetBSD where only the first of simultaneously
	received keycodes will be processed. 

	* serial/serial-kb.c (_tme_serial_kb_callout): Cleaned up the code
	that translates keyboard events into serial data, and added support
	for rate-limiting. 
	(_tme_serial_kb_th_rate): Added. 
	(_tme_serial_kb_serial_read):
	((tme_serial_,kb,keyboard): Added support for rate-limiting. 

	* serial/serial-kb.h: Added various members to control rate-limiting. 

	* tme/generic/keyboard.h: A keyboard event for a keysym can now
	include the related keycode.  This is for handling the case of a key
	release giving a different keysym than the key press did because
	modifiers changed in between. 

Sat Aug 23 13:50:34 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/Makefile.am: Be sure to distribute fb-xlat-auto.sh. 
	* generic/keyboard.c (_tme_keyboard_debug):
	(tme_keyboard_buffer_new): Changes to support logging debug messages. 

	* host/gtk/Makefile.am:
	* serial/Makefile.am:
	* tme/generic/Makefile.am: Added some headers that weren't getting
	distributed. 

	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_new): Allow the keyboard
	buffer to log messages using our log handle. 

	* host/posix/posix-tape.c: Changes to silence various gcc warnings. 

	* libtme/module.c: Added a hack to support older installed libltdls
	that don't define lt_ptr. 

	* libtme/threads-sjlj.c: Fixed uses of struct fd_set. 

	* tme/common.h: Now include <netinet/in.h> for the byteswapping
	functions. 

	* tme/generic/keyboard.h: Users can now give a log handle to the
	keyboard buffer, for logging debug messages. 

Fri Aug 22 16:39:30 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* serial/serial-kb.c (tme_serial_,kb,keyboard): Give the element's log
	handle to the keyboard buffer, to enable debugging. 

Tue Aug 12 23:00:40 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/sun/Makefile.am: Now install sun-keyboards.txt and
	my-sun-macros.txt. 

	* machine/sun/my-sun-macros.txt:
	* machine/sun/sun-keyboards.txt: Added. 

	* machine/sun2/Makefile.am: Removed some old targets and dependencies. 

	* machine/sun2/SUN2-MULTIBUS: Reorganized and added more comments. 
	As-is, this now represents the common case of local disk, no network. 

Fri Aug 08 13:33:45 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* tmesh/tmesh.c (main): Added support for the --noninteractive option. 
	Fixed a bug where we wouldn't report meaningful file and line number
	information on early errors. 

Thu Aug 07 22:14:46 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/sun-sc.c (_tme_sun_sc_bus_cycle_data_reg): Added. 
	(_tme_sun_sc_bus_cycle_data):
	(_tme_sun_sc_bus_cycle_cmd_stat): Now use
	_tme_sun_sc_bus_cycle_data_reg to run the bus cycle. 
	(_tme_sun_sc_tlb_fill): The data register can't allow fast reading. 

	* host/posix/posix-disk.c (_tme_posix_disk_buffer_get): Now honor a
	device's block size. 
	(tme_host_posix,disk): If the disk image is a character device, see if
	it has a minimum block size. 

	* host/posix/posix-tape.c (__tme_posix_tape_command): Fixed a bug
	where an error return value wouldn't get returned.  Fixed a bug where
	a LOAD control would get called out even when an error occured during
	loading. 

	* scsi/emulexmt02.c: Replaced blocksize with block_size for
	consistency. 
	(_tme_emulexmt02_cdb_block_limits): Added. 
	(tme_scsi,tape): Now handle the BLOCK LIMITS command. 

	* scsi/scsi-cdb.c (tme_scsi_device_cdb_illegal): Added. 
	(_tme_scsi_device_make_inquiry_string): Added. 
	(tme_scsi_device_make_inquiry_data): Added. 
	(tme_scsi_device_cdb_inquiry): Removed. 

	* scsi/scsi-device.c (tme_scsi_device_address_lun_aware): Always allow
	an INQUIRY command, even for a LUN that isn't defined. 
	(tme_scsi_device_new): Set a NULL handler for the INQUIRY command by
	default. 

	* scsi/scsi-disk.c: Renamed the tme-scsi-2 disk type to tme-scsi-1, to
	reflect that it's a SCSI-1 disk. 
	(tme_scsi_disk_cdb_inquiry): Added. 
	(tme_scsi_disk_cdb_mode_sense):
	(tme_scsi_disk_cdb_start_stop):
	(tme_scsi_disk_cdb_prevent_allow):
	(tme_scsi_disk_cdb_read_capacity): Crudely implemented these commands. 
	(tme_scsi_disk_cdb_read1):
	(tme_scsi_disk_cdb_write1): Implemented these commands. 
	(_tme_scsi_disk_control): Made public. 
	(_tme_scsi_disk_connection_break): Made public. 
	(_tme_scsi_disk_connection_make): Made public. 
	(_tme_scsi_disk_connections_new): Made public. 
	(tme_scsi,disk): Install the disk handler for the INQUIRY command. 

	* scsi/scsi-tape.c (tme_scsi_tape_cdb_inquiry): Added. 
	(tme_scsi_tape_cdb_load_unload):
	((tme_scsi_tape_cdb_prevent_allow): Made these command handlers do
	nothing, for now. 
	(tme_scsi,tape): Install the tape handler for the INQUIRY command. 

	* tme/generic/disk.h: Define some disk controls. 

	* tme/scsi/scsi-cdb.h: Define various macros, types, and prototypes
	for generating INQUIRY response data. 

	* tme/scsi/scsi-disk.h: Added some prototypes for some now-public
	functions. 

	* tme/scsi/scsi-tape.h: Added a prototype for
	tme_scsi_tape_cdb_inquiry. 

Tue Aug 05 03:41:31 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/sun-sc.c (_tme_sun_sc_scsi_cycle): If we're not
	starting DMA, be sure to call out a wait-change cycle instead,
	otherwise we can miss SCSI bus transitions. 

	* generic/Makefile.am: Now compile tape.c

	* generic/tape.c host/posix/posix-tape.c scsi/emulexmt02.c
	  scsi/scsi-tape.c tme/generic/tape.h tme/scsi/scsi-tape.h:

	  Added. 

	* host/posix/Makefile.am: Now compile posix-tape.c. 

	* ic/z8530.c (_tme_z8530_bus_cycle): Added support for the WR0 reset
	Rx interrupt command. 

	* ic/m68k/m68k-impl.h: Now always declare tme_m68k_verify_hook. 

	* ic/m68k/m68k-insns-auto.sh: Fixed a bug in the V bit calculation in
	the asl insns. 

	* ic/m68k/m68k-misc.c (tme_m68k_verify_hook): Now always compile this
	function. 

	* ic/m68k/m68k-verify.c (_tme_m68k_verify_end): Ignore the T bits when
	verifying %sr. 

	* machine/sun2/SUN2-MULTIBUS: Updated. 

	* scsi/Makefile.am: Now compile emulexmt02.c and scsi-tape.c. 

	* scsi/acb4000.c (_tme_acb4000_address_lun): When marking a
	nonextended sense as valid we now have to indicate how many bytes it
	contains. 

	* scsi/acb4000.c:
	* tme/scsi/scsi-device.h: Fixed a comment. 

	* scsi/scsi-bus.c (_tme_scsi_bus_cycle): Now be more universal about
	remembering the last SCSI bus state we called out to each connection,
	and call out whenever that state changes and the connection wants a
	callout.  When a connection gives us an empty DMA sequence, instead of
	aborting just immediately call out.  When a connection is in a DMA
	sequence and the bus gets reset, try to reset on behalf of the
	connection. 

	* scsi/scsi-cdb.c (tme_scsi_device_cdb_request_sense): Now require
	that the valid marker for nonextended senses give the length of the
	sense. 

	* scsi/scsi-device.c (tme_scsi_device_target_phase): Now log up to 128
	bytes of output in various phases. 
	(_tme_scsi_device_cycle): Now log short transfers. 
	(tme_scsi_device_target_dsmf): Fixed a comment. 

	* scsi/scsi-disk.c (_tme_scsi_disk_connections_new): Fixed a usage
	string. 
	(tme_disk,new): Fixed a comment. 

	* serial/ms-mssystems.c: Removed the 3-byte packet support, since it's
	apparently only found on the Tadpole SPARCbooks. 

	* serial/serial-ms.c (_tme_serial_ms_serial_config): Now store the
	peer's serial configuration. 

	* serial/serial-ms.h: Now store the peer's serial configuration. 

	* tme/connection.h: Now define TME_CONNECTION_TAPE. 

	* tme/generic/Makefile.am: Now install tape.h. 

	* tme/scsi/Makefile.am: Now install scsi-tape.h. 

Thu Jul 31 19:03:16 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* scsi/scsi-bus.c (_tme_scsi_bus_cycle): Fixed some uses of dma_in to
	dma; caught by gcc -Wuninitialized. 

	* tmesh/tmesh-cmds.c (_tmesh_command_log): Wrapped some otherwise
	unused declarations in !TME_NO_LOG. 

Thu Jul 31 01:47:46 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/Makefile.am: Now compile mouse.c. 

	* generic/fb.c (tme_fb_xlat_best): Fixed a bug where we wouldn't
	reject translation functions that don't match the question. 

	* generic/keyboard.c: Fixed a comment. 

	* generic/mouse.c host/gtk/gtk-mouse.c serial/ms-mssystems.c
	  serial/serial-ms.c serial/serial-ms.h tme/generic/mouse.h:

	  Added. 

	* host/gtk/Makefile.am: Now compile gtk-mouse.c. 

	* host/gtk/gtk-display.c:
	* host/gtk/gtk-display.h:
	* host/gtk/gtk-keyboard.c: Many changes to add mouse support. 

	* host/gtk/gtk-screen.c: Many changes to improve the user interface. 
	Now include a menu for changing the scaling factor.  Fixed bugs with
	respect to event masks, mostly by adding an event box. 

	* ic/z8530.c (_tme_z8530_callout): Fixed a bug that caused us to never
	check the callouts on channel B. 

	* ic/m68k/m68k-insns.c (tme_m68k_reset): Added a crude implementation
	of the reset instruction. 

	* machine/sun2/SUN2-MULTIBUS: Updated. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_bus_signal): Instead of
	aborting, just ignore the RESET signal from the CPU for now. 

	* serial/Makefile.am: Now compile serial-ms.c and ms-mssystems.c. 

	* tme/connection.h: Now define TME_CONNECTION_MOUSE. 

Tue Jul 29 18:33:14 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* Makefile.am:
	* tme/Makefile.am: Added scsi to SUBDIRS. 

	* configure.in: If long on the target is 64-bits, use it as our 64-bit
	type.  Substitute the scsi Makefiles. 

	* bus/multibus/3c400.c (TME_3C400_CSR_PUT_3c400): Corrected a
	tme_betoh_u16 into a tme_htobe_u16. 

	* bus/multibus/Makefile.am: Now compile sun-sc.c. 

	* bus/multibus/sun-sc.c generic/disk.c generic/scsi.c
	  host/posix/posix-disk.c scsi/Makefile.am scsi/acb4000.c
	  scsi/disk-tme.c scsi/scsi-bus.c scsi/scsi-cdb.c scsi/scsi-device.c
	  scsi/scsi-disk.c scsi/scsi-msg.c tme/generic/disk.h
	  tme/generic/scsi.h tme/scsi/Makefile.am tme/scsi/scsi-cdb.h
	  tme/scsi/scsi-device.h tme/scsi/scsi-disk.h tme/scsi/scsi-msg.h:

	  Added. 

	* generic/Makefile.am: Now compile disk.c and scsi.c. 

	* generic/bus-device.c:
	* generic/bus-el.c: Fixed a comment. 

	* host/posix/Makefile.am: Now compile posix-disk.c. 

	* host/posix/posix-memory.c:
	* host/posix/posix-serial.c: Fixed comments. 

	* ic/mm58167.c: Fixed many significant problems with this emulation,
	most notably that the size of the chip was not calculated correctly at
	all.  We now report with microsecond resolution, since SunOS's probe
	routine requires this. 

	* ic/z8530.c (_tme_z8530_intack): Simplified and fixed bugs in how
	variable interrupt vectors are computed.  For now, since there's no
	emulation of the IEI pin, we just behave as if it's always tied low,
	so we never put any vector on the bus during a hard interrupt
	acknowledge. 
	(_tme_z8530_bus_cycle): Now ignore all WR0 CRC reset commands.  Now
	support the WR0 transmitter reset command.  Now support reads of RR10
	and RR14. 

	* ic/m68k/m68k-insns-auto.sh: The movem instructions cannot fault when
	the register mask is zero.  Now that we generally have a 64-bit type
	available, fixed various bugs in the 64-bit multiply and divide
	instructions. 

	* ic/m68k/m68k-insns.c (tme_m68k_movec): Now appropriately mask values
	loaded into control registers.  movec only has a long version, and
	SunOS on the Sun-2 doesn't necessarily clear the remainder of the data
	register it uses to load %sfc and %dfc. 

	* ic/m68k/m68k-misc.c (tme_m68k_exception_process_start): Fixed a bug
	where the T bits weren't cleared.  This bug was found by SunOS on the
	sun2, which starts at least init in usermode with tracing enabled. 

	* ic/m68k/m68k-verify.c (tme_m68k_verify_init): Now assume that the
	CPU generates 28-bit addresses.  SunOS 3 on the Sun-2 does this. 

	* machine/sun/tme-sun-idprom.pl: Added support for the obscure
	Roadrunner-MB1. 

	* machine/sun2/sun2-bwtwo.c: Fixed various comments. 
	Because SunOS's probe routine fails otherwise, added support for the
	entire 2KB page starting at the CSR to appear undecoded, i.e., to look
	like the CSR repeated 1024 times. 

	* machine/sun2/sun2-impl.h: Now define TME_SUN2_DVMA_SIZE_MBMEM and
	TME_SUN2_DVMA_SIZE_VME. 
	Now make struct tme_sun2_bus_connection public, since the bus DVMA TLB
	filler needs to know which bus it's filling for. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_connections_new): When making
	the connections for the mbmem or vme buses, be sure to set the last
	address that we decode on the bus, for DVMA purposes. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_bus_tlb_fill): Fixed many bugs
	involving filling TLB entries for bus's DVMA regions. 
	(_tme_sun2_mmu_pte_set): Added a missing protection. 

	* tme/common.h: Added some crude support for 64-bit math, even for
	compilers that offer no 64-bit type at all. 

	* tme/connection.h: Now define TME_CONNECTION_SCSI and
	TME_CONNECTION_DISK. 

	* tme/generic/Makefile.am: Added more headers. 

	* tme/generic/bus-device.h: Corrected a comment. 

	* tme/generic/ic.h: Corrected the 64-bit support. 

	* tmesh/tmesh-cmds.c (_tmesh_command_log): Added. 

	* tmesh/tmesh-impl.h: Now define TMESH_COMMAND_LOG. 

	* tmesh/tmesh-input.y: Added support for parsing the `log' command. 

Tue Jul 22 18:30:31 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Changes to silence gcc -Wuninitialized. 
	* host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Changes to
	silence gcc -Wuninitialized. 

	* libtme/module.c (tme_module_open): Changes to silence gcc
	-Wuninitialized. 

	* libtme/threads-sjlj.c (tme_sjlj_dispatch): Declared some locals
	volatile to silence gcc's setjmp-related warning. 

Fri Jun 27 21:30:37 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* Makefile.am: Added the serial directory to SUBDIRS. 
	* configure.in: Many changes to support framebuffer emulation and X11
	and gtk elements.  Also added some serial elements support. 

	* generic/Makefile.am: Now create fb-xlat-auto.c and build fb.c and
	keyboard.c. 

	* generic/bus-device.c:
	* generic/bus-el.c:
	* generic/bus.c: Although I hate doing this, various changes to
	support a single bus connection connecting to a bus region sparsely. 

	* generic/fb-xlat-auto.sh: Now declare src_bypb to include one more
	extra line of data, to make a total of two. 
	Fixed a bug where translating and halving would really translate every
	line twice.  Now when we reach the end of a line we skip the next
	line, to move to the next pair of lines. 

	* generic/fb.c generic/keyboard.c host/gtk/Makefile.am
	  host/gtk/gtk-display.c host/gtk/gtk-display.h
	  host/gtk/gtk-keyboard.c host/gtk/gtk-screen.c libtme/hash.c
	  machine/sun2/sun2-bwtwo.c serial/Makefile.am serial/kb-sun.c
	  serial/serial-kb.c serial/serial-kb.h tme/hash.h tme/misc.h
	  tme/generic/fb.h tme/generic/keyboard.h:

	  Added. 

	* generic/keyboard.c: Disabled debug output. 

	* host/Makefile.am: Added gtk to DIST_SUBDIRS. 

	* ic/am9513.c (_tme_am9513_th_timer): Removed a newline from a log
	statement. 

	* ic/z8530.c (_tme_z8530_channel_reset): Fixed an incorrect reset
	value for RR3. 
	(_tme_z8530_config): Simply ignore a peer's request to change the
	serial configuration. 

	* ic/m68k/m68k-execute.c: To fix a problem where m68k execution could
	possibly never yield (by oscillating back and forth between fast and
	slow execution, for example) we make sure that we never run more than
	_tme_m68k_instruction_burst before checking for external interrupts
	and yielding. 

	* ic/m68k/m68k-impl.h: Now in addition to _tme_m68k_instruction_burst,
	the maximum burst length, there is
	_tme_m68k_instruction_burst_remaining, which is the maximum number of
	instructions remaining in the current burst. 

	* ic/m68k/m68k-iset-expand.pl:
	* ic/m68k/m68k-opmap-make.pl: Made the RCS keywords, copyright and
	license like other files. 

	* ic/m68k/m68k-misc.c (tme_m68k_new): Now initialize the new
	_tme_m68k_instruction_burst_remaining struct member. 

	* libtme/Makefile.am: Now compile hash.c, and use the GTK CFLAGS. 

	* libtme/misc.c (tme_misc_tokenize):
	(tme_free_string_array): Added. 

	* libtme/module.c (tme_module_open): Now use tme_misc_tokenize to
	tokenize. 

	* libtme/threads-sjlj.c: Although I hate doing this, many changes to
	support using the GTK event loop. 

	* machine/sun2/Makefile.am: Now build sun2-bwtwo.c. 

	* machine/sun2/SUN2-MULTIBUS: Added commands to create a real physical
	console. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_bus_intack): Now acknowledge
	interrupts on the obmem bus too, since the bwtwo z8530s are there. 

	* tme/Makefile.am: Now install misc.h and hash.h. 

	* tme/common.h: Now define tme_letoh_u16() and tme_letoh_u32(x). 
	Declare tme_free_string_array(). 

	* tme/connection.h: Add connection types for keyboards and
	framebuffers. 

	* tme/threads.h: Under _TME_HAVE_GTK, declare tme_threads_gtk_init. 

	* tme/tme.h: Now include <tme/hash.h> and <tme/misc.h>. 

	* tme/generic/Makefile.am: Now install fb.h and keyboard.h. 

	* tme/generic/bus-device.h:
	* tme/generic/bus.h: Changes to support a single bus connection
	connecting to a bus region sparsely. 

	* tmesh/Makefile.am: Now link with the GTK libraries. 

Fri Jun 27 01:37:57 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/fb-xlat-auto.sh: Added. 

Thu Jun 26 13:16:12 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* tme/generic/ic.h: Fixed grammar in a comment. 

Sun May 18 02:40:56 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* configure.in: Changed the version number to 0.0; this is very alpha. 
	There are now fewer include directories under tme/; many unnecessary
	headers that belonged to modules were removed. 

	* bus/multibus/3c400.c: No longer include <tme/bus/multibus/3c400.h>. 

	* bus/multibus/Makefile.am generic/Makefile.am host/bsd/Makefile.am
	  host/posix/Makefile.am ic/Makefile.am ic/m68k/Makefile.am
	  libtme/Makefile.am machine/sun/Makefile.am machine/sun2/Makefile.am
	  tmesh/Makefile.am:

	  Added library and module versioning. 

	* host/bsd/bsd-bpf.c:
	* host/bsd/bsd-if.c: Now include "bsd-impl.h" instead of
	<tme/host/bsd.h>. 

	* host/bsd/bsd-impl.h:
	* machine/sun/tme-sun-idprom.pl: Added. 

	* machine/sun2/SUN2-MULTIBUS: Changed the extension on the PROM and
	IDPROM files from .dat to .bin. 

	* machine/sun2/SUN2-MULTIBUS: Changed the name of the PROM filename to
	match the documentation. 

	* tme/Makefile.am: Removed the host and bus include directories; they
	don't exist anymore. 

Sat May 17 20:34:07 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* acinclude.m4: Added an RCS Id and a short comment. 
	* configure.in: Added an RCS Id, the copyright, and license.  Do a
	real path search for perl. 

	* libtme/log-prf.c:
	* libtme/module.c:
	* machine/sun2/sun2-mainbus.c: Changes to silence gcc -Wuninitialized. 

Fri May 16 21:48:16 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* Makefile.am TODO acconfig.h configure.in modules bus/Makefile.am
	  bus/multibus/3c400.c bus/multibus/Makefile.am generic/Makefile.am
	  generic/bus-device.c generic/bus-el.c generic/bus.c
	  host/bsd/Makefile.am host/bsd/bsd-bpf.c host/posix/Makefile.am
	  host/posix/posix-memory.c host/posix/posix-serial.c ic/Makefile.am
	  ic/am9513.c ic/mm58167.c ic/z8530.c ic/m68k/Makefile.am
	  ic/m68k/m68010.c ic/m68k/m68k-impl.h ic/m68k/m68k-insns-auto.sh
	  ic/m68k/m68k-misc.c libtme/Makefile.am libtme/alloc.c
	  libtme/element.c libtme/log-prf.c libtme/log.c libtme/misc.c
	  libtme/module.c libtme/threads-sjlj.c machine/Makefile.am
	  machine/sun/Makefile.am machine/sun/sun-mmu.c
	  machine/sun2/Makefile.am machine/sun2/SUN2-MULTIBUS
	  machine/sun2/sun2-impl.h machine/sun2/sun2-mainbus.c
	  machine/sun2/sun2-mmu.c tme/Makefile.am tme/common.h
	  tme/connection.h tme/element.h tme/log.h tme/module.h tme/tme.h
	  tme/tmesh.h tme/generic/bus-device.h tme/generic/bus.h
	  tme/ic/am9513.h tme/ic/m68k.h tme/ic/mm58167.h tme/ic/z8530.h
	  tmesh/Makefile.am tmesh/tmesh-cmds.c tmesh/tmesh-impl.h
	  tmesh/tmesh-input.y tmesh/tmesh-util.c tmesh/tmesh.c:

	  By far, this is the worst bulk commit I've ever done.  Many changes
	  to simplify the element interface as much as possible, to do modules
	  better, and to do logging better.  Fixed a small number of actual
	  bugs.  Also converted to modern autoconf and automake, because the
	  module support requires modern libtool.  Also added the main libtme,
	  libtmesh, and tmesh itself. 

	* ic/m68k/m68k-verify.c: Now include <stdio.h>. 

Fri May 16 17:50:17 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* acinclude.m4 (AC_CHECK_ALIGNOF): Now takes only a size, in bits, to
	check the alignment for.  Before, it used to take a string of the form
	intN_t, which wouldn't work on systems that don't define an intN_t
	type.  When cross-compiling, assume the target requires alignment
	equal to the size.  Now use AC_DEFINE_UNQUOTED's third argument to
	specify the config.h.in comment. 
	(AC_CHECK_SHIFTMAX): Added. 
	(AC_SYS_SOCKADDR_SA_LEN): Now use AC_DEFINE_UNQUOTED's third argument
	to specify the config.h.in comment. 

Thu May 15 15:52:08 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns-auto.sh: Fixed bugs in the shift and rotate
	insns, where we might try to shift by an amount greater than the
	maximum meaningful shift for a given size. 

Sat May 10 15:41:23 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* acinclude.m4 (AC_CHECK_ALIGNOF): Fixed a bug where this would stop
	on the first misalignment, instead of continuing to find the true
	minimum alignment.  For example, this would have found the minimum
	32-bit alignment to be 4 instead of 2 on a 68000 or 68010, stopping on
	the misaligned address 3. 

	* configure.in ic/Makefile.am ic/m68k/Makefile.am machine/Makefile.am
	  machine/sun2/Makefile.am tme/Makefile.am:

	  Some early distribution work. 

	* ic/m68k/m68k-insns-auto.sh:
	* ic/m68k/m68k-misc-auto.sh: Fixed some bad macro and type name
	references. 

	* ic/m68k/m68k-insns-auto.sh:
	* ic/m68k/m68k-misc-auto.sh: Handled the rename of the aligned and
	unaligned memory access rwlocking macros, and use the new
	tme_memory_sequence_ rwlocking macros.  Generally made things a little
	easier to read, although we do rely on the optimizer to do the right
	thing somewhat more. 

	* tme/threads.h: Renamed the memory-access locking functions to be
	tme_memory_HOW_WHATlock, where HOW is aligned or unaligned, and WHAT
	is rd or wr.  Now define the tme_memory_sequence_WHATlock macros, used
	when doing a sequence of memory accesses that must appear to be
	atomic. 
	Now define TME_SEQUENCE_ACCESS_NOT_COSTLIER as TRUE if locking for a
	sequence and locking for an aligned access have the same cost, else
	define it as FALSE. 

Sat May 10 00:31:32 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns-auto.sh: Overhauled the shift instructions to not
	use loops. 

Fri May 09 17:45:06 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-execute.c: As an optimization, now require the
	individual insn functions to use TME_M68K_INSN_CANFAULT if they may
	fault, instead of figuring out every time if an insn can fault or not. 
	Check that insn functions have set it if they need it, and left it
	unset if they do not need it. 

	* ic/m68k/m68k-execute.c: Made some changes to somewhat optimize
	certain effective address calculations. 

	* ic/m68k/m68k-impl.h: Now define TME_M68K_INSN_CANFAULT. 

	* ic/m68k/m68k-impl.h: Renumbered the TME_M68K_SIZE_ macros slightly
	to enable an optimization on effective address
	predecrement/postincrement calculation.  Grew the memory transfer
	function arrays to match. 
	Moved the generic IC data structure to the top of the m68k structure,
	to enable register indexing to happen without an offset. 
	Removed _tme_m68k_areg_increment, it's no longer needed. 

	* ic/m68k/m68k-insns-auto.sh:
	* ic/m68k/m68k-insns.c: Now use TME_M68K_INSN_CANFAULT where it's
	needed.  Also fixed some random restarting bugs in some insns. 

	* ic/m68k/m68k-misc.c: Removed _tme_m68k_areg_increment, it's no
	longer needed.  Grew the memory transfer function arrays to match the
	renumbering of the TME_M68K_SIZE_ macros, and added some preprocessor
	error checking on those macros. 

Fri May 09 14:36:16 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/multibus/3c400.c generic/bus-device.c generic/bus-el.c
	  generic/bus.c host/posix/posix-memory.c ic/am9513.c ic/mm58167.c
	  ic/z8530.c tme/generic/bus-device.h tme/generic/bus.h:

	  Bulk change to no longer require bus connections to have a
	  power-of-two width.  This is largely a name change, renaming
	  address_mask to address_last, as nothing depended on the
	  address_mask being all-bits-one. 

	* bus/multibus/3c400.c (_tme_3c400_callout): Make buffer status values
	have the minimum Ethernet frame size. 

	* ic/am9513.c: Now include <stdio.h>, in case
	TME_AM9513_TRACK_INT_RATE is defined. 

	* ic/am9513.c: Under TME_AM9513_TRACK_INT_RATE, periodically report
	the interrupt rates achieved by the various timers. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_m68k_tlb_fill): Because
	supervisor and user accesses go through different context registers,
	TLBs are generally only ever valid for the supervisor or the user, but
	not both.  Fixed a bug where a TLB for a user-visible page would be
	marked as good for the supervisor even if the mapping isn't the same
	in the system context. 

	* tme/generic/ethernet.h: Now define TME_ETHERNET_CRC_SIZE. 

Thu May 08 23:37:55 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns-auto.sh: Fixed bugs, found by the verifier, in
	the SR and CCR immediate instructions. 

	* ic/m68k/m68k-verify.c: Now keep a short ring of PCs verified. 

Thu May 08 19:22:10 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/z8530.c (_tme_z8530_intack): Changes to silence -Wuninitialized. 
	* ic/m68k/Makefile.am: No longer define _TME_M68K_OPW_OK. 
	* ic/m68k/m68k-execute.c: Changes to support verifying restarted
	instructions. 

	* ic/m68k/m68k-impl.h: Fixed the definitions of the dummy
	tme_m68k_verify_ macros. 

	* ic/m68k/m68k-impl.h: Now call tme_m68k_verify_end_branch inside
	TME_M68K_INSN_BRANCH.  Added a unique identifier member to the
	sequence structure.  Made a few functions take a const struct tme_m68k
	*.  Made changes to the verifier to support verifying restarted
	instructions. 

	* ic/m68k/m68k-insns-auto.sh: Fixed a bug found by the verifier, where
	the movem instructions weren't following the EA discipline correctly
	and so would transfer to the wrong addresses after a restart. 

	* ic/m68k/m68k-misc.c (tme_m68k_go_slow): Now take a const struct
	tme_m68k *. 
	(tme_m68k_sequence_empty):
	(tme_m68k_sequence_fill): Made the argument that's supposed to be
	read-only const.  Under _TME_M68K_VERIFY, save and restore the
	sequence unique identifier. 

	* ic/m68k/m68k-verify.c: Many changes to support verifying
	instructions that ended only after they were restarted because of one
	or more bus faults. 

Thu May 08 13:35:43 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-execute.c:
	* ic/m68k/m68k-impl.h:
	* ic/m68k/m68k-misc.c: Replaced _TME_M68K_OPW_OK bits with new
	_TME_M68K_VERIFY bits. 

	* ic/m68k/m68k-insns-auto.sh: In all memory access functions, added
	calls to the verifier.  Fixed a bug in the divide routines, found by
	the verifier - the N flag in set based on the final small quotient,
	not on the big one. 

	* ic/m68k/m68k-misc-auto.sh: Now define TME_M68K_IREG32_COUNT. 

	* ic/m68k/m68k-verify.c: Added. 

Wed May 07 02:37:05 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* generic/bus-el.c (_tme_bus_connections_new): Store the final bus
	interrupt signal number, not the raw ipl. 

	* ic/z8530.c: Although I hate doing this, too many changes to go into
	detail.  Much work to support interrupt driven operation. 

	* ic/z8530reg.h: Added definitions for RR3. 

	* ic/m68k/m68k-impl.h: Fixed a serious bug in the TME_M68K_FLAG_SR
	definition that would zero part of the interrupt mask. 

	* ic/m68k/m68k-insns-auto.sh: Fixed a bug where negx wasn't preserving
	the Z flag if the result was zero. 

	* machine/sun2/sun2-test.c (main): Fixed a bug where the zs0 ipl arg
	was getting lost. 

Mon May 05 23:20:11 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* generic/serial.c (tme_serial_buffer_copyout): Fixed a bug where if
	we were copying to a NULL buffer and the copyout wrapped in the ring
	buffer, we would do pointer arithmetic on the NULL. 

	* ic/m68k/m68010.c (_tme_m68010_rte): Fixed a bug where we forgot to
	recover the group 0 function code and address for the cycle restart. 
	Fixed a bug where we wouldn't reset to extract our internal state from
	the stack buffer. 

	* ic/m68k/m68k-insns-auto.sh: Fixed several instructions that trap or
	do trap-like things to update PC to be the PC of the following
	instruction before trapping. 
	(tme_m68k_read_mem): Fixed a memcpy direction bug. 

	* ic/m68k/m68k-insns.c: Fixed several instructions that trap or do
	trap-like things to update PC to be the PC of the following
	instruction before trapping. 

	* libtme/threads-sjlj.c (tme_sjlj_cond_notify): Fixed a bug where we
	would cancel a thread's wait condition instead of notifying the
	thread. 

	* machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Support the new
	expansive MMU PTE protections. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_bus_intack): Now acknowledge
	soft interrupts. 
	(tme_machine_sun2_clock_new): Fixed a bug where we had the Timer 2
	output miswired. 

	* machine/sun2/sun2-mmu.c: Many changes to support the new full
	understanding of sun2 PTE protections. 

	* tme/machine/sun.h: Expanded on the generic PTE protections, to
	support the more expressive sun2 protections. 

Sun May 04 22:46:12 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/am9513.c (_tme_am9513_counters_disarm): Added. 
	(_tme_am9513_th_timer): Try to avoid 32-bit integer overflow when
	calculating the sleep time. 
	(_tme_am9513_bus_cycle): Now support the disarm timers command. 

	* ic/mm58167.c: Changes to silence -Wuninitialized. 

	* ic/mm58167.c:
	* tme/ic/mm58167.h: Added. 

	* ic/z8530.c: Although I hate doing this, too much work to go into
	detail.  Did more groundwork for eventually generating interrupts. 

	* ic/m68k/m68k-execute.c: Now wrap the execute hook call in
	_TME_M68K_OPW_OK. 

	* ic/m68k/m68k-misc.c (tme_m68k_exception_process_start): Fixed a bug
	where the new ipl mask was put into the sr at the wrong position. 

	* machine/sun2/sun2-mainbus.c (tme_machine_sun2_tod_new): Added. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_obbus_fault_handler): Removed. 
	(_tme_sun2_bus_fault_handler):
	(_tme_sun2_obio_fault_handler):
	(_tme_sun2_obmem_fault_handler): Added. 
	(_tme_sun2_multibus_fault_handler): Now just call
	_tme_sun2_bus_fault_handler. 
	(_tme_sun2_tlb_fill_mmu): Use the new bus-specific fault handlers. 

	* machine/sun2/sun2-test.c: Now create and connect the TOD chip. 

	* tme/ic/Makefile.am: Updated. 

Sat May 03 19:27:07 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* ic/m68k/m68k-execute.c: Fixed multiple bugs in the handling of brief
	EA extension words. 

	* ic/m68k/m68k-insns-auto.sh: Fixed a bug where subx and addx didn't
	take the (previous) X flag into account when calculating flags. 

	* machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler): Now
	call _tme_sun2_ipl_check whenever the enable register is written. 

	* machine/sun2/sun2-impl.h: Added macros for the enable register bits. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_ipl_check): Added. 
	(_tme_sun2_bus_signal): Now call _tme_sun2_ipl_check to update the ipl
	driven to the CPU. 

Fri May 02 17:37:10 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO: Updated. 

	* acconfig.h acinclude.m4 bus/multibus/3c400.c
	  bus/multibus/Makefile.am generic/ethernet.c host/bsd/Makefile.am
	  host/bsd/bsd-bpf.c host/bsd/bsd-if.c tme/generic/ethernet.h:

	  Added. 

	* configure.in: Now check for minimum alignments.  Now check for
	various headers and other things needed by the BSD code. 

	* bus/Makefile.am:
	* generic/Makefile.am:
	* host/Makefile.am:
	* tme/generic/Makefile.am: Added support for new components. 

	* bus/multibus/3c400.c (_tme_3c400): Some changes to silence
	-Wuninitialized. 

	* host/posix/posix-serial.c: Fixed some indentation, and one 0 to a
	TME_OK. 

	* ic/am9513.c (_tme_am9513_counters_load):
	(_tme_am9513_counters_arm): Added. 
	(_tme_am9513_th_timer): Try to avoid multiplication overflow when
	calculating the number of basic ticks that have elapsed.  Try to
	handle armed and unarmed counters correctly. 
	(_tme_am9513_bus_cycle): Now load and arm counters correctly. 
	(tme_ic_am9513_new): Calculate the number of basic ticks in a
	millisecond for the benefit of the timer thread. 

	* ic/m68k/m68010.c (_tme_m68010_rte): tme_m68k_rte_finish no longer
	touches the sequence at all, so before calling it make sure the
	sequence is exactly what it's supposed to be. 

	* ic/m68k/m68k-execute.c: In the fast executor, assert that the ITLB
	entry allows fast reading for the current PC or that the PC is one
	greater than the last address covered by the entry.  Fixed the
	fast-fetch-failed code to more correctly simulate a group 0 exception
	and associated RTE. 

	* ic/m68k/m68k-insns-auto.sh: Cleaned up and fixed the code generated
	for cmpm, addx, and subx.  At least, cmpm wasn't getting its address
	registers postincremented, and addx and subx weren't treating the Z
	flag properly.  In the fetch insns, take the address to fetch from as
	an argument, instead of using the real ic->tme_m68k_ireg_pc with
	tme_m68k_read
	(which could actually update it, if recovering from a group 0
	exception!)

	* ic/m68k/m68k-misc-auto.sh: The slow-executor fetch macros now call
	the fetch insns with the PC to fetch from. 

	* ic/m68k/m68k-misc.c (tme_m68k_rte_finish): No longer do anything
	with the sequence at all, just redispatch it. 
	(tme_m68k_sequence_fill): Now set the sequence next-transfer to one,
	to force a restart in case later code doesn't. 
	(tme_m68k_insn_buffer_xfer): The insn buffer is kept in host byte
	order, not big-endian byte order. 

	* libtme/threads-sjlj.c: No longer track and relock a mutex that was
	held when tme_sjlj_cond_wait_yield was called; the thread itself will
	relock the mutex when it is restarted. 

	* machine/sun2/Makefile.am: Now build and link against the Multibus
	and BSD libraries. 

	* machine/sun2/sun2-test.c (tme_memdup): Added. 
	(connect_elements): Now start the new convention of initializing the
	new-connections lists to NULL and letting the new-connections
	functions add elements incrementally. 
	(main): Now create the ec0 and bpf0 elements and add them to the
	machine. 

	* tme/common.h: Added a macro for tme_dup and a prototype for
	tme_memdup. 

	* tme/connection.h: Now define TME_CONNECTION_ETHERNET. 

	* tme/threads.h: Fixed a bug where the tme_thread_write macro was
	defined to be the read syscall. 

Tue Apr 29 20:28:05 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* AUTHORS:
	* COPYING:
	* NEWS:
	* README: Added. 

	* generic/bus-device.c generic/bus-el.c host/posix/posix-serial.c
	  ic/z8530.c ic/m68k/m68k-misc.c machine/sun2/sun2-mainbus.c:

	  In all connections_new functions, add the new connection
	  possibilities to the list rooted at *_conns, instead of always
	  replacing the list. 

	* generic/bus-el.c host/posix/posix-memory.c ic/am9513.c
	  ic/m68k/m68k-execute.c ic/m68k/m68k-insns-auto.sh
	  ic/m68k/m68k-insns.c machine/sun2/sun2-mainbus.c:

	  Changes to silence -Wuninitialized. 

	* generic/serial.c:
	* tme/generic/serial.h: Removed all instances of gen- in comments. 

	* host/posix/posix-serial.c (_tme_posix_serial_th_reader): Fixed bugs
	in scanning the input for various escape-like sequences, especially
	for the escaped break signal. 

	* host/posix/posix-serial.c (_tme_posix_serial_th_reader): Simplified
	the code that decides to call out that we are readable. 
	(_tme_posix_serial_ctrl): Always try to call out reads if the
	connection says it's readable, even if we already knew that. 
	(_tme_posix_serial_read): Fixed a bug where we would clear everything
	*except* TME_SERIAL_CTRL_OK_READ, instead of clearing only that bit. 
	(tme_host_posix_serial_new): Return EINVAL on bad arguments. 

	* ic/Makefile.am: Now define DIST_SUBDIRS. 

	* ic/z8530.c (_tme_z8530_callout): Fixed a bug where we would use an
	uninitialized chan variable to find WR9, which actually only exists in
	channel A anyways. 
	(_tme_z8530_ctrl): Now always try to call out reads if the connection
	says it's readable. 

	* libtme/threads-sjlj.c: Wrap all of the rwlock operations in
	!TME_NO_DEBUG_LOCKS. 
	(tme_sjlj_threads_run): Changes to silence -Wuninitialized. 

	* tme/Makefile.am:
	* tme/generic/Makefile.am: Now install roughly the correct files into
	the correct place. 

	* tme/atomics.h: Fixed a bug where TME_ATOMIC_POINTER_TYPE was adding
	an extra *. 

	* tme/element.h: Fixed bugs in the TME_NO_LOG versions of TME_LOG_X
	and TME_LOG_FINISH. 

Tue Apr 29 03:24:17 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* TODO:
	* machine/sun2/sun2-test.c: Updated. 

	* generic/bus-device.c: Support the new generic bus signal interface. 
	(tme_bus_device_connection_score):
	(tme_bus_device_connection_make):
	(tme_bus_device_connection_break): These are now public. 

	* generic/bus-el.c: Added support for the new generic bus signal
	interface. 
	(_tme_bus_line_raise): Removed. 
	(_tme_bus_signal):
	(_tme_bus_intack): Added. 

	* generic/serial.c: Removed all uses of TME_ATOMIC. 
	(tme_serial_buffer_copyout): Fixed a bug where we would overwrite
	data_flags with -1 early, resulting in our returning no data. 

	* host/posix/posix-serial.c: Too much work to go into detail. 
	Everything is at least sketched out. 

	* ic/am9513.c (_tme_am9513_callout):
	(_tme_am9513_th_timer): Added. 
	(_tme_am9513_bus_cycle): Now properly handle the Clear Toggle Output
	command, and log it correctly.  Lock the new mutex on entry, call
	_tme_am9513_callout if needed before exit, and unlock the mutex on
	exit. 
	(tme_ic_am9513_new): Start the new timer thread. 

	* ic/z8530.c: Too many changes to go into detail.  Highlights include
	a real bus cycle handler, real channels, real serial connections, real
	threads.  Everything seems to be at least sketched out. 

	* ic/z8530reg.h: Added. 

	* ic/m68k/m68k-execute.c: Fixed a bug where we were using the return
	value of tme_mutex_trylock as a truth value. 

	* ic/m68k/m68k-misc.c: Changed to support the new generic bus signal
	interface and the new m68k bus interrupt interface. 

	* libtme/threads-sjlj.c (tme_sjlj_threads_run): Fixed a bug where we
	wouldn't lock the mutex before returning from a condition wait.  Fixed
	a bug where we would block in select(2) instead of calling it with a
	zero timeout. 
	(tme_sjlj_cond_wait_yield): Remember the mutex the thread had locked
	so it can be relocked when the thread resumes. 
	(tme_sjlj_select_yield): Fixed bugs where we would treat the nfds
	argument as the maximum fd, instead of the maximum fd plus one.  Fixed
	a bug where we couldn't handle NULL descriptor sets. 
	(tme_sjlj_read_yield):
	(tme_sjlj_write_yield):
	(tme_sjlj_read_yield):
	(tme_sjlj_rwlock_init):
	(tme_sjlj_rwlock_lock):
	(tme_sjlj_rwlock_unlock): Added. 

	* machine/sun2/sun2-impl.h: Now track the interrupts asserted in the
	system, and the last ipl asserted to the CPU. 

	* machine/sun2/sun2-mainbus.c (_tme_sun2_line_reset):
	(_tme_sun2_line_halt):
	(_tme_sun2_line_interrupt): Removed. 
	(_tme_sun2_bus_signal):
	(_tme_sun2_bus_intack): Added. 
	(_tme_sun2_power): Use the generic bus signal interface to reset
	everything. 
	(tme_machine_sun2_clock_new): Store how the Am9513 output pins are
	connected to bus interrupt lines. 

	* machine/sun2/sun2-mmu.c (_tme_sun2_multibus_fault_handler): Added a
	hack to avoid an mbmem bus error when accessed through virtual
	0xffffffff, which apparently happens in the PROM NMI routine when it
	polls the keyboard, even if it didn't probe a keyboard. 

	* tme/element.h: Fixed various const to _tme_const. 

	* tme/threads.h: Redid the setjmp/longjmp rwlock operations.  Added
	various new function prototypes and macros. 

	* tme/generic/bus-device.h: Support the new generic bus signal
	interface.  The tme_bus_device_connection_score,
	tme_bus_device_connection_make, and tme_bus_device_connection_break
	functions are now public.  Fixed a const to _tme_const. 

	* tme/generic/bus.h: Added the new generic bus signal and interrupt
	acknowledge interfaces.  Fixed various const to _tme_const. 

	* tme/generic/serial.h: Now define TME_SERIAL_CTRL_OK_READ.  Removed
	the write method from a serial connection.  All data transfer happens
	with reads, with control signals to indicate when reads are OK. 
	Removed the TME_ATOMIC use in struct tme_serial_buffer. 
	(tme_serial_buffer_is_empty):
	(tme_serial_buffer_is_full): Added. 

	* tme/ic/am9513.h: struct tme_am9513_socket now holds the basic clock
	provided to the chip, and a mapping of its output pins to bus signals. 
	Fixed a const to _tme_const. 

	* tme/ic/m68k.h: Now define some m68k IPL constant macros.  Add the
	new m68k bus interrupt method.  Fixed various const to _tme_const. 

	* tme/ic/z8530.h: Made the channel letters lowercase in structure
	member names.  Fixed a const to _tme_const. 

Sat Apr 26 21:46:16 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* Makefile.am TODO configure.in generic/Makefile.am
	  generic/bus-device.c generic/bus-el.c generic/bus.c generic/serial.c
	  host/posix/posix-memory.c host/posix/posix-serial.c ic/am9513.c
	  ic/z8530.c ic/i386/i386-decode.c ic/i386/i386-misc-auto-make.sh
	  ic/i386/i386-opmaps-make.sh ic/i386/i386-save.c
	  ic/i386/i386-uinsns-auto-make.sh ic/i386/i386-uinsns.c
	  ic/i386/i386.h tme/generic/Makefile.am tme/generic/bus-device.h
	  tme/generic/bus.h tme/generic/ic.h tme/generic/serial.h
	  tme/ic/am9513.h tme/ic/z8530.h:

	  Added. 

	* bus/Makefile.am host/posix/Makefile.am ic/m68k/Makefile.am
	  machine/Makefile.am machine/sun/Makefile.am machine/sun2/Makefile.am
	  machine/sun2/sun2-test.c:

	  Updated. 

	* bus/bus-device.c bus/bus.c tme/bus-device.h tme/bus.h tme/ic.h:

	  Removed. 

	* host/posix/memory.c: Renamed to posix-memory.c. 

	* ic/m68k/m68k-execute.c: Under _TME_M68K_EXECUTE_FAST, at the
	beginning of each instruction we do have to check if our ITLB has been
	invalidated, as it might have been by some random (control) memory
	cycle we just did. 
	Fixed bugs in the predecrement and postincrement EA handlers. 

	* ic/m68k/m68k-impl.h:
	* machine/sun2/sun2-impl.h: Now include <tme/generic/ic.h>. 

	* ic/m68k/m68k-impl.h: Added support for logging. 

	* ic/m68k/m68k-insns-auto.sh: Fixed a serious movem bug where we would
	start at bit 1 in the mask, and not bit 0. 
	In all memory transfer functions, log the transfer.  Made the bus
	cycle functions "work correctly".  Fixed bugs in the generated divide
	instructions. 

	* ic/m68k/m68k-insns.c (tme_m68k_swap): Fixed a bug where this
	wouldn't work on big-endian systems. 
	(tme_m68k_link):
	(tme_m68k_unlk): Fixed serious bugs where we simply didn't do what
	these instructions are supposed to do. 

	* ic/m68k/m68k-iset.txt: On the 68010 and up, the move_from_sr and
	move_from_ccr instructions don't read memory before writing it.  Fixed
	bugs in the encoding of the register bit-shifting with a register
	count instructions. 

	* ic/m68k/m68k-misc.c (tme_m68k_idle): Use the renamed
	tme_cond_wait_yield function. 
	(tme_m68k_new): Store the element in the IC. 
	(tme_m68k_go_slow): Use the TME_M68K_TLB_OK_FAST_READ to check for a
	bad TLB entry. 
	(tme_m68k_exception_process): Don't insist on there being exceptions
	to process.  CPU-specific exception processors may handle them all,
	yet still use this function to redispatch. 
	(_tme_m68k_execute_hook): Added. 

	* libtme/threads-sjlj.c (_tme_sjlj_then):
	(_tme_sjlj_timeout):
	(tme_sjlj_sleep_yield):
	(tme_sjlj_select_yield): Added. 
	(tme_sjlj_threads_run): Cleaned up the threads dispatcher to support
	threads waiting on classic select(2) fd sets,
	(tme_sjlj_cond_wait_yield): Renamed from tme_sjlj_cond_wait. 
	(tme_sjlj_sleep): This function no longer yields. 

	* machine/sun/sun-mmu.c: Added some logging. 
	Disabled the explicit SEGINV support, for now.  It appears that the
	hardware MMU doesn't have a notion of an invalid PMEG.  Now call the
	post-MMU TLB fillers with the PTE struct and the virtual address. 

	* machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler): Don't
	bother to fill the segmap register unless this is a read. 

	* machine/sun2/sun2-impl.h: Now include <tme/generic/bus.h>.  Added
	some support for logging. 

	* machine/sun2/sun2-mainbus.c: Added some support for logging. 
	(tme_machine_sun2_clock_new):
	(tme_machine_sun2_zs_new): Added. 

	* machine/sun2/sun2-mmu.c: Too much to go into detail.  Highlights:
	Added some logging support. 
	Made the bus error behavior more correct.  On the sun2, obio and obmem
	don't generate bus errors.  Now the post-MMU TLB filler takes the
	original PTE entry and the original virtual address. 

	* tme/connection.h: Now define TME_CONNECTION_SERIAL. 

	* tme/element.h: Added logging support. 

	* tme/ic.h: Now include <tme/generic/bus.h>

	* tme/threads.h: Defined more of the tme threads API. 

	* tme/ic/m68k.h: Now include <tme/generic/bus.h>. 

	* tme/machine/sun.h: Added support for logging. 
	Changed the interface to pass the whole PTE struct to the post-MMU TLB
	fillers. 

Sat Apr 26 14:44:07 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/bus.c (tme_bus_cycle_xfer): Fixed a bug where we used
	cycle_writer to get the reader's port size.  When indexing bus router
	arrays, we have to subtract out the participant's least port lane,
	since the arrays don't include information for lanes not connected to
	the participant. 

Wed Apr 23 19:31:01 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* bus/Makefile.am bus/bus-device.c bus/bus.c host/Makefile.am
	  host/posix/Makefile.am host/posix/memory.c ic/Makefile.am
	  ic/m68k/m68k-impl.h libtme/Makefile.am libtme/threads-sjlj.c
	  machine/sun/Makefile.am machine/sun/sun-mmu.c
	  machine/sun2/Makefile.am machine/sun2/sun2-control.c
	  machine/sun2/sun2-impl.h machine/sun2/sun2-mainbus.c
	  machine/sun2/sun2-mmu.c machine/sun2/sun2-test.c tme/Makefile.am
	  tme/atomics.h tme/bus-device.h tme/bus.h tme/common.h
	  tme/connection.h tme/element.h tme/ic.h tme/threads.h
	  tme/ic/Makefile.am tme/ic/m68k.h tme/machine/Makefile.am
	  tme/machine/sun.h:

	  Added. 

	* ic/m68k/m68010.c (_tme_m68010_exception):
	(_tme_m68010_rte): Added. 

	* ic/m68k/m68k-bus-auto.sh: Now generates the combined input/output
	bus routers. 

	* ic/m68k/m68k-execute.c:
	* ic/m68k/m68k-insns.c:
	* ic/m68k/m68k-misc.c: Although I hate doing this, "too many changes
	to list."

	* ic/m68k/m68k-insns-auto.sh: Some minor copyright and cosmetic fixes. 
	Updated the bus cycle functions to support the latest generic bus
	cycle idea. 

	* ic/m68k/m68k-iset-expand.pl: When the EA is an immediate, just emit
	the immediate information and skip the EA information - we don't want
	to use the EA path in this case. 

	* ic/m68k/m68k-iset.txt: moveq is now its own insn. 

	* ic/m68k/m68k-misc-auto.sh: Copyright sweep. 

	* ic/m68k/m68k-opmap-make.pl: Fixed some random bugs, and correctly
	handle the case where EA and immediate operand must be undefined for a
	pattern, to avoid using the EA and immediate operand in any root
	entry. 

	* ic/m68k/m68k.h: Removed. 

Sun Apr 20 21:33:05 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-bus-auto.sh: Added. 

Fri Apr 18 04:56:36 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns-auto.sh: Added support for generating the moveq32
	insn.  Cleaned up and fixed some bugs in the bus cycle functions. 

	* ic/m68k/m68k-misc-auto.sh: Cleaned up the set of registers that we
	define.  Added better locking support to the instruction fetch macros. 

Tue Apr 15 13:32:37 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/m68k-insns-auto.sh: Unfortunately, too much work to list in
	detail.  Improved the arithmetic function flag-setting code to compile
	well on i386 with gcc -O2.  Added many special-purpose memory read and
	write functions, and finally introduced the general bus-cycle read and
	write functions.  Added many new instructions, including multiply and
	divide. 

Sat Apr 05 18:47:38 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* machine/Makefile.am: Added. 

Tue Apr 01 20:13:40 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/Makefile.am: Build decoders for the 68000, 68010, and 68020. 
	* ic/m68k/m68k-iset-expand.pl: Added a very basic preprocessor to
	support generating different instruction sets for different CPUs.  Now
	whenever an instruction wants the EA, its operand is eax.32 even if
	the known EA is address register indirect. 

	* ic/m68k/m68k-iset.txt: This should be the complete integer
	instruction set for the 68000, 68010, 68020, and 68030. 

	* ic/m68k/m68k-opmap-make.pl: Added comments, and reworked to support
	compiling instruction sets for different CPUs together, reusing
	submaps and opcode maps whenever possible. 

	* ic/m68k/m68k.h: Before the -impl.h split. 

Sun Mar 30 22:04:15 2003  Matthew Fredette  <fredette@alum.mit.edu>

	* ic/m68k/Makefile.am ic/m68k/m68010.c ic/m68k/m68k-execute.c
	  ic/m68k/m68k-insns-auto.sh ic/m68k/m68k-insns.c
	  ic/m68k/m68k-iset-expand.pl ic/m68k/m68k-iset.txt
	  ic/m68k/m68k-misc-auto.sh ic/m68k/m68k-misc.c
	  ic/m68k/m68k-opmap-make.pl ic/m68k/m68k.h:

	  Added. 
