1Sun Jun 06 20:52:27 2010 Matthew Fredette <fredette@alum.mit.edu> 2 3 * Release 0.8 out. 4 5Sat Jun 05 19:56:37 2010 Matt Fredette <fredette@alum.mit.edu> 6 7 * TODO: Updated. 8 9 * configure.in: Bumped version to 0.8. 10 11 * ic/ncr5380.c: Changed or cast various tme_bus_addr_t to 12 tme_bus_addr32_t. In struct tme_ncr5380, store an actual TLB entry 13 instead of a pointer to an allocated entry. 14 (_tme_ncr5380_bus_tlb_fill): Replaced the call to tme_bus_tlb_back() 15 with a plain structure copy. 16 (_tme_ncr5380_connection_make_bus): Call tme_bus_device_tlb_set_add() 17 to add the TLB entry to the connection. 18 19 * ic/ncr53c9x.c: Changed or cast various tme_bus_addr_t to 20 tme_bus_addr32_t. In struct tme_ncr53c9x, store an actual TLB entry 21 instead of a pointer to an allocated entry. Added 22 tme_ncr53c9x_detected_scsi_reset. 23 (_tme_ncr53c9x_update): When SCSI RST is first detected, issue a SCSI 24 reset interrupt if it hasn't been disabled. In 25 TME_NCR53C9X_CMD_RESET_BUS, no longer signal a SCSI reset interrupt. 26 This will be done when the SCSI RST is detected. 27 (_tme_ncr53c9x_callout): Fixed bugs where we wouldn't always wrap the 28 FIFO head and tail. 29 Replaced the call to tme_bus_tlb_back() with a plain structure copy. 30 When a SCSI DMA cycle is transferring out to the SCSI bus, only 31 initially clear the SCSI DMA buffer if DMA is not running - if DMA is 32 running, and the data FIFO is empty, and the TLB entry doesn't support 33 fast reading, the code that sets up a transfer into the data FIFO 34 needs to know how much space is available in the data FIFO starting at 35 the tail, until the end of the data FIFO. Also call 36 _tme_ncr53c9x_fifo_data_update() to update the Current FIFO register. 37 (_tme_ncr53c9x_connection_make_bus): Call tme_bus_device_tlb_set_add() 38 to add the TLB entry to the connection. 39 40 * ic/z8530.c (_tme_z8530_rr2_update): Now take the single RR3 41 interrupt bit, or zero, to use for the modified interrupt vector in 42 RR2. 43 (_tme_z8530_int_pending): Now call _tme_z8530_rr2_update() to update 44 the modified interrupt vector in RR2. 45 (_tme_z8530_intack): Fixed a bug where we would accept an interrupt 46 acknowledge even if the IEI pin was tied low. Get the vector directly 47 from the channel B RR2. 48 (_tme_z8530_bus_cycle): In TME_Z8530_WR0_CMD_RESET_IUS, no longer call 49 _tme_z8530_rr2_update(). The eventual interrupt check for 50 TME_Z8530_CALLOUT_INT will update RR2. 51 52 * ic/sparc/sparc-fpu.c (tme_sparc_fpu_exception_check): On sparc64, 53 when the exception is not an ieee754 exception, use the 54 fp_exception_other trap. 55 56 * ic/sparc/sparc-impl.h [_TME_SPARC_STATS] [TME_HAVE_RECODE]: Track 57 the number of recode source hash misses. 58 Declare tme_sparc32_recode_insn_current() and 59 tme_sparc64_recode_insn_current(). 60 [!_TME_SPARC_RECODE_VERIFY] tme_sparc_recode_verify_reg_tick_now(): 61 Silence a possible known-nonzero warning. 62 63 * ic/sparc/sparc-insns-auto.sh: Fixed some comments. 64 65 * ic/sparc/sparc-misc.c (_tme_sparc_runlength): Added. 66 (_tme_sparc_command): Added the run-length and prom-delay-factor 67 commands. 68 (tme_sparc_new): Removed the prom-delay-factor option. Now call 69 _tme_sparc_runlength() to set the initial run length. 70 (tme_sparc32_external_check): 32-bit SPARCs default to no interrupt 71 acknowledge cycle. 72 (tme_sparc_itlb_current): Fixed pointer arithmetic bugs in the 73 no-recode case. 74 75 * ic/sparc/sparc-rc-insns.c: TME_SPARC_RECODE_INSN_LD and 76 TME_SPARC_RECODE_INSN_ST instructions no longer update the instruction 77 register. mulscc only needs the simplest assist. 78 (tme_sparc_recode_insn_current): Added. 79 (tme_sparc_recode_insn_assist_redispatch): Added a comment about the 80 PC we check. Rewritten to prepare for future additional redispatch 81 conditions. 82 (_tme_sparc_recode_insn_assist_full): Fixed a bug where we wouldn't 83 use TME_SPARC_G0_OFFSET(ic) to find the %g0 to zero. 84 (_tme_sparc_recode_recode): Fixed bugs in checking the immediate ASI 85 of a v9 ld*a instruction for the default unrestricted ASI with the 86 right endianness. 87 Fixed a bug where we would test for the branch target being near or 88 far after we had possibly updated the displacement. Fixed various 89 other bugs in testing control transfer targets for near or far. 90 If the second source operand is an immediate zero, make a 91 TME_RECODE_OPERAND_ZERO instead of a TME_RECODE_OPERAND_IMM. 92 93 * ic/sparc/sparc-rc-ls.c (_tme_sparc_recode_ls_assist_check): Get the 94 instruction from ic->_tme_sparc_insn, since the instruction register 95 isn't updated for assisted loads and stores. 96 (_tme_sparc_recode_ls_assist_ld): Use tme_sparc_recode_insn_current() 97 to get the instruction, and check that the instruction is a load. 98 Decode rd from the current instruction, in case it's not the original 99 recoded instruction. Zero %g0, in case the load changed it. Do any 100 required redispatch after we assisted a nonoriginal load instruction 101 (or a load instruction that otherwise requires a redispatch). 102 (_tme_sparc_recode_ls_assist_st): Use tme_sparc_recode_insn_current() 103 to get the instruction, and check that the instruction is a store. 104 105 * ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_begin): When 106 verifying is being turned on, return immediately after calling 107 tme_sparc_recode_invalidate_all(), since it will leave the current 108 instructions thunk unrunnable. Remember the current instruction TLB 109 token. 110 (tme_sparc_recode_verify_end): Unbusy any current instruction TLB 111 token used by the normal execution. Before the replay begins, 112 validate the replay instruction TLB entry When the replay ends, unbusy 113 and invalidate the current instruction TLB token. 114 Added more structure members to ignore. Before returning to normal 115 post instructions thunk handling, rebusy any current instruction TLB 116 entry. 117 (_tme_sparc_recode_verify_init): Initialize the replay TLB tokens as 118 invalid. 119 120 * ic/sparc/sparc-recode.c (TME_SPARC_RECODE_RW_THUNK_INDEX): Added 121 missing parentheses around all of the sparc64 load/store features. 122 (tme_sparc_recode): Count recode source hash misses. 123 (tme_sparc_recode_init): Mark the temporary registers as temporary. 124 Increase the size of the thunks memory. 125 126 * ic/sparc/stp103x.c (_tme_stp103x_rdasr): 127 (_tme_stp103x_wrasr): Don't return the result of a function that 128 returns void. 129 (_tme_stp103x_ls_address_map_phys): Fixed a bug where we wouldn't map 130 a bypass ASI as usable by nonprivileged code. 131 (_tme_stp103x_ls_address_map): Fixeds where we wouldn't map an address 132 when the MMU is disabled, or when the mapping is unprivileged, as 133 usable by both nonprivileged and privileged code. 134 (_tme_stp103x_ls_asi_tlb_data_access): Catch an atomic access to a TLB 135 data access register. Invalidate any sparc TLB entries when a stp103x 136 TLB entry is written. 137 (_tme_stp103x_tick_compare_th): Now use tme_gettimeofday(). 138 139 * ic/stp22xx/stp220x.c: 140 * ic/stp22xx/stp222x-iommu.c: 141 * ic/stp22xx/stp222x-mdu.c: 142 * ic/stp22xx/stp222x-stc.c: Silence some unused value warnings. 143 144 * libtme/misc.c (_tme_misc_number_parse): Fixed a bug where simple 145 conversion failure wouldn't return an error. 146 (tme_misc_cycles_per_ms): Don't sleep while getting the cycle counter 147 rate, because the cycle counter may run at a different rate when we're 148 sleeping than when we're running. 149 150 * libtme/module.c: Undefine lt_preloaded_symbols, in an attempt to be 151 forward-compatible with newer libltdls than our libtool knows about. 152 153 * libtme/recode-impl.h: Declare tme_recode_regs_src_notify(). 154 155 * libtme/recode-regs.c (_tme_recode_regs_src_load): 156 (tme_recode_regs_src_specific): Check that a reserved host register 157 doesn't have a guest temporary register. After loading a guest 158 temporary register, forget that it's in the host register. 159 (tme_recode_regs_src_notify): Added. 160 161 * libtme/threads-sjlj.c: Renamed _tme_sjlj_gtk_yield() to 162 tme_sjlj_threads_gtk_yield(). 163 164 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_rw): Call 165 tme_recode_regs_src_notify() to notify about a possible temporary 166 register operand for the address, before calling 167 tme_recode_regs_host_clean_all(). 168 169 * libtme/host/x86/rc-x86-rws.c (_tme_recode_x86_rw_tlb_ref): Removed. 170 (tme_recode_host_rw_thunk_new): Now use the generic support for recode 171 reads and writes, and the x86 generic TLB support. 172 173 * machine/sun/sun-cgsix.c (_tme_suncg6_bus_cycle_alt): Fixed a bug 174 where we wouldn't complete the cycle. 175 (tme_sun_cgsix): Added parentheses to silence a paranoid gcc warning 176 about programmer operator precedence mistakes. 177 178 * machine/sun/sun-cgtwo.c: Changed or cast various tme_bus_addr_t to 179 tme_bus_addr32_t. Now track tokens from TLB entries instead of TLB 180 entries. 181 182 * machine/sun/sun-fb.c (tme_sunfb_bus_cycle_transition) [NDEBUG]: 183 Catch cycle handlers that don't complete the cycle. 184 185 * machine/sun/sun-obie.c (TME_SUN_OBIE_CSR_GET): 186 (TME_SUN_OBIE_CSR_PUT): Rewritten to avoid a pointer cast, to silence 187 strict aliasing warnings. 188 (_tme_sun_obie_tlb_set_allocate): Removed. 189 (_tme_sun_obie_tlb_set_add): Added. 190 (_tme_sun_obie_connections_new): Provide _tme_sun_obie_tlb_set_add() 191 instead of _tme_sun_obie_tlb_set_allocate(). 192 193 * machine/sun/sun-si.c: Changed or cast various tme_bus_addr_t to 194 tme_bus_addr32_t. Now track tokens from TLB entries instead of TLB 195 entries. 196 (_tme_sun_si_tlb_set_allocate): Removed. 197 (_tme_sun_si_tlb_set_add): Added. 198 (_tme_sun_si_connections_new): Provide _tme_sun_si_tlb_set_add() 199 instead of _tme_sun_si_tlb_set_allocate(). 200 201 * machine/sun4/SUN4-75: Bumped the default idle-type for more recent 202 NetBSD. 203 204 * machine/sun4/sun44c-memerr.c (_tme_sun44c_memerr_cycle_control): 205 (_tme_sun44c_memerr_cycle_bus): Changes to remove aliasing. 206 207 * machine/sun4u/SUN-ULTRA-1: Bumped the revision of the ledma to 2. 208 Moved sd0 to id 0. 209 210 * tme/memory.h (tme_memory_barrier) [TME_THREADS_COOPERATIVE]: Silence 211 a possible known-nonzero warning. 212 213 * tme/threads.h: Declare tme_sjlj_threads_gtk_yield(), and make a 214 tme_threads_gtk_yield alias. 215 216 * tme/token.h (_tme_token_busy_change) [TME_THREADS_COOPERATIVE && 217 defined(TME_NO_DEBUG_LOCKS)]: Silenced a possible known-unzero 218 warning. 219 220 * tme/ic/sparc.h: Define TME_SPARC64_ASI_MASK_USER and 221 TME_SPARC64_ASI_MASK_PRIV. 222 223Sat Jun 05 14:54:10 2010 Matt Fredette <fredette@alum.mit.edu> 224 225 * configure.in: Added a linux x86/mmap recode target. Fixed a bug in 226 defining TME_HAVE_RECODE. 227 228 * bus/multibus/3c400.c (TME_3C400_CSR_GET): 229 (TME_3C400_CSR_PUT): Rewritten to avoid a pointer cast, to silence 230 strict aliasing warnings. 231 232 * bus/multibus/sun-mie.c (_tme_sun_mie_bus_cycle_regs): Switched to 233 invalidating tokens from TLB entries. 234 (_tme_sun_mie_tlb_set_allocate): Removed. 235 (_tme_sun_mie_tlb_set_add): Added. 236 (_tme_sun_mie_tlb_fill): Truncate the address to 32 bits. Switched to 237 tracking tokens from TLB entries. 238 (_tme_sun_mie_tlb_fill_regs): Truncate the address to 32 bits. 239 (_tme_sun_mie_connections_new): Provide _tme_sun_mie_tlb_set_add() 240 instead of _tme_sun_mie_tlb_set_allocate(). 241 242 * bus/multibus/sun-sc.c: In struct tme_sun_sc, store an actual TLB 243 entry instead of a pointer to an allocated entry. 244 (_tme_sun_sc_bus_cycle_dma): Now take a tme_bus_addr32_t instead of a 245 tme_bus_addr_t. 246 (_tme_sun_sc_callout): Replaced some tme_bus_addr_t with 247 tme_bus_addr32_t. Replaced the call to tme_bus_tlb_back() with a 248 plain structure copy. 249 (_tme_sun_sc_tlb_fill): Truncate the address to 32 bits. 250 (_tme_sun_sc_connection_make_bus): Call tme_bus_device_tlb_set_add() 251 to add the TLB entry to the connection. 252 253 * generic/keyboard.c (_tme_keyboard_buffer_out1_bottom): 254 (_tme_keyboard_buffer_out0): Silence some uninitialized structure 255 variable warnings. 256 257 * host/gtk/gtk-display.c (_tme_gtk_display_callout): Call 258 tme_threads_gtk_yield(), to make sure that the GTK timeout and idle 259 callback are set as needed. 260 261 * host/posix/posix-disk.c: Define _FILE_OFFSET_BITS to 64 to try to 262 enable large-file support. 263 264 * ic/am7990.c: Replaced various tme_bus_addr_t with tme_bus_addr32_t. 265 In struct tme_am7990, store actual TLB entries instead of a pointer to 266 allocated entries. 267 (_tme_am7990_connection_make_bus): Call tme_bus_device_tlb_set_add() 268 to add the TLB entries to the connection. 269 270 * ic/am9513.c (_tme_am9513_th_timer): Cast what might be a 64-bit 271 time_t difference to unsigned long, to match the printf format. 272 273 * ic/i825x6.c: Replaced various tme_bus_addr_t with tme_bus_addr32_t. 274 In struct tme_i825x6, store actual TLB entries instead of a pointer to 275 allocated entries. 276 (_tme_i825x6_rx_buffers_add): Replaced the call to tme_bus_tlb_back() 277 with a plain structure copy. 278 (_tme_i825x6_connection_make_bus): Call tme_bus_device_tlb_set_add() 279 to add the TLB entries to the connection. 280 281 * ic/isil7170.c (_tme_isil7170_th_timer): Cast what might be a 64-bit 282 time_t difference to unsigned long, to match the printf format. 283 284 * ic/lsi64854.c: Replaced various tme_bus_addr_t with 285 tme_bus_addr32_t. Added support for the ethernet and parallel 286 channels. 287 (_tme_lsi64854_bus_cycle_regs): Added some support for 8- and 16-bit 288 accesses, for the parallel channel. 289 (_tme_lsi64854_tlb_set_allocate): Removed. 290 (_tme_lsi64854_tlb_set_add): Added. 291 292 * ic/mk48txx.c (_tme_mk48txx_reset): Fixed a bug where we used 293 TME_MK48TXX_SEC_STOP as a register index. 294 295 * ic/stp22xx/stp222x-timer.c (_tme_stp222x_timer_update): Cast what 296 might be a 64-bit time_t difference to unsigned long, to match the 297 printf format. 298 299 * machine/sun4/sun4-timer.c (_tme_sun4_timer_update): Cast what might 300 be a 64-bit time_t difference to unsigned long, to match the printf 301 format. 302 303Sun Mar 07 16:29:27 2010 Matt Fredette <fredette@alum.mit.edu> 304 305 * tme/recode.h: Define TME_RECODE_REGINFO_TYPE_TEMPORARY. 306 307Sun Feb 21 15:49:42 2010 Matt Fredette <fredette@alum.mit.edu> 308 309 * TODO: Updated. 310 311Sat Feb 20 22:01:40 2010 Matt Fredette <fredette@alum.mit.edu> 312 313 * ic/sparc/sparc-execute.c: After the last replay instruction, make 314 sure that the replay current instruction tlb token isn't the invalid 315 token. 316 317 * ic/sparc/sparc-impl.h: Removed an old comment. 318 319 * ic/sparc/sparc-rc-insns.c: Commented the TME_SPARC_RECODE_INSN_ 320 values. 321 322 * ic/sparc/sparc-recode.c (tme_sparc_recode_invalidate_all): Fixed a 323 bug where we wouldn't clear the return address stack after 324 invalidating all instructions thunks. 325 (tme_sparc_recode): When we can't recode, instead of calling only 326 _tme_sparc_recode_src_hash_invalidate(), call 327 tme_sparc_recode_invalidate_all() to do everything needed when all 328 instructions thunks are invalidated. 329 330 * ic/sparc/sparc-vis-auto.sh (tme_sparc${arch}_vis_ls_asi_pst): Fixed 331 a bug where we wouldn't unbusy the TLB entry before trapping for an 332 illegal instruction. Any ASI handler that traps directly on its own, 333 must do this. 334 335 * tme/recode.h: Removed the unused tme_recode_reginfo_type macro. 336 337Sat Feb 20 18:35:47 2010 Matt Fredette <fredette@alum.mit.edu> 338 339 * ic/sparc/sparc-insns-auto.sh (tme_sparc64_casa): 340 (tme_sparc64_casxa): Fixed a bug where we would use 341 TME_SPARC_FORMAT3_RS2, even if the i bit is set, instead of always 342 decoding rs2 like tme_sparc64_atomic() does. 343 344 * ic/sparc/sparc-misc.c (tme_sparc64_trap): Removed some old debugging 345 code. 346 347Thu Feb 18 02:01:33 2010 Matt Fredette <fredette@alum.mit.edu> 348 349 * TODO: Updated. 350 351 * ic/sparc/sparc-misc.c (tme_sparc_nnpc_trap): Make a more complete 352 dummy load/store structure. 353 354 * tme/common.h: Fixed old bugs where tme_value64_uint32_lo and 355 tme_value64_uint32_hi were defined to be signed. 356 Define tme_value64_cmp(). 357 358Mon Feb 15 22:23:15 2010 Matt Fredette <fredette@alum.mit.edu> 359 360 * libtme/recode-regs.c (tme_recode_regs_host_clean_all): Now that a 361 host register can be clean at any size, instead of freeing a host 362 register that was dirty not at the full guest register size, just mark 363 it as clean. 364 (_tme_recode_regs_src_load): As an optimization, if the read-uses 365 count for the guest register is only one, only load the size that this 366 instruction needs. 367 (tme_recode_regs_dst_any): 368 (tme_recode_regs_dst_specific): Replaced 369 TME_RECODE_REGINFO_TAGS_DIRTY_SIZE() with 370 TME_RECODE_REGINFO_TAGS_VALID_SIZE(). 371 372 * libtme/host/x86/rc-x86-chain.c (_tme_recode_x86_chain_subs): Use 373 TME_RECODE_REGINFO_TAGS_VALID_SIZE() and TME_RECODE_REGINFO_TAGS_CLEAN 374 in the fake register information for loading the guest PC. 375 376 * libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_add): 377 Use TME_RECODE_REGINFO_TAGS_VALID_SIZE() in the fake register 378 information for the subs operands. 379 380 * libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): For both 381 loading and storing, get the size to move using 382 TME_RECODE_REGINFO_TAGS_WHICH_VALID_SIZE(). 383 (tme_recode_host_reg_imm): As an optimization, only make as big an 384 immediate as the instruction needs. 385 386 * machine/sun/sun-mmu.c: Define TME_SUN_MMU_CONTEXT_TLBS. In struct 387 tme_sun_mmu_tlb_set, replaced the TLB set information with a struct 388 tme_bus_tlb_set_info. 389 In struct tme_sun_mmu, track a set of TLBs that must be invalidated 390 when the context changes. 391 Changed from tracking pointers to TLB entries to tracking pointers to 392 their tokens. 393 (tme_sun_mmu_tlbs_invalidate): Use tme_bus_tlb_set_invalidate() to 394 invalidate a TLB set. 395 (tme_sun_mmu_tlbs_context_set): 396 (tme_sun_mmu_tlb_set_allocate): Removed. 397 (tme_sun_mmu_context_add): 398 (tme_sun_mmu_context_switched): 399 (tme_sun_mmu_tlb_set_add): Added. 400 401 * tme/recode.h: Replaced TME_RECODE_REGINFO_TAGS_DIRTY_SIZE_MASK, 402 which was nonzero iff the host register was dirty, with 403 TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK, which is nonzero iff the tags 404 are valid. 405 Changed the value of TME_RECODE_REGINFO_TAGS_CLEAN to be right before 406 TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK, to enable the changed 407 TME_RECODE_REGINFO_TAGS_WHICH_DIRTY_SIZE(). Renamed 408 TME_RECODE_REGINFO_TAGS_VALID_SIZE() to 409 TME_RECODE_REGINFO_TAGS_ARE_VALID_SIZE(), all callers changed. Added 410 TME_RECODE_REGINFO_TAGS_WHICH_VALID_SIZE(). Changed 411 TME_RECODE_REGINFO_TAGS_WHICH_DIRTY_SIZE() and 412 TME_RECODE_REGINFO_TAGS_ARE_DIRTY() to use the new 413 TME_RECODE_REGINFO_TAGS_VALID_SIZE_MASK and 414 TME_RECODE_REGINFO_TAGS_CLEAN. Added the new 415 TME_RECODE_REGINFO_TAGS_VALID_SIZE(). 416 417Mon Feb 15 16:57:13 2010 Matt Fredette <fredette@alum.mit.edu> 418 419 * ic/stp22xx/stp222x-mdu.c (tme_stp222x_mdu_regs_clear): Added a 420 performance hack to dispatch any waiting interrupt to the CPU clearing 421 an interrupt's pending state. 422 423 * libtme/memory-auto.sh (_tme_memory_write): Added an explicit cast to 424 type_part, to silence compiler warnings when we're writing a constant 425 wider than type_part. 426 (tme_memory_bus_${op}_buffer): Fixed some ${op_const} to 427 ${op_const_mem}, to silence lost-qualifier warnings. 428 (tme_memory_atomic_${op}${size}): When threads are cooperative, do the 429 read or write using the plain macro. 430 431 * libtme/recode-rws.c (tme_recode_rw_thunk): Many address type values 432 that used to be plain in the read/write structure moved to an address 433 type structure. Use tme_recode_address_type_check() to check the 434 read/write address type, and tme_recode_address_type_compare() to 435 compare it to an existing thunk's address type. 436 437 * libtme/threads-sjlj.c: Removed TME_SJLJ_DISPATCHER_FALSE and 438 TME_SJLJ_DISPATCHER_TRUE, since the thread dispatcher no longer 439 returns any value. In struct tme_sjlj_thread, added the last dispatch 440 number for a thread, and under HAVE_GTK, no longer track timeout 441 handles. Removed tme_sjlj_thread_dispatched_timeout. Define globals 442 for the global dispatch number, the reasonably current time, and the 443 short thread flag. Under HAVE_GTK, define globals for the timeout 444 source ID and the current timeout time. 445 (tme_sjlj_gettimeofday): Added. 446 (_tme_sjlj_change_state): Add a not-blocked thread next on the 447 dispatching list if threads are being dispatched, and this thread 448 wasn't already in this dispatch. 449 (_tme_sjlj_threads_dispatching_runnable): 450 (_tme_sjlj_threads_dispatching_timeout): 451 (_tme_sjlj_timeout_time): Added. 452 (tme_sjlj_dispatch_fd): Removed. 453 (_tme_sjlj_threads_dispatching_fd): Added to replace 454 tme_sjlj_dispatch_fd(). 455 (tme_sjlj_dispatch): Return no value, and don't expect 456 tme_sjlj_yield() to return any value via longjmp(). Before 457 dispatching a thread, remove it from the timeout list if needed, and 458 set its dispatch number. After a dispatch, increment the global 459 dispatch number. 460 (_tme_sjlj_gtk_callback_timeout): 461 (_tme_sjlj_gtk_callback_fd): 462 (_tme_sjlj_gtk_callback_idle): 463 (_tme_sjlj_gtk_yield): Added. 464 (tme_sjlj_threads_run): If we're using the GTK main loop, do an 465 initial _tme_sjlj_gtk_yield() instead of adding an idle directly. In 466 our main loop, removed the code that sorted the timeout list, now that 467 tme_sjlj_yield() inserts a thread at the right place on the list. Use 468 _tme_sjlj_timeout_time() to get the timeout time. After the select(), 469 use _tme_sjlj_threads_dispatching_runnable(), 470 _tme_sjlj_threads_dispatching_timeout() and 471 _tme_sjlj_threads_dispatching_fd() to build the dispatching list, and 472 tme_sjlj_dispatch() to dispatch them all. 473 (tme_sjlj_thread_create): Initialize the thread's dispatch number. 474 (tme_sjlj_cond_notify): Always call _tme_sjlj_change_state with 475 TME_SJLJ_THREAD_STATE_RUNNING (only the dispatch functions can use 476 TME_SJLJ_THREAD_STATE_DISPATCHING). 477 (tme_sjlj_yield): Don't return any value through longjmp(). Under 478 HAVE_GTK, don't do any GTK timeout allocation. Insert a thread with a 479 timeout at the right spot on the timeout list. 480 (tme_sjlj_sleep): Use tme_thread_long() to mark long runs, and 481 tme_gettimeofday() to get the current time. Fixed a bug where the 482 first timeout would be undefined. 483 (tme_sjlj_select_yield): Use tme_thread_long() to mark a long run. 484 485 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Added 486 support for TME_RECODE_OPERAND_UNDEF source operands. Fixed a bug in 487 the x86-64 double-host-size where we would load the first source 488 operand for the second. 489 490 * libtme/host/x86/rc-x86-rws.c (tme_recode_host_rw_thunk_new): Get 491 parameters from the new address type structure in the read/write 492 structure, instead of directly from the read/write structure or the ic 493 structure. 494 495Mon Feb 15 14:58:58 2010 Matt Fredette <fredette@alum.mit.edu> 496 497 * acinclude.m4: Quote all of the AC_DEFUN macro names. 498 * configure.in: When long is 64 bits, check for the maximum shift of a 499 64-bit value, whether or not right shifts of signed 64-bit values are 500 arithmetic, and for bswap64(). 501 Updated to the AM_PATH_GTK_2_0() macro. When long is 64 bits or the 502 compiler is gcc, add sunultra1 to the systems list. 503 Define bus_size_max and recode_size_guest_max from values from each 504 system to build. 505 Added sunultra1. 506 Added some missing $srcdir to paths. Added the --enable-recode 507 option, and configure recode support. Configure miscellaneous target 508 support. Generate tme/recode-host.h, libtme/recode-host.c, and 509 libtme/misc-host.c. Added more Makefiles to the AC_OUTPUT(). 510 511Sun Feb 14 20:17:12 2010 Matt Fredette <fredette@alum.mit.edu> 512 513 * ic/sparc/sparc-execute.c: 514 * ic/sparc/sparc-rc-ls.c: Switched from the old TME_RECODE_RW_FLAG and 515 TME_SPARC_RECODE_RW_FLAG_ names to the new TME_RECODE_TLB_FLAG and 516 TME_SPARC_RECODE_TLB_FLAG_ names. 517 518 * ic/sparc/sparc-fpu.c [TME_HAVE_INT64_T]: Include sparc-vis-auto.c. 519 (tme_sparc_fpu_exception_check): Use the per-architecture fp_exception 520 trap. 521 (tme_sparc32_stdfq): Use TME_SPARC_INSN_FPU_ENABLED() instead of 522 TME_SPARC_INSN_FPU_STORE(), which might mem_address_not_aligned trap 523 before the fp_exception, which is the wrong order on a v9 CPU. This 524 function needs to be corrected for any CPU that actually implements 525 the FQ. 526 (tme_sparc_fpu_fpreg_aligned): Removed. 527 (tme_sparc_fpu_fpreg_decode): Added, as a replacement for 528 tme_sparc_fpu_fpreg_aligned(). 529 (tme_sparc_fpu_fpreg_format): Our caller is now expected to make sure 530 the register is aligned. 531 (tme_sparc_fpu_fpreg_read): Don't use TME_FIELD_MASK_EXTRACTU with a 532 variable mask. Use tme_sparc_fpu_fpreg_decode() to decode the 533 register number. 534 535 * ic/sparc/sparc-impl.h: Switched from the old TME_RECODE_RW_FLAG() 536 and TME_SPARC_RECODE_RW_FLAG_ names to the new TME_RECODE_TLB_FLAG() 537 and TME_SPARC_RECODE_TLB_FLAG_ names. 538 539 * ic/sparc/sparc-misc.c: 540 * ic/sparc/sparc-rc-verify.c: Switched from the old 541 tme_sparc_dtlb_recode_tlb names to the new tme_sparc_recode_tlb names. 542 543 * ic/sparc/sparc-rc-ls.c (tme_sparc_recode_ls_tlb_update): The DTLB 544 array is really a single TLB array with the ITLB entries. The recode 545 TLB entries' read/write flags were renamed to just (TLB) flags. 546 (_tme_sparc_recode_ls_init): Set the members of the new address type 547 structure in the read/write structure. Many of them used to be plain 548 in the read/write structure. 549 550Sun Feb 14 18:08:02 2010 Matt Fredette <fredette@alum.mit.edu> 551 552 * ic/sparc/cy7c601.c (tme_ic_,sparc,cy7c601): Call 553 tme_sparc_sync_init() and set the tme_sparc_timing_loop_cycles_each 554 value. 555 556 * ic/sparc/mb86900.c (tme_ic_,sparc,mb86900): Call 557 tme_sparc_sync_init() and set the tme_sparc_timing_loop_cycles_each 558 value. 559 560 * ic/sparc/sparc-execute.c: Set the recode chain TLB flags mask. 561 Manage a pointer to the token for current instruction TLB entry, 562 instead of the current instruction TLB entry itself, because that's 563 what the recode instruction thunks do. On a branch to ., truncate the 564 instruction burst to get to the code that handles a branch to . as a 565 timing loop or an idle. At the end of an instruction burst, possibly 566 update the instruction burst runlength, and if the next instruction 567 will be annulled, loop to handle it now. Clear the instruction burst 568 other flag if this will be a normal burst, otherwise set it for an 569 idle burst. When updating PC_next_next on a v9 CPU, mask it with the 570 address mask. 571 [TME_SPARC_HAVE_RECODE()]: Removed the source key offset. 572 tme_recode_insns_thunk_run() now takes a chain thunk. When recode 573 thunks return, switch to the invalid instruction TLB entry. 574 575 * ic/sparc/sparc-impl.h: Include <tme/runlength.h>. 576 Define TME_SPARC64_TICK_NPT and TME_SPARC64_TICK_COUNTER. Added 577 support for the sunos64-type-0 idle type. 578 (TME_SPARC_IDLE_MARK): Flag the instruction burst as shortened. 579 Define TME_SPARC_MODE_TIMING_LOOP. 580 [!TME_HAVE_RECODE]: Removed old arguments from 581 _TME_SPARC_RECODE_CWP_UPDATE. 582 Define different versions of TME_SPARC_HAVE_RECODE() that avoid using 583 TME_SPARC_VERSION(ic) whenever possible. Define 584 TME_SPARC_RECODE_TLB_FLAG_CHAIN_USER() and 585 TME_SPARC_RECODE_TLB_FLAG_CHAIN_PRIV(). Define the 586 TME_SPARC_EXTERNAL_CHECK_ macros. Define tme_sparc_ireg_umax_t. 587 In struct tme_sparc, added the number of scaled cycles per 588 microsecond, the runlength state and its update state, get the 589 instruciton burst from the runlength state, track the token of any 590 currently busy instruction TLB entry, added the address mask, added 591 the timing information, the current chain TLB flags, the chain return 592 address stack, removed the chain cacheable and source key offset, 593 added the instructions group structure. Declare 594 tme_sparc_sync_init(), tme_sparc_itlb_current(), 595 tme_sparc_insn_peek(), the timing support functions, the chain TLB 596 update functions, and tme_sparc_recode_verify_end_preinstruction(). 597 Now define the verify no-operation macros even if TME_HAVE_RECODE is 598 zero. 599 600 * ic/sparc/sparc-insns-auto.sh: Instead of testing for PSTATE.AM, 601 always mask sparc64 addresses with ic->tme_sparc_address_mask. 602 (tme_sparc${arch}_${slow}): Set ic->_tme_sparc_instruction_burst_other 603 to flag the shortened burst. 604 (tme_sparc${arch}_ls): Even when the ASI has not been specified, the 605 instruction may provide ASI flags, so add them in. Call 606 tme_sparc${arch}_recode_chain_tlb_update() to update a recode 607 instruction TLB entry. 608 Don't assert that the mapping made a mapping until after checking 609 whether or not it completed the transfer. 610 611 * ic/sparc/sparc-insns.c (tme_sparc32_wrpsr): Set 612 ic->_tme_sparc_instruction_burst_other to flag the shortened 613 instruction burst. 614 (tme_sparc64_return): 615 (tme_sparc64_done_retry): Instead of testing for PSTATE.AM, always 616 mask sparc64 addresses with ic->tme_sparc_address_mask. 617 (tme_sparc64_rdpr): 618 (tme_sparc64_rdasr): Mask the scaled cycles counter to fit in 619 TICK.COUNTER, and or in TICK.NPT if needed. 620 (_tme_sparc64_idle_type_sunos64_type_0_splhigh): Added. 621 (tme_sparc64_wrpr): Handle TICK.NPT and the TICK.COUNTER offset 622 separately. 623 Fixed a bug where we wouldn't redispatch after a write to PSTATE. To 624 improve interrupt latency, do an interrupt check before raising PIL, 625 and after lowering it. 626 Added support for detecting the sunos64-type-0 idle type. 627 628 * ic/sparc/sparc-misc.c: Replaced uses of the _tme_sparc_itlb_busy 629 member with either _tme_sparc_itlb_current_token and the token 630 functions, or a call to tme_sparc_itlb_current(). 631 (tme_sparc_idle): Call the external check function with 632 TME_SPARC_EXTERNAL_CHECK_MUTEX_LOCKED. 633 (tme_sparc_thread): When entering execution mode, if this instruction 634 burst will be used to update the runlength, note its start time. 635 Added support for the timing loop mode. 636 (_tme_sparc_command): Added the sunos64-type-0 idle type. 637 (tme_sparc_sync_init): Added. 638 (tme_sparc_new): For the timing loop code, initialize 639 ic->tme_sparc_cycles_unscaling. Initialize the instruction burst 640 runlength state. 641 (tme_sparc_do_idle): Set ic->_tme_sparc_instruction_burst_other to 642 flag the shortened instruction burst. 643 (tme_sparc32_external_check): Now take flags instead of a boolean. 644 (tme_sparc64_trap): Reset TICK.NPT and TICK.counter separately. Also 645 reset TICK.counter on an XIR. 646 (tme_sparc_itlb_current): 647 (tme_sparc_insn_peek): Added. 648 (tme_sparc_fetch_nearby): Call tme_sparc_insn_peek() to do the peek. 649 (tme_sparc_callout_relock): If we need to do an external check, 650 shorten the current instruction burst to do one immediately. 651 652 * ic/sparc/sparc-rc-chain.c: Removed some accidentally committed 653 AUDITs. 654 655 * ic/sparc/sparc-rc-insns.c: Replaced the TME_SPARC_RECODE_INSN_JUMP_ 656 macros with TME_SPARC_RECODE_CHAIN_INFO() used with the 657 TME_RECODE_CHAIN_INFO_ macros. 658 (tme_sparc_recode_insn_assist_redispatch): Use 659 _tme_sparc_recode_chain_src_key() to check if the current PC is still 660 cache-valid. 661 (_tme_sparc_recode_insn_assist_jmpl): Added. 662 (_tme_sparc_recode_recode): Added support for PSTATE.AM, mostly by 663 doing PC calculations in that address size. Be sure to not recode the 664 last instruction before tme_sparc_ireg_t wraps to zero. 665 Fixed jmpl recoding to call the assist function to check for traps, to 666 try to characterize a jmpl as a call or a return, and to better write 667 the PC of the jmpl into any destination register. Mark each chain 668 jump as either near or far. When recoding a call instruction, if the 669 PC is not the guest size, zero-extend r[15] after the PC has been 670 copied into it. Also use r[15] as the source for advancing PC to the 671 branch delay slot, for better host register allocation. Mark each 672 chain call as either near or far. 673 When an instruction needs a full assist, the source operands aren't 674 used, so make them the recode %undef. If there is no chain 675 information at the end of an instructions group, make unconditional 676 jump information. If the chain information is conditional, mark the 677 alternate as either near or far. Store the end of the instructions 678 and the chain information in the instructions group. 679 680 * ic/sparc/sparc-rc-verify.c: Removed 681 _tme_sparc_recode_verify_ic_replay_token. 682 (_tme_sparc_recode_verify_change): Renamed the read/write flags to 683 just TLB flags. 684 (tme_sparc_recode_verify_begin): Use tme_sparc_itlb_current() to get 685 the current TLB entry. Preserve the token pointer when initializing 686 the current TLB entry in the replay state. Fix 687 _tme_sparc_itlb_current_token in the saved in state. Force the 688 instruction burst size to two in the in state. 689 (tme_sparc_recode_verify_end): Use tme_sparc_itlb_current() to get the 690 current TLB entry. Set _tme_sparc_itlb_current_token instead of 691 _tme_sparc_itlb_busy. 692 (tme_sparc_recode_insns_dump): Check _tme_sparc_itlb_current_token 693 instead of _tme_sparc_itlb_busy. Call 694 _tme_sparc_recode_chain_src_key() to get the source key. 695 (_tme_sparc_recode_verify_init): Initialize and set tokens on all 696 replay TLB entries. 697 698 * ic/sparc/sparc-recode.c: Define TME_SPARC_RECODE_SRC_KEY_UNDEF, 699 TME_SPARC64_RECODE_SRC_KEY_FLAG_AM and 700 TME_SPARC64_RECODE_SRC_KEY_FLAG_CLE. Include sparc-rc-chain.c for 701 each architecture. 702 (_tme_sparc_recode_src_hash_invalidate): Use 703 TME_SPARC_RECODE_SRC_KEY_UNDEF for an invalidated source key. If an 704 invalidated source key has an instructions thunk, invalidate it, to 705 make sure that no other instruction thunk can chain to it. 706 (_tme_sparc_recode_jump_chain): Removed. 707 (tme_sparc_recode): Set the instructions group host source address. 708 On a v9 CPU, add PSTATE.AM and PSTATE.CLE to the source address key. 709 Set the instructions group valid byte and mask. Check for 710 TME_SPARC_RECODE_SRC_KEY_UNDEF for an invalidated source key, since 711 valid source keys may now be nonzero mod sizeof(tme_uint32_t). 712 (tme_sparc_recode_dump_insns): Don't take the recode instructions 713 array, since it can be found in the struct tme_sparc recode 714 instructions group. Replaced the TME_RECODE_OPCODE_JUMP dump with a 715 TME_RECODE_CHAIN_INFO_ dump. Added support for 716 TME_RECODE_OPERAND_UNDEF. 717 (tme_sparc_recode_init): Removed address translation and jump chain 718 member initialization. These are now given in address type structures 719 by _tme_sparc_recode_ls_init() and _tme_sparc_recode_chain_init(). 720 Set the first instruction in the instructions group. Call the 721 _tme_sparc_recode_chain_init() for this architecture. 722 723 * ic/sparc/sparc-timing.c: Replaced uses of the _tme_sparc_itlb_busy 724 member with _tme_sparc_itlb_current_token and the token functions. 725 (tme_sparc_timing_loop_finish): Flag the shortened instruction burst. 726 727 * ic/sparc/stp103x.c: Define TME_STP103X_TCR_INT_DIS and 728 TME_STP103X_TCR_TICK_CMPR. In struct tme_stp103x, added the tick 729 compare condition and time. 730 (tme_misc_timeval_never): Added, although this should be moved. 731 (_tme_stp103x_interrupt_check): Take a mask of flags, instead of a 732 boolean. All callers changed. Added support for 733 TME_SPARC_EXTERNAL_CHECK_PCS_UPDATED. 734 (_tme_stp103x_update_sir): Now take and-not and or masks for SIR. All 735 callers changed. 736 Before clearing SIR.TICK_INT, to help TICK interrupt latency, do an 737 interrupt check, backing up the PCs to the previous instruction if a 738 tick interrupt should have been delivered. 739 (_tme_stp103x_update_pstate): Make sure %g0 is zero in both the normal 740 global register set and the current global register set. When there 741 is recode support, if PSTATE.AM and/or PSTATE.CLE are changing, clear 742 the return address stack. Update the address mask according to 743 PSTATE.AM, and mask the new PCs with it. 744 (_tme_stp103x_rdpr): Use tme_sparc_itlb_current() instead of 745 ic->_tme_sparc_itlb_busy. Don't use return() with a void value. 746 (_tme_stp103x_wrasr): Update the tick compare thread on a write to 747 TCR. 748 (_tme_stp103x_flush): Always mask the address. Since the default ASI 749 may not be the unrestricted ASI, and the nucleus ASI can't be modified 750 with ASI flags, instead of giving an explicit ASI, specify the 751 no-fault ASI flag in the load/store information. 752 (_tme_stp103x_ls_trap): Added support for TME_SPARC_LSINFO_NO_FAULT. 753 (_tme_stp103x_ls_address_map): If _tme_stp103x_ls_trap() ever returns, 754 check for TME_SPARC_LSINFO_NO_FAULT and return, instead of aborting. 755 (_tme_stp103x_tick_compare_th): Added. 756 (_tme_stp103x_external_check): Take a mask of flags, instead of a 757 boolean. All callers changed. 758 (_tme_stp103x_interrupt): Added a missed wakeup on the external 759 condition. 760 (_tme_stp103x_new): Call tme_sparc_sync_init(). Initialize the tick 761 compare thread state, and start the tick compare thread. Initialize 762 ic->tme_sparc_timing_loop_cycles_each. 763 764Sun Feb 14 00:48:04 2010 Matt Fredette <fredette@alum.mit.edu> 765 766 * ic/sparc/sparc-misc-auto.sh: Renamed tme_sparc64_ireg_tick to 767 tme_sparc64_ireg_tick_offset, and added the separate 768 tme_sparc64_ireg_tick_npt. 769 770 * serial/ms-mssystems.c (_tme_serial_ms_mssystems5_init): Set the 771 rate-limiting based on the baud rate and the packet size. 772 773 * serial/serial-ms.c: _tme_serial_ms_callout): Added support for 774 rate-limiting reading events. 775 (_tme_serial_ms_th_rate): Added. 776 (tme_serial_,kb,mouse): Start the rate-limiting thread. 777 778 * serial/serial-ms.h: In struct tme_serial_ms, added members for 779 rate-limiting serial data. 780 781Thu Feb 11 00:15:55 2010 Matt Fredette <fredette@alum.mit.edu> 782 783 * tme/recode.h: Define TME_RECODE_OPERAND_UNDEF. 784 785Wed Feb 10 00:34:26 2010 Matt Fredette <fredette@alum.mit.edu> 786 787 * libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_imm): When the 788 most significant half of a double-host-size immediate is zero, emit an 789 xorl to clear the second register, instead of a mov of zero. 790 791Tue Feb 09 01:27:56 2010 Matt Fredette <fredette@alum.mit.edu> 792 793 * libtme/recode-regs.c (tme_recode_regs_host_reserve): Assert that 794 there is a reservation array entry free. 795 (_tme_recode_regs_src_load): Fixed a bug where we didn't handle the 796 case where the host register was already reserved, and would instead 797 decrement the reserved read-uses count. 798 799Sun Feb 07 17:32:01 2010 Matt Fredette <fredette@alum.mit.edu> 800 801 * libtme/recode-impl.h: Define struct tme_recode_tlb_type. 802 tme_recode_host_insns_thunk_new() now takes an instructions group, 803 instead of pointers to the array of instructions. Declare 804 tme_recode_address_type_check(), tme_recode_address_type_compare(), 805 and tme_recode_address_type_tlb_type(). 806 807 * libtme/recode-insns.c (tme_recode_insns_thunk): Now take a 808 instructions group structure, instead of pointers to the instructions 809 array. All callers changed. Removed the TME_RECODE_OPCODE_JUMP 810 support. 811 812 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_jump): 813 (tme_recode_insn_jump_chain): Removed. 814 (_tme_recode_x86_insn_emit): When emitting an extension instruction, 815 fixed a performance bug where we would load the source operand at the 816 destination size, instead of at the extension's source operand size. 817 Removed the TME_RECODE_OPCODE_JUMP support. 818 (tme_recode_insns_thunk_invalidate): Added. 819 (tme_recode_host_insns_thunk_new): Call _tme_recode_x86_chain_in() and 820 _tme_recode_x86_chain_out() to emit the chain in and chain out 821 instructions, instead of emitting a jump to the instructions prologue. 822 Get the instructions array from the instructions group structure. 823 824 * libtme/host/x86/recode-x86.c: Define TME_RECODE_X86_OPCODE_PUSH_Ib 825 and TME_RECODE_X86_OPCODE_BINOP_Iz_A. Define 826 TME_RECODE_X86_EA_BASE_IP. Remove 827 TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT. 828 (_tme_recode_x86_emit_jmp): 829 (_tme_recode_x86_fixup_jmp): Added. 830 (tme_recode_host_ic_new): Removed the code that emitted the 831 instructions thunk prologue, epilogue, jump subs and jump chain subs. 832 Call _tme_recode_x86_chain_epilogue() to make the instructions thunk 833 epilogue. 834 835 * tme/Makefile.am: Added runlength.h to pkginclude_HEADERS. 836 837 * tme/recode.h: Removed TME_RECODE_OPCODE_JUMP. Replaced the 838 TME_RECODE_JUMP_ macros with the TME_RECODE_CHAIN_INFO_ macros. 839 (TME_RECODE_INSNS_THUNK_INSNS_MAX): Account for 840 TME_RECODE_HOST_INSN_THUNK_OVERHEAD. In the TLB entry structures, 841 renamed all of the read/write flags to just (TLB) flags. 842 Define struct tme_recode_address_type. In struct tme_recode_rw, 843 replaced the address type members with an address type structure. 844 Define struct tme_recode_chain_thunk. Define struct 845 tme_recode_insns_group. In struct tme_recode_ic, removed the members 846 that are now included in the address type structure in a struct 847 tme_recode_rw. Replaced the tme_recode_ic_jump_chain member with the 848 tme_recode_ic_chain_fixup member. Renamed tme_recode_ic_jump_counter 849 to tme_recode_ic_chain_counter_offset. Added members for the chain 850 return address stack and the current instruction TLB entry token 851 offset. Declare tme_recode_chain_ras_clear(), 852 tme_recode_chain_thunk(), tme_recode_chain_fixup(), and 853 tme_recode_insns_thunk_invalidate(). tme_recode_insns_thunk() now 854 takes an instructions group, instead of pointers to the array of 855 instructions. 856 [TME_RECODE_DEBUG]: Declare tme_recode_chain_thunk_dump(). 857 858 * tme/threads.h: Declare tme_sjlj_gettimeofday(), and alias 859 tme_gettimeofday to it. Declare tme_sjlj_thread_short. Define 860 tme_thread_long(). 861 862 * tme/host/recode-x86.h: Define TME_RECODE_X86_CHAIN_IN_SIZE_MAX and 863 TME_RECODE_X86_CHAIN_OUT_SIZE_MAX, and use them to define 864 TME_RECODE_HOST_INSN_THUNK_OVERHEAD. Define 865 TME_RECODE_HOST_CHAIN_THUNK. In TME_RECODE_X86_IC, renamed 866 tme_recode_x86_ic_insns_prologue to tme_recode_x86_ic_chain_epilogue. 867 Removed tme_recode_x86_ic_insns_epilogue, tme_recode_x86_ic_subs_jump, 868 and tme_recode_x86_ic_subs_jump_chain. Added 869 tme_recode_x86_ic_chain_fixup_target. 870 (tme_recode_insns_thunk_run): Now takes a chain thunk instead of the 871 recode IC, all callers changed. Renamed the TME_RECODE_RW_FLAG macros 872 to TME_RECODE_TLB_FLAG macros. Define the tme_recode_ras_entry_t 873 type. 874 875Sun Feb 07 16:51:53 2010 Matt Fredette <fredette@alum.mit.edu> 876 877 * generic/mouse.c (_tme_mouse_deltas_opposite): Added. 878 (tme_mouse_buffer_copyin): If the new event can be merged with the 879 previous new event, merge them. 880 881 * libtme/Makefile.am: Added SUBDIRS. 882 In libtme_la_SOURCES, replaced misc.c with misc-host.c, and added the 883 machine independent recode sources and token.c and runlength.c. 884 Added misc.c to EXTRA_DIST. 885 886 * libtme/kgdb.c libtme/recode-address.c libtme/runlength.c 887 tme/runlength.h tools/stp103x-tlbs.pl tools/sun4u_58-find-module.pl 888 tools/tme-log-binary-dump-calls-traps.pl 889 tools/tme-toolchain-wrapper.pl: 890 891 Added. 892 893 * libtme/recode-ic.c (tme_recode_opcode_dump): Removed 894 TME_RECODE_OPCODE_JUMP. 895 896 * libtme/host/x86/Makefile.am: Added rc-x86-tlb.c and rc-x86-chain.c 897 to EXTRA_DIST. 898 899 * libtme/host/x86/rc-x86-chain.c: Fixed many bugs where 900 TME_RECODE_X86_MOD_RM_EA_DISP32() was used with 901 TME_RECODE_X86_EA_BASE_IP. 902 Split TME_RECODE_X86_CHAIN_RETURN_ADDRESS() into separate definitions 903 for ia32 and x86-64 hosts, because the ia32 expression gets a pointer 904 cast size warning on x86-64. 905 (_tme_recode_x86_chain_in): Explicitly cast a value being stored into 906 a tme_uint8_t, to tme_uint8_t, to avoid a warning when this value is a 907 16-bit constant. Fixed a bug where we added two rex prefixes 908 together. 909 (_tme_recode_x86_chain_prologue): Fixed an assert. 910 911Fri Feb 05 01:06:01 2010 Matt Fredette <fredette@alum.mit.edu> 912 913 * ic/sparc/Makefile.am: Added sparc-rc-chain.c to EXTRA_DIST. 914 * ic/sparc/sparc-rc-chain.c: Added. 915 916Fri Jan 15 03:05:59 2010 Matt Fredette <fredette@alum.mit.edu> 917 918 * libtme/host/x86/rc-x86-chain.c: 919 * libtme/host/x86/rc-x86-tlb.c: Added. 920 921Sun Nov 08 17:35:49 2009 Matt Fredette <fredette@alum.mit.edu> 922 923 * host/posix/posix-disk.c (_tme_posix_disk_buffer_free): 924 (_tme_posix_disk_open): 925 (_tme_posix_disk_close): 926 (__tme_posix_disk_command): 927 (_tme_posix_disk_command): Added. 928 (_tme_posix_disk_buffer_get): Now use _tme_posix_disk_buffer_free() to 929 free a buffer. 930 (tme_host_posix,disk): Now use _tme_posix_disk_open() to open the disk 931 image and set our command function on the element. 932 933 * ic/stp2024.c: Corrected all of the audio codec and DMA register 934 offsets. 935 936 * ic/sparc/Makefile.am: Added sparc-timing.c to 937 tme_ic_sparc_la_SOURCES. 938 939 * ic/sparc/sparc-fpu-auto.sh: Fixed a bug where FsMULd was doing a 940 single-precision multiply. 941 942 * ic/sparc/sparc-rc-ls.c (_tme_sparc_recode_ls_assist_check): On a v9 943 CPU, mask the addresses. 944 945 * ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_end_preinstruction): 946 Added. 947 (tme_sparc_recode_verify_end): Added support for 948 TME_SPARC_RECODE_VERIFY_PC_NONE. 949 (tme_sparc_recode_insns_dump): Fixed the suggested prints for the case 950 where TME_SPARC_RECODE_SRC_HASH_SIZE_ELEMENT is not one. 951 952 * ic/sparc/sparc-timing.c (_tme_sparc_timing_loop_start): Corrected 953 the comment about the state of the PCs. 954 (tme_sparc_timing_loop_assist): Now call 955 tme_sparc_recode_verify_end_preinstruction(). 956 957 * ic/sparc/sparc-vis-auto.sh: Added support for the 958 FCMP{GT,LE,NE,EQ}{16,32} instructions. 959 960 * ic/stp22xx/stp220x.c (_tme_stp220x_ebus_cycle): Fixed a bug where we 961 wouldn't update the read/write bits in the control register. 962 963 * ic/stp22xx/stp222x-impl.h: Added tme_stp2220_mdu_idi_zs0_zs1_active 964 to struct tme_stp222x. 965 966 * ic/stp22xx/stp222x-mdu.c (tme_stp222x_mdu_intcon): Now mimic how the 967 zs0 and zs1 interrupt signals are wired together somewhere. 968 969 * ic/stp22xx/stp222x-stc.c (tme_stp222x_stc_flush): The stp2220 flush 970 writeback actually only writes back four bytes, not eight. 971 (tme_stp222x_stc_regs_diag): Added minimal emulation of reads of the 972 diagnostic registers, always returning zero. 973 974 * libtme/misc.c (tme_misc_cycles_scaled): Now take an optional pointer 975 to an unscaled cycles counter, and do the scaling as a simple 976 floating-point multiply. Added support for hosts that don't have a 977 64-bit integral type. 978 (tme_misc_cycles_scaling): Now make the scaling with a simple 979 floating-point division. 980 [!TME_HAVE_MISC_CYCLES_PER_MS] (tme_misc_cycles_per_ms): Added support 981 for hosts that don't have a 64-bit integral type. 982 [!TME_HAVE_MISC_CYCLES] (tme_misc_cycles): Added support for hosts 983 that don't have a 64-bit integral type. 984 (tme_misc_cycles_spin_until): 985 (tme_value64_add): 986 (tme_value64_sub): Added. 987 988 * libtme/threads-sjlj.c (tme_sjlj_dispatch): Fixed a bug where we 989 would call gtk_idle_add_priority() when we weren't using GTK. 990 991 * libtme/host/x86/misc-x86.c: Define tme_misc_cycles() with inline. 992 993 * machine/sun/sun-bwtwo.c (_tme_sunbw2_type_set): Now define the 994 interrupt bus signal. 995 996 * machine/sun/sun-cgsix.c (_tme_suncg6_type_set): Now define the 997 interrupt bus signal. 998 999 * machine/sun/sun-fb.c: Now define TME_SUNFB_UPDATE_SIZE. Changed 1000 various tme_bus_addr_t to tme_bus_addr32_t. 1001 (_tme_sunfb_callout): Now call out the framebuffer-specific interrupt 1002 bus signal, instead of always using the unspecified one, and mark the 1003 signal callout as an edge. 1004 (tme_sunfb_memory_update): Pass and reset the first and last bytes 1005 updated, if any, in the real framebuffer memory, and invalidate any 1006 outstanding write TLB entries. 1007 (tme_sunfb_bus_cycle_bt458): Now tolerate reads and writes to invalid 1008 addresses. 1009 (_tme_sunfb_tlb_fill): Track one outstanding writable TLB entry, and 1010 the minimum and maximum possible bytes that any writable TLB entry 1011 could have written since the last framebuffer update. 1012 [TME_SUNFB_BUS_TRANSITION] (tme_sunfb_bus_cycle_transition): Added. 1013 (tme_sunfb_new): Make sure that the interrupt bus signal is defined. 1014 (tme_sun_cgthree): Define the interrupt bus signal. 1015 1016 * machine/sun/sun-fb.h: Now include <tme/completion.h>. Now define 1017 TME_SUNFB_LOG_HANDLE(). Temporarily define TME_SUNFB_BUS_TRANSITION. 1018 Changed some tme_bus_addr_t to tme_bus_addr32_t. In struct tme_sunfb, 1019 added members for one outstanding writable TLB entry, the offsets of 1020 the first and last bytes updated in the real framebuffer memory, and 1021 the interrupt bus signal. 1022 Added prototypes for tme_sunfb_bus_cycle_bt458 and 1023 tme_sunfb_bus_cycle_transition. 1024 1025 * scsi/scsi-device.c (_tme_scsi_device_cycle): If the device does not 1026 define a handler for a command, use the illegal command handler. 1027 1028 * tme/misc.h: Changed tme_misc_cycles_scaling_t to be the widest 1029 available floating-point type. 1030 Updated the tme_misc_cycles_scaled() prototype. Added a prototype for 1031 tme_misc_cycles_spin_until(). 1032 1033Tue Oct 27 00:45:16 2009 Matt Fredette <fredette@alum.mit.edu> 1034 1035 * ic/sparc/sparc-rc-insns.c (_tme_sparc_recode_recode): When recoding 1036 branches, now get the raw branch displacement as a signed 32 bits, 1037 doing the full sign-extension to guest width in one place. 1038 Added support for branch to . timing loops. When the PCs are not 1039 updated, in addition to checking that the PC advance is zero, check 1040 that the PC is in the guest PC register. 1041 1042 * ic/sparc/sparc-timing.c: Added. 1043 1044Tue Oct 13 22:40:10 2009 Matt Fredette <fredette@alum.mit.edu> 1045 1046 * tools/tme-log-binary-dump.pl: 1047 * tools/tme-log-binary-udiff.pl: 1048 * tools/tme-log-binary.pl: Added. 1049 1050Sat Sep 26 14:55:25 2009 Matt Fredette <fredette@alum.mit.edu> 1051 1052 * ic/sparc/sparc-execute.c: Now define tme_sparc_idle_pcs, instead of 1053 tme_sparc_idle_type_pc. Now use TME_SPARC_HAVE_RECODE() to test for 1054 recode support. Reworked idle handling. Now, an idle type must mark 1055 two consecutive idles without a trap before we go idle. This 1056 eliminates the race condition where we would trap, then resume in the 1057 idle loop past the point of no return of our going idle (i.e., before 1058 looping to check the possibly updated scheduler state again). Also 1059 added support for marking idles in a true idle loop. No longer go 1060 idle for the netbsd32-type-0 idle type in an annulled branch delay 1061 slot. 1062 When recode is supported, before checking for a recode thunk, detect a 1063 control transfer target that is an idle PC, and mark the idle. When 1064 recode is not supported, in the control transfer instruction handling, 1065 detect a control transfer target that is an idle PC, and mark the 1066 idle. 1067 1068 * ic/sparc/sparc-impl.h: Added macros for the new idle types, and 1069 macros for sets of idle types with common characteristics. 1070 Replaced TME_SPARC_IDLE_TYPES_SUPPORTED() with 1071 TME_SPARC_IDLE_TYPE_IS_SUPPORTED(). Added TME_SPARC_IDLE_MARK() and 1072 TME_SPARC_IDLE_STOP(). Added TME_SPARC_HAVE_RECODE(). In struct 1073 tme_sparc, added an instruction burst count for when idle. Now track 1074 the number of idle marks made since the last trap, and multiple idle 1075 PCs. 1076 1077 * ic/sparc/sparc-insns.c: Now include <tme/misc.h>. 1078 Now define a constant TME_SPARC_VERSION() around the instructions for 1079 the different architectures. 1080 In all of the sparc32 instructions, renamed TME_SPARC_TRAP_ to 1081 TME_SPARC32_TRAP_. 1082 (tme_sparc32_rdpsr): Removed the sunos32-type-0 idle type detection. 1083 This idle type is now detected only in tme_sparc32_wrpsr(). 1084 (tme_sparc32_wrpsr): Reworked all sparc32 idle type detection that 1085 keys off of a wrpsr. Now use TME_SPARC32_CWP_UPDATE(). 1086 (tme_sparc32_rett): 1087 (tme_sparc32_save_restore): Now use TME_SPARC32_CWP_UPDATE(). 1088 [TME_HAVE_INT64_T]: Added the sparc64 instructions. 1089 1090 * ic/sparc/sparc-misc.c (_tme_sparc_idle_reset): Added. All functions 1091 that reset the idle state now call here. 1092 (tme_sparc_thread): Added support for the new idle types. 1093 (tme_sparc_new): Initialize the idle instruction burst size. 1094 (tme_sparc32_trap): 1095 (tme_sparc64_trap): Traps always do a TME_SPARC_IDLE_STOP(). 1096 (tme_sparc_ls_bus_fault): Fixed a bug where we wouldn't advance the 1097 cycle to get past the fault under TME_SPARC_LSINFO_NO_FAULT. This 1098 caused fetches of annulled instructions that fault to loop forever. 1099 (tme_sparc_fetch_nearby): Cleaned up the code that gets the current PC 1100 and the nearby PC, especially making sure that the offset remains 1101 signed after multiplying it by a sizeof(), and truncating the result 1102 to the correct address size. Fixed a bug where we would assert() that 1103 the ITLB entry applies without checking if it's valid - for various 1104 reasons the ITLB might be the execute loop's itlb_invalid. 1105 1106 * ic/sparc/sparc-rc-insns.c (_tme_sparc_recode_recode): No longer 1107 check for the netbsd32-type-0 idle PC in a branch delay slot. This 1108 idle type is now handled as a true idle loop in the execute loop. 1109 1110 * scsi/scsi-cdrom.c: Now handle 1111 TME_SCSI_CDB_CDROM_READ_DISC_INFORMATION and 1112 TME_SCSI_CDB_CDROM_CACHE_SYNC as illegal. 1113 1114 * tme/scsi/scsi-cdrom.h: Now define 1115 TME_SCSI_CDB_CDROM_READ_DISC_INFORMATION. 1116 1117Tue Sep 08 23:15:20 2009 Matt Fredette <fredette@alum.mit.edu> 1118 1119 * machine/sun4u/Makefile.am: 1120 * machine/sun4u/SUN-ULTRA-1: Added. 1121 1122Mon Sep 07 15:42:24 2009 Matt Fredette <fredette@alum.mit.edu> 1123 1124 * ic/stp22xx/stp222x-main.c (_tme_stp222x_run): Fixed a bug where we 1125 would request the UPA bus for an interrupt dispatch even when we 1126 weren't ready to retry the dispatch. 1127 1128 * ic/stp22xx/stp22xx.c (tme_stp22xx_cond_sleep_yield): Fixed a bug 1129 where we wouldn't mark the condition as running under NDEBUG, before 1130 calling the run function. If the condition was notified before the 1131 sleep, since it was still marked idle, it wouldn't be marked as 1132 notified, and the notify would be lost. 1133 1134 * libtme/host/x86/rc-x86-conds.c (tme_recode_host_conds_thunk_new): 1135 Use the new TME_SHIFT() macro when doing host-size shifts of a 1136 tme_recode_uguest_t, which may be smaller than host-size. Fixed a bug 1137 emitting an %rip EA on an x86-64 host. 1138 1139 * libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_new): 1140 Use the new TME_SHIFT() macro when doing host-size shifts of a 1141 tme_recode_uguest_t, which may be smaller than host-size. Fixed a bug 1142 where the test subs wasn't chaining to the main flags subs. 1143 1144 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Fixed a 1145 bad double-host-size guest check. 1146 1147 * libtme/host/x86/rc-x86-rws.c (tme_recode_host_rw_thunk_new): When 1148 converting the guest address into the TLB entry page offset, do it at 1149 the smaller of the host size and the guest read/write address size. 1150 (tme_recode_host_rw_thunk_dup): The sign-extension instruction can be 1151 four bytes, not only less. 1152 1153 * libtme/host/x86/rc-x86-subs-asm.S (tme_recode_x86_shift): We need to 1154 extend for all right shifts less than host size, not just those less 1155 than 32 bits, because the common shra-all code assumes that the 1156 destination is host-size. This change only affected x86-64 hosts, 1157 which also had a REX bug. 1158 1159 * libtme/host/x86/recode-x86.c (_tme_recode_x86_emit_adjust_sp): Fixed 1160 a bug where we would overwrite the REX prefix on an x86-64 host. 1161 (_tme_recode_x86_raw_reg_binop): Fixed another bug where we used 1162 addition instead of binary-OR to combine two overlapping values. 1163 (tme_recode_host_ic_new): Fixed a TME_RECODE_REG_C inside a REX prefix 1164 macro. 1165 Fixed a REX.B macro for an address that had a size. When emitting the 1166 jump chain adjust of the c register, advance thunk_bytes normally, 1167 then assert that the value of TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT 1168 is correct, instead of using it to advance thunk_bytes. Fixed another 1169 bug where we used addition instead of binary-OR to combine two 1170 overlapping values. 1171 1172 * tme/common.h (TME_SHIFT): Added. 1173 1174 * tme/host/recode-x86.h: An x86-64 host needs a larger value of 1175 TME_RECODE_HOST_INSN_SIZE_MAX. 1176 1177Tue Sep 01 00:54:01 2009 Matt Fredette <fredette@alum.mit.edu> 1178 1179 * ic/sparc/Makefile.am: Added sparc-recode.c and stp103x.c to 1180 tme_ic_sparc_la_SOURCES. Added sparc-vis-auto.c to BUILT_SOURCES. 1181 Added sparc-vis-auto.sh and the sparc recode parts to EXTRA_DIST. 1182 Added a target to make sparc-vis-auto.c. 1183 1184 * ic/sparc/cy7c601.c (tme_ic_,sparc,cy7c601): Initialize many new 1185 struct tme_sparc members with cy7c601-specific values. 1186 1187 * ic/sparc/mb86900.c (tme_ic_,sparc,mb86900): Initialize many new 1188 struct tme_sparc members with mb86900-specific values. 1189 1190 * ic/sparc/sparc-recode.c: Removed TME_SPARC_RECODE_PAGE_SIZE_LOG2 and 1191 TME_SPARC_RECODE_PAGE_SIZE. We now use the ic's actual page size 1192 everywhere, instead of a fixed sparc recode page size. The fixed 1193 sparc recode page size of 4KB forced writes to always be assisted when 1194 the ic had a larger page size, because DTLB entries for writing were 1195 never for a full page (since we made the fixed sparc recode page size 1196 the validity size for cacheable memory, DTLB entries were never bigger 1197 than that). All users changed. Moved _tme_sparc_recode_verify_on 1198 from sparc-rc-verify.c, and added _tme_sparc_recode_off. 1199 Added sparc-rc-ls.c to the set of recode parts included for each 1200 architecture. 1201 Now define TME_SPARC_RECODE_RW_THUNK_INDEX(). 1202 (tme_sparc_recode): If recode is off, return immediately. 1203 (tme_sparc_recode_dump_insns): Added support for read/write 1204 instructions. 1205 (tme_sparc_recode_init): Allocate and initialize the read-uses 1206 records. On a v9 CPU, %r1 through %r7 are addressed through recode 1207 register window two. Set all of the recode TLB entry information for 1208 read/write instructions. Call the architecture-specific 1209 initialization for loads and stores. 1210 1211 * ic/sparc/stp103x.c: Now define TME_STP103X_ICACHE_BLOCK_SIZE. 1212 Reorganized struct tme_stp103x slightly, to put everything that is 1213 recode-verifiable first, and everything that is accessed by loads and 1214 stores last. 1215 (_tme_stp103x_interrupt_check): 1216 (_tme_stp103x_flush): If we're replaying instructions, return 1217 immediately. 1218 (_tme_stp103x_update_pstate): Fixed a bug where we wouldn't update the 1219 recode register window offsets. 1220 (_tme_stp103x_rdpr): Added. 1221 (_TME_SPARC_EXECUTE_OPMAP): Now use _tme_stp103x_rdpr. 1222 (_tme_stp103x_ls_cycle_block_ld): 1223 (_tme_stp103x_ls_cycle_block_st): Save the block for verification. 1224 (_tme_stp103x_new): Fixed a bug where we were only allocating a struct 1225 tme_sparc, and not the larger struct tme_stp103x. Initialize 1226 _tme_sparc_ls_asi_misaligned. Under _TME_SPARC_RECODE_VERIFY, 1227 initialize the recode verify sizes. 1228 1229 * ic/stp22xx/stp220x.c: 1230 * ic/stp22xx/stp222x-main.c: Removed some AUDITs. 1231 1232 * libtme/host/x86/rc-x86-rws.c: Fixed various bugs where we used a 1233 size with a TME_RECODE_X86_REX_B() that is for addressing. 1234 (_tme_recode_x86_rw_tlb_ref): Fixed a bad assert(). 1235 (tme_recode_host_rw_thunk_new): Added support for recode TLB entries 1236 with a 16-bit context. 1237 Added support for offsetting the address when making the TLB entry 1238 index. 1239 The recode TLB entries are now a found directly in the ic structure, 1240 not found through a pointer. 1241 Now emit instructions to check a recode TLB entry's context. Fixed 1242 bugs where we would emit a displacement-less EA when the lone base 1243 register is %bp or %r13. 1244 In the double-host-size most-signficant write, we know that its size 1245 is TME_RECODE_SIZE_HOST. 1246 Fixed a bug where we wouldn't do the double-host-size most-significant 1247 read first, before we destroy the host memory address register. Fixed 1248 bugs where we would lose instructions because we forgot to finish and 1249 restart the thunk, or forgot to advance thunk_bytes. 1250 1251Mon Aug 31 02:23:41 2009 Matt Fredette <fredette@alum.mit.edu> 1252 1253 * ic/sparc/sparc-rc-ls.c (TME_SPARC_RECODE_RW_FLAG): Removed. 1254 (_tme_sparc_recode_ls_assist_check): Added. 1255 (_tme_sparc_recode_ls_assist_ld) [_TME_SPARC_RECODE_VERIFY]: 1256 (_tme_sparc_recode_ls_assist_st) [_TME_SPARC_RECODE_VERIFY]: Call 1257 _tme_sparc_recode_ls_assist_check(). 1258 (tme_sparc_recode_ls_tlb_update): Now take the struct tme_sparc_ls *, 1259 so we can get the DTLB entry directly. Added tme_sparc_ireg_t casts 1260 to the DTLB address check, to avoid doing math in a wider 1261 tme_bus_addr_t. 1262 Force assists for a DTLB entry if it uses special ASIs. 1263 Improved the recode TLB entry read/write flags, including handling 1264 DTLB entries for no-fault loads, addresses with side-effects, and 1265 endianness changes. Also, no longer check for DTLB entries that 1266 support the secondary address space, because we can't assist them 1267 (mostly because recode read/write instructions only have a single 1268 default context). 1269 All sparc recode TLB entries have a 16-bit context, and update the 1270 context and the context mismatch read/write flag as needed. 1271 (_tme_sparc_recode_ls_init): Improved how the read/write thunks are 1272 generated, and especially their read/write flags masks. No longer 1273 make read/write thunks for accesses to secondary address spaces. Make 1274 read/write thunks for no-fault loads. 1275 1276 * ic/sparc/sparc-rc-verify.c: Define a token for the replay ITLB 1277 entry. 1278 (tme_sparc_recode_verify_begin): Set the token on the replay ITLB 1279 entry. 1280 (_tme_sparc_recode_verify_init): Initialize the token for the replay 1281 ITLB entry, and mark it as valid. 1282 1283Mon Aug 31 01:58:38 2009 Matt Fredette <fredette@alum.mit.edu> 1284 1285 * generic/fb-xlat-auto.sh: Now only check framebuffer contents that 1286 may have been updated for changes. 1287 1288 * host/gtk/gtk-screen.c (_tme_gtk_screen_th_update): If the 1289 framebuffer needs a full redraw, force the next translation to 1290 retranslate everything. 1291 (_tme_gtk_screen_mode_change): Now delay forcing the next translation 1292 until the next screen update. 1293 1294 * host/posix/posix-memory.c: Defined some macros for sizes of 1295 cacheables, and the writable TLB entry hash set. 1296 Added struct tme_posix_memory_valids. In struct tme_posix_memory, 1297 added a mutex. Fixed a bug where the rwlock was a mutex. Added 1298 pointers to any writable TLB entry hash set, a list of valids 1299 bitmasks. Added members for the current writable TLB size, and our 1300 cacheable structure. 1301 (_tme_posix_memory_tlbs_invalidate): Added. 1302 (_tme_posix_memory_tlb_fill): If this memory is cacheable, return the 1303 cacheable structure in the TLB entry, and if this is a write, track 1304 the TLB entry in the hash set and clear the bit for the address' page 1305 in all valids bitmasks. 1306 (_tme_posix_memory_valids_new): 1307 (_tme_posix_memory_valids_set): Added. 1308 (tme_host_posix,memory): If the memory is cacheable, allocate the 1309 writable TLB entry set, initialize the valids list and the writable 1310 TLB size, and the cacheable structure. 1311 1312 * ic/sparc/sparc-execute.c: Now define TME_PRIxSPARCREG. 1313 On sparc64, fixed the ASI mask code and set the default memory 1314 context. 1315 [TME_HAVE_RECODE]: Set the default read/write flags for the current 1316 CPU state. 1317 Instead of constructing the invalid ITLB entry, initialize its new 1318 token and set it on the entry. Never acquire the external mutex, and 1319 only call the external check function if the external flag is set. 1320 Now save the previous PC. If we're replaying recoded instructions for 1321 the verifier, stop replaying if the previous PC was the last to 1322 replay. Otherwise, poison it to prevent all recoding. Added 1323 (tme_sparc_ireg_t) casts to the ITLB entry address checks, to avoid 1324 doing math in a wider tme_bus_addr_t. Now use TME_SPARC_TLB_HASH() 1325 and TME_SPARC_ITLB_ENTRY() to get the ITLB entry from the array. Now 1326 check the context on an ITLB entry. Now, instead of filling the ITLB 1327 entry ourselves, just do a slow load of the instruction, which will 1328 take care of everything, including fetching the instruction into the 1329 memory buffer if needed. Since idle loop detection can't take place 1330 in the instruction executor when recode is in use, moved the 1331 netbsd32-type-0 detection into tme_sparc32_wrpsr(). In the rare case 1332 that an annulled instruction is also a branch target 1333 (which can only happen if there are two branches in a row, where the 1334 second one annuls), make sure we don't try to recode starting at the 1335 annulled instruction. 1336 Use TME_SPARC_G0_OFFSET(ic) to find the globals. 1337 [TME_HAVE_RECODE]: Now recode instructions, run recoded instructions 1338 thunks, and replay the same instructions through the normal executor 1339 to compare the effects. 1340 TME_SPARC_IREG_IMM has been replaced by TME_SPARC_IREG_TMP(0). Added 1341 support for the sparc64 format two instructions. Added support for 1342 the sparc64 %pstate.AM in the control transfers. 1343 1344 * ic/sparc/sparc-insns-auto.sh: Define _tme_sparc_float_null. 1345 Now emit the fpop1 and fpop2 instructions. Now emit instructions for 1346 sparc64, including the new sdivx, udivx, mulx, ldx, stx, ldxa, stxa, 1347 casxa, casa, and the alternate floating-point load and store 1348 instructions. 1349 (_tme_sparc32_alternate_asi_mask): Get the flags for an ASI and build 1350 a mask using the new ASI-mask macros. If this ASI has a special 1351 handler, force a slow load or store by making the ASI mask undefined. 1352 (_tme_sparc64_alternate_asi_mask): 1353 (_tme_sparc${arch}_fpu_mem_fpreg): Added. 1354 (tme_sparc${arch}_udiv): 1355 (tme_sparc${arch}_udivcc): 1356 (tme_sparc${arch}_sdiv): 1357 (tme_sparc${arch}_sdivcc): Trap on division by zero, and added 1358 overflow handling for the cc instructions. Fixed a sparc64 bug where 1359 we would only set %icc.Z when the 64-bit result was zero. 1360 In the load/store instructions, get the right address for the sparc64 1361 casa and casxa instructions, and when %pstate.AM is set. Get the 1362 context for sparc64 alternate instructions. Make a mask of ASI flags 1363 that will trigger a slow load/store. Check the DTLB entry's context. 1364 Added (tme_bus_addr${arch}_t) casts to the DTLB address check. Check 1365 that the ASI mask in the DTLB entry allows fast transfers. For a slow 1366 transfer, call the new tme_sparc${arch}_ls(). Now, allow the slow 1367 function to complete an alternate load. Get the byte order of the 1368 access and do byteswapping as needed. 1369 (tme_sparc${arch}_${insn}): Added support for the sparc64 %pstate.AM 1370 and possible address space hole. 1371 (tme_sparc${arch}_ldf*): 1372 (tme_sparc${arch}_stf*): On sparc64, call the ASI misaligned function 1373 to see if the address is misaligned. Before the memory access, now 1374 call _tme_sparc${arch}_fpu_mem_fpreg() to check for any traps and to 1375 get the floating-point register. 1376 (tme_sparc${arch}_lddf*): 1377 (tme_sparc${arch}_stdf*): On sparc64, call the ASI misaligned function 1378 to see if the address is misaligned. Before the memory access, now 1379 call _tme_sparc${arch}_fpu_mem_fpreg() to check for any traps and to 1380 get the floating-point register. Added support for sparc64 1381 fully-aligned and 32-bit aligned accesses. 1382 (tme_sparc${arch}_ldfsr): 1383 (tme_sparc${arch}_stfsr): Now check for traps with 1384 _tme_sparc${arch}_fpu_mem(). Added support for the sparc64 ldxfsr and 1385 stxfsr. 1386 (tme_sparc${arch}_atomic): Added. 1387 (tme_sparc${arch}_load): 1388 (tme_sparc${arch}_store): These functions are no longer called 1389 directly by instruction functions. They now only do final loads and 1390 stores (as opposed to pre-access fault checking, DTLB filling, etc.). 1391 (tme_sparc${arch}_ls): Added. This is the function called by 1392 instruction functions to do a slow access. This coordinates special 1393 ASIs, address mapping, DTLB filling, pre-access fault checking, and 1394 slow load, store, and atomic cycles. 1395 1396 * ic/sparc/sparc-misc-auto.sh: Define the sparc64 alternate, MMU, and 1397 interrupt globals. Define TME_SPARC_IREG_INSN. 1398 Replaced TME_SPARC_IREG_IMM with TME_SPARC_IREG_TMP(). Defined many 1399 sparc64 architected and internal registers. 1400 1401 * ic/sparc/sparc-misc.c (_tme_sparc_bus_signal): Now recognize the bus 1402 grant signal. Now track both assertion and negation of halt and 1403 reset. Changed the external signal indications to true atomic flags, 1404 and set the external atomic flag after any changes. Moved the 1405 condition variable notify inside the mutex lock. 1406 (_tme_sparc_bus_interrupt): Now update the external IPL value with an 1407 atomic write, and set the external atomic flag afterwards. Moved the 1408 condition variable notify inside the mutex lock. 1409 (tme_sparc_idle): Now call the ic-specific external check function, 1410 instead of the_sparc32_external_check(). 1411 (tme_sparc_thread): Added support for TME_SPARC_MODE_OFF. 1412 (_tme_sparc_generic_tlb_fill): Now take a tme_bus_addr_t. Don't set 1413 the ASI mask any more, the slow load/store function has arranged or 1414 will arrange for it to be set. 1415 (_tme_sparc_connection_score): 1416 (_tme_sparc_connections_new): Replaced bus connection TLB set allocate 1417 references with TLB set add references. Added support for UPA bus 1418 connections. 1419 (_tme_sparc_connection_make): Replaced bus connection TLB set allocate 1420 references with TLB set add references. Added support for UPA bus 1421 connections. Now initialize the TLB set and add it to the bus, 1422 getting the maximum context back in the v7 case. 1423 (tme_sparc_new): Added support for the tick-frequency and 1424 prom-delay-factor options. Initialize the cycles scaling. The 1425 processor starts off. Initialize the external state, CWP offsets and 1426 the ASI flags. Initialize recoding. 1427 (tme_sparc_redispatch): 1428 (tme_sparc32_trap_preinstruction): End any recode verifying. 1429 (tme_sparc32_external_check): Now take a flag that says whether or not 1430 the external mutex is locked. Update the new external state as 1431 needed. 1432 (tme_sparc32_trap): End any recode verifying. Now use 1433 TME_SPARC32_CWP_UPDATE() to update the CWP offsets, and 1434 TME_SPARC_REG_INDEX() to find %r17. Now log traps. 1435 (tme_sparc32_fetch_slow): 1436 (tme_sparc32_bus_fault): Removed. 1437 (tme_sparc32_ls_bus_cycle): 1438 (tme_sparc32_ls_address_map): 1439 (tme_sparc32_ls_trap): 1440 (tme_sparc_nnpc_trap): 1441 (tme_sparc_ls_bus_fault): 1442 (tme_sparc64_trap_preinstruction): 1443 (tme_sparc64_trap): 1444 (tme_sparc64_trap_error_state): Added. 1445 (tme_sparc_callout_relock): Now check the ITLB entry's context. 1446 (tme_sparc32_dump): Replaced TME_SPARC_CWP_OFFSET() with hard-coded 1447 multiplications by 16. 1448 (tme_sparc32_dump_memory): Converted into tme_sparc64_dump_memory(). 1449 1450 * ic/sparc/sparc-rc-insns.c: Removed TME_SPARC_RECODE_INSN_STORE; 1451 along with loads, stores are now detected by their 1452 TME_RECODE_OPCODE_RW opcode. Added TME_SPARC_RECODE_INSN_UPDATE_INSN. 1453 TME_SPARC_RECODE_INSN_ASSIST now includes 1454 TME_SPARC_RECODE_INSN_UPDATE_INSN. Replaced 1455 TME_SPARC_RECODE_INSN_ASSIST_STORE with TME_SPARC_RECODE_INSN_ST, and 1456 added TME_SPARC_RECODE_INSN_LD and TME_SPARC_RECODE_INSN_LDA. These 1457 are now used for the load and store instructions that can be recode 1458 read/write instructions, and TME_SPARC_RECODE_INSN_ASSIST_FULL | 1459 TME_SPARC_RECODE_INSN_NO_RD is used for stores (usually alternate 1460 stores) that can't be. Fixed a bug where std and stda were missing 1461 TME_SPARC_RECODE_INSN_NO_RD. 1462 casx and casxa are now TME_SPARC_RECODE_INSN_ASSIST_FULL. 1463 (tme_sparc_recode_insn_assist_redispatch): Added, from the old 1464 _tme_sparc_recode_insn_assist_redispatch(), all callers changed. Now 1465 check that the ITLB entry hasn't been poisoned by 1466 tme_sparc_callout_relock(), and that the remaining instruction burst 1467 is still nonzero. 1468 (_tme_sparc_recode_insn_assist_store): Removed. 1469 (_tme_sparc_recode_insn_assist_full): Now track statistics on assisted 1470 opcodes. 1471 (_tme_sparc_recode_recode): Now use the ic's actual page size 1472 everywhere, instead of a fixed sparc recode page size. The fixed 1473 sparc recode page size of 4KB forced writes to always be assisted when 1474 the ic had a larger page size, because DTLB entries for writing were 1475 never for a full page (since we made the fixed sparc recode page size 1476 the validity size for cacheable memory, DTLB entries were never bigger 1477 than that). 1478 For the v9 movr, fixed bugs where we had the wrong opcode and didn't 1479 set the right conditions thunk. Added support for the v9 ld*a 1480 instructions, because they may be used for speculative loads, which we 1481 do want to handle with recode read instructions. 1482 For BPcc and Bicc, extract the branch displacement using 32-bit types 1483 for as long as possible. Now test TME_SPARC_RECODE_INSN_UPDATE_INSN 1484 to see if an instruction always or sometimes needs an assist, instead 1485 of just checking for TME_RECODE_OPCODE_GUEST. 1486 Fixed a bug in the v9 32-bit shifts where we put the extension source 1487 size in the immediate field, instead of the second source operand 1488 field. 1489 Reused the old TME_SPARC_RECODE_INSN_STORE support for generating an 1490 assisted store for generating recode read/write instructions. 1491 1492Sun Aug 30 17:06:38 2009 Matt Fredette <fredette@alum.mit.edu> 1493 1494 * ic/sparc/sparc-fpu-auto.sh (_tme_sparc_fpu_fcc_${precision}): Added 1495 support for the additional fccN on sparc64. 1496 (tme_sparc_fpu_fpop[12]): Added support for encoded floating-point 1497 register numbers, recode verification, FMOV*cc, FxTO*, F*TOx, FNEGd, 1498 FABSd. Now dirty any destination register. 1499 1500 * ic/sparc/sparc-impl.h: Replaced all of the old TME_SPARC_TRAP_ 1501 macros with architecture-specific trap macros, whose values now 1502 include priority and other flags. For those trap names that are 1503 common across architectures, a new TME_SPARC_TRAP() macro can be used 1504 to expand to the right value for the current architecture. All users 1505 changed. For sparc64, added the FPRS, TSTATE, WSTATE, VER, XCC, and 1506 VIS GSR fields, and added more PSTATE fields. Added the sparc VIS 1507 ASIs. 1508 Added macros for the SPARC integer conditions. Added 1509 TME_SPARC_MODE_OFF and TME_SPARC_TL_MAX. Added a set of macros for 1510 updating the register window offsets for a new CWP, that update 1511 separate offsets for the output, local, and input registers, and also 1512 the recode register window offsets. This simplifies 1513 TME_SPARC_REG_INDEX. Now that there are only flat DTLB and ITLB 1514 arrays, added a TME_SPARC_TLB_HASH() to hash an address into an array. 1515 TME_SPARC_DTLB_ENTRY() and TME_SPARC_ITLB_ENTRY() now take one of 1516 these hashes, instead of an address. The slow load and store 1517 functions, and any function that supports a slow load or store, now 1518 take an expanded set of information about the access. 1519 Added macros for defining masks of load/store faults and memory 1520 features. 1521 Now define TME_SPARC_FPU_FPREG_NUMBER_UNDEF, TME_SPARC_FPU_DIRTY(), 1522 and TME_SPARC_FPU_IS_DISABLED(). Fixed TME_SPARC_FORMAT3_RD_ODD() to 1523 take the register set name for the architecture. 1524 Added TME_SPARC_INSN_FPU_ENABLED, which TME_SPARC_INSN_FPU now uses. 1525 Removed TME_SPARC_INSN_FPU_STORE. 1526 [TME_HAVE_RECODE]: Now define macros for sparc recode. 1527 (tme_sparc_log_start): Fixed sparc64 support. Now define macros for 1528 fixing PROM delay factors. Now define TME_SPARC_MEMORY_FLAGS() and 1529 _TME_SPARC_MEMORY_FLAGS(). Removed TME_SPARC_ASI_DATA(). 1530 Now typedef _tme_sparc64_format3 and _tme_sparc_ls_asi_handler. Added 1531 struct tme_sparc_ls. 1532 [TME_HAVE_RECODE]: Added struct tme_sparc_recode_cacheable. In struct 1533 tme_sparc, added the cycles scaling, replaced the single CWP offset 1534 with individual offsets for the global, output, local, and input 1535 registers. Added members for sparc64. Expanded the 1536 implementation-dependent data and functions, especially for the new 1537 load/store architecture. Retyped the instruction burst counters as 1538 tme_uint32_t, since recode requires that. Replaced the old TLB entry 1539 set pointers with a single sparc TLB entry array and a complementary 1540 array of tokens or recode TLB entries. Added per-ASI information, and 1541 members for memory context. Added members for the new bus external 1542 interface. Changed the memory buffer to be a union of all of the 1543 integral types. Expanded the number of FPU registers and added the 1544 sparc64 XFSR. Added the VIS state. Fixed a bug where the sparc64 1545 idle PC was a tme_uint32_t. Under [TME_HAVE_RECODE], added all of the 1546 state needed for sparc recode. Added more statistics. Changed many 1547 prototypes, generally for the new load/store architecture, trap 1548 changes, sparc recode verification, and sparc64 support. 1549 1550 * ic/sparc/sparc-vis-auto.sh (tme_sparc_vis) 1551 [TME_SPARC_RECODE_VERIFY]: Clear the rd buffer. 1552 (_tme_sparc${arch}_vis_ls_cycle_pst${insn}): Fixed a bug where we 1553 would get bit two of the store mask instead of bit one. 1554 (tme_sparc${arch}_vis_ls_asi_pst): Fixed some comments about trap 1555 handling, and check that our caller checked that the FPU is enabled 1556 and not in exception_pending mode. 1557 (tme_sparc${arch}_vis_ls_asi_fl): Fixed some comments about trap 1558 handling, and check that our caller checked that the FPU is enabled 1559 and in execute mode. 1560 (tme_sparc${arch}_vis_ls_asi_misaligned): Added. 1561 1562 * libtme/log-prf.c: Added support for two 'l' flags. Use the new 1563 PRF_OUT_ARG_CODE() for each argument type found. 1564 1565 * libtme/log.c: Define macros for the argument type codes. Define 1566 prf_lld(x) depending on whether or not long long int is supported, and 1567 _TME_LOG_IF_INT64_T() depending on whether or not tme_int64_t is 1568 supported. Define _TME_LOG_ALIGN_ANY(). 1569 Typedef tme_log_arg_code_t. 1570 (LOG_PRF_LOCALS): Added support for two 'l' flags, and for long long 1571 int arguments. 1572 (tme_output_append): 1573 (tme_output_append_error): 1574 (tme_output_prepend): 1575 (tme_output_prepend_error): Define a dummy PRF_OUT_ARG_CODE(). 1576 (_tme_log_arg_code): Added. 1577 (tme_log_part): Added support for binary mode logging. Define a dummy 1578 PRF_OUT_ARG_CODE() for text mode logging. 1579 1580 * tme/kgdb.h: Added. 1581 1582 * tmesh/tmesh.c: Added macros, types, and globals for binary mode 1583 logging. 1584 (_tmesh_log_output_binary): Added. 1585 (_tmesh_log_open): 1586 (main): Added support for binary mode logging. 1587 1588Sun Aug 30 14:42:15 2009 Matt Fredette <fredette@alum.mit.edu> 1589 1590 * machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler): 1591 Changed some tme_bus_addr_t to tme_bus_addr32_t. Now call 1592 _tme_sun2_mmu_context_user_set() on a write to the enable register, in 1593 case the boot state changed. 1594 1595 * machine/sun2/sun2-impl.h: In struct tme_sun2, removed the old 1596 "special ROM [reset] read bus cycles" support, and added a pointer to 1597 the m68k bus context register. Removed the prototypes for 1598 _tme_sun2_mmu_tlb_set_allocate(), _tme_sun2_mmu_tlb_set_add(), and 1599 _tme_sun2_mmu_reset(). Added a prototype for 1600 _tme_sun2_mmu_tlb_set_add(). 1601 1602 * machine/sun2/sun2-mainbus.c (_tme_sun2_command): No longer call 1603 _tme_sun2_mmu_reset(). 1604 (_tme_sun2_connection_score): 1605 (_tme_sun2_connections_new): Replaced bus connection TLB set allocate 1606 references with TLB set add references. 1607 (tme_machine_sun2): Initialize the m68k bus context register pointer. 1608 1609 * machine/sun2/sun2-mmu.c: Changed some tme_bus_addr_t to 1610 tme_bus_addr32_t. Now define TME_SUN2_CONTEXT_COUNT. 1611 (_tme_sun2_m68k_tlb_fill): 1612 (_tme_sun2_mmu_context_user_set): Now handle the boot state, and m68k 1613 TLB filling in general, more like how sun3 does. 1614 (_tme_sun2_bus_tlb_fill): Now take a tme_bus_addr_t. 1615 (_tme_sun2_mmu_tlb_set_allocate): 1616 (_tme_sun2_reset_cycle): 1617 (_tme_sun2_mmu_reset): Removed. 1618 (_tme_sun2_mmu_tlb_set_add): Added. 1619 (_tme_sun2_mmu_new): Now use TME_SUN2_CONTEXT_COUNT instead of a 1620 hard-coded 8. 1621 1622 * machine/sun3/sun3-control.c (_tme_sun3_memerr_test_cycle_handler): 1623 Now use tme_token_invalidate() instead of the removed 1624 tme_bus_tlb_invalidate(). 1625 1626 * machine/sun3/sun3-impl.h: In struct tme_sun3, added a pointer to the 1627 m68k bus context register, removed the boot state TLB entry tracking 1628 array, and track SDVMA TLB entry tokens instead of the TLB entries 1629 themselves. Replaced the _tme_sun3_mmu_tlb_set_allocate() with the 1630 _tme_sun3_mmu_tlb_set_add() prototype. 1631 1632 * machine/sun3/sun3-mainbus.c (_tme_sun3_connection_score): 1633 (_tme_sun3_connections_new): Replaced bus connection TLB set allocate 1634 references with TLB set add references. 1635 1636 * machine/sun3/sun3-mmu.c: Changed some tme_bus_addr_t to 1637 tme_bus_addr32_t. Now define TME_SUN3_CONTEXT_COUNT. 1638 (_tme_sun3_tlb_fill): No longer track data TLB entries filled in the 1639 boot state. Since there is no backing TLB entry concept any more, the 1640 memory error TLB entry pointer tracked is the real TLB entry pointer. 1641 (_tme_sun3_bus_tlb_fill): Now take a tme_bus_addr_t. Now track and 1642 invalidate SDVMA TLB entry tokens, instead of the TLB entries 1643 themselves. Call tme_sun_mmu_context_add() to associate the SDVMA TLB 1644 entry with the current context. 1645 (_tme_sun3_mmu_sdvma_change): Now invalidate the SDVMA TLB entry 1646 tokens, instead of the SDVMA TLB entries themselves. 1647 (_tme_sun3_mmu_context_set): No longer invalidate boot-state data 1648 TLBs, and instead factor the boot state into the bus context presented 1649 to the m68k, but do invalidate all SDVMA TLBs that depended on the 1650 previous context. 1651 (_tme_sun3_mmu_tlb_set_allocate): Removed. 1652 (_tme_sun3_mmu_tlb_set_add): Added. 1653 (_tme_sun3_mmu_new): Internal context zero is no longer used for the 1654 boot state. 1655 1656 * machine/sun4/sun4-impl.h: In struct tme_sun4, added a token for the 1657 cache internal TLB entry, a pointer to a v7 CPU bus context register, 1658 removed the boot state TLB entry tracking array, and track SDVMA TLB 1659 entry tokens instead of the TLB entries themselves. Replaced the 1660 _tme_sun44c_mmu_tlb_set_allocate() with the 1661 _tme_sun44c_mmu_tlb_set_add() prototype. In the 1662 _tme_sun44c_tlb_fill_bus() prototype, fixed a tme_uint32_t to a 1663 tme_bus_addr_t. 1664 1665 * machine/sun4/sun4-mainbus.c (_tme_sun4_connection_score): 1666 (_tme_sun4_connections_new): Replaced bus connection TLB set allocate 1667 references with TLB set add references. 1668 1669 * machine/sun4/sun44c-cache.c (_tme_sun44c_cache_cycle_bus): 1670 (_tme_sun44c_tlb_fill_cache): Now use tme_token_invalidate() instead 1671 of the removed tme_bus_tlb_invalidate(). 1672 (_tme_sun44c_cache_new): Initialize the token and set it on the cache 1673 internal TLB entry. 1674 1675 * machine/sun4/sun44c-memerr.c (_tme_sun44c_memerr_cycle_bus): 1676 (_tme_sun44c_tlb_fill_memerr): Now use tme_token_invalidate() instead 1677 of the removed tme_bus_tlb_invalidate(). 1678 1679 * machine/sun4/sun44c-mmu.c: Changed some tme_bus_addr_t to 1680 tme_bus_addr32_t. Now define TME_SUN44C_CONTEXT_COUNT_MAX. 1681 (_tme_sun44c_tlb_fill_mmu): No longer track data TLB entries filled in 1682 the boot state. 1683 (_tme_sun44c_tlb_fill_sparc): Now use TME_SPARC_ASI_MASK_SPECIAL() to 1684 make the ASI mask for control space. 1685 (_tme_sun44c_tlb_fill_bus): Now take a tme_bus_addr_t. Now track and 1686 invalidate SDVMA TLB entry tokens, instead of the TLB entries 1687 themselves. Call tme_sun_mmu_context_add() to associate the SDVMA TLB 1688 entry with the current context. 1689 (_tme_sun44c_mmu_sdvma_change): Now invalidate the SDVMA TLB entry 1690 tokens, instead of the SDVMA TLB entries themselves. 1691 (_tme_sun44c_mmu_context_set): No longer invalidate boot-state data 1692 TLBs, and instead factor the boot state into the bus context presented 1693 to the SPARC, but do invalidate all SDVMA TLBs that depended on the 1694 previous context. 1695 (_tme_sun44c_mmu_tlb_set_allocate): Removed. 1696 (_tme_sun44c_mmu_tlb_set_add): Added. 1697 (_tme_sun44c_mmu_new): Internal context zero is no longer used for the 1698 boot state. 1699 1700 * tme/Makefile.am: Added host and bus to SUBDIRS. Added recode.h, 1701 token.h, and completion.h to pkginclude_HEADERS. 1702 1703 * tme/common.h: Added support for 64-bit byteswapping. When 1704 tme_uint64_t is the gcc unsigned long long, define 1705 _TME_SHIFTMAX_INT64_T and TME_PRI64. Now define size-specific printf 1706 formats. 1707 1708 * tme/connection.h: In struct tme_connection, added an opaque 1709 identifier for an element to use with its connections. Now define 1710 TME_CONNECTION_BUS_UPA. 1711 1712 * tme/log.h: Added support for different log modes, and for the new 1713 binary log mode. 1714 1715 * tme/misc.h: Added tme_misc_cycles_scaling_t. Added prototypes for 1716 tme_value64 tme_misc_cycles_scaled(), tme_misc_cycles_scaling(), 1717 tme_misc_cycles_per_ms(), and tme_misc_cycles(). 1718 1719 * tme/recode.h: Added macros, types, and other support for the 1720 read/write instructions. 1721 Increased TME_RECODE_REG_GUEST_WINDOW_UNDEF from two to three, and 1722 redid tme register information window macros, for sparc64. 1723 Added the read-uses records support. 1724 1725 * tme/token.h (tme_token_busy): Make a write-before-read barrier after 1726 setting the busy flag. 1727 (tme_token_invalidate_nosync): Added. 1728 1729 * tme/host/recode-x86.h: Now define TME_RECODE_HOST_RW_THUNK, and 1730 macros for making the read/write flags. 1731 In TME_RECODE_X86_IC, added a member for tracking any loaded register 1732 window offset around an if/endif. 1733 1734 * tme/ic/sparc.h: Redid the ASI mask system to work better for 1735 sparc64, which uses many more ASIs, many of which do the same address 1736 translation. In struct tme_sparc_tlb, added a context member and a 1737 link member. The latter is for linking the TLB entry to any real 1738 SPARC MMU object. 1739 1740 * tme/machine/sun.h: Removed the prototypes for 1741 tme_sun_mmu_tlbs_context_set() and tme_sun_mmu_tlb_set_allocate(), and 1742 added the prototypes for tme_sun_mmu_context_add(), 1743 tme_sun_mmu_context_switched(), and tme_sun_mmu_tlb_set_add(). 1744 Added the prototype for tme_sun_cgsix(). 1745 1746Sat Aug 29 21:48:57 2009 Matt Fredette <fredette@alum.mit.edu> 1747 1748 * bus/multibus/3c400.c (_tme_3c400_tlb_fill): Truncate the address 1749 from the wider tme_bus_addr_t into a tme_bus_addr32_t local. 1750 1751 * bus/sbus/sun-fbs4.c (tme_bus_sbus,cgsix): Added. 1752 1753 * ic/am9513.c ic/isil7170.c ic/mm58167.c machine/sun/sun-bwtwo.c 1754 tme/ic/am9513.h tme/ic/isil7170.h tme/ic/mk48txx.h tme/ic/z8530.h: 1755 1756 Changed some tme_bus_addr_t to tme_bus_addr32_t. 1757 1758 * ic/mk48txx.c: Now define the eight registers beginning with the 1759 watchdog register. Changed some tme_bus_addr_t to tme_bus_addr32_t. 1760 (TME_MK48TXX_REG_FIRST): 1761 (_tme_mk48txx_bus_cycle): Added support for the mk48t59. 1762 (tme_ic_,mk48txx,mk48t59): Added. 1763 1764 * ic/ncr89c105.c ic/stp22xx/stp222x-impl.h ic/stp22xx/stp222x-iommu.c 1765 ic/stp22xx/stp222x-stc.c ic/stp22xx/stp222x-timer.c 1766 ic/stp22xx/stp22xx-impl.h ic/stp22xx/stp22xx.c: 1767 1768 Removed some AUDITs. 1769 1770 * ic/nec765.c: In struct tme_nec765, now store the i82077 DOR. 1771 (_tme_nec765_reset): Fixed a bug where the second argument was 1772 supposed to be nonzero for a hard reset. 1773 (_tme_nec765_bus_cycle): For the check interrupts command, return the 1774 current cylinder. Added support for the calibrate command and the 1775 i82077 DOR register. On a request master cycle, don't return that the 1776 controller is busy. 1777 (tme_ic_,nec765,i82077): Added. 1778 1779 * ic/stp2024.c (_tme_stp2024_cycle_sbus): Fixed bugs where we were 1780 byteswapping values read, even though tme_bus_cycle_xfer_reg() takes 1781 care of that. 1782 1783 * ic/z8530.c: Changed some tme_bus_addr_t to tme_bus_addr32_t. 1784 (_tme_z8530_callout): Now add TME_BUS_SIGNAL_EDGE to the interrupt 1785 callout. 1786 1787 * libtme/recode-notes.txt: Added. 1788 1789 * tme/generic/float.h: Now define TME_FLOAT_FORMAT_NULL. 1790 1791 * tme/generic/ic.h: Increased TME_IC_IREGS_SIZE. 1792 1793Sat Aug 29 19:47:52 2009 Matt Fredette <fredette@alum.mit.edu> 1794 1795 * generic/bus-device-auto.sh: Moved TME_BUS_ROUTER_INIT_INDEX to 1796 bus-device.h. 1797 (tme_bus_device_dma_${name}_${i_width}): Replaced the old TLB entry 1798 reserve/back mechanism with passing the TLB entry's token and a simple 1799 structure copy. 1800 1801 * generic/bus-el.c (_tme_bus_tlb_set_allocate): Removed 1802 (_tme_bus_tlb_set_add): Added, from the old 1803 _tme_bus_tlb_set_allocate(). 1804 (_tme_bus_connections_new): Provide _tme_bus_tlb_set_add() instead of 1805 _tme_bus_tlb_set_allocate(). 1806 1807 * generic/bus.c (tme_bus_tlb_set_allocate): Removed. 1808 (tme_bus_tlb_set_add): Added, from the old tme_bus_tlb_set_allocate(). 1809 (tme_bus_tlb_set_invalidate): Added. 1810 (tme_bus_tlb_map): Fixed a bug where we were using a long to hold a 1811 bus address offset, instead of a tme_bus_addr_t. 1812 (tme_bus_tlb_construct): 1813 (tme_bus_tlb_back): 1814 (tme_bus_tlb_invalidate): Removed. Now a TLB's token, not an entry 1815 itself, is tracked by responders. 1816 (tme_bus_tlb_initialize): Now initialize a TLB entry to be not 1817 cacheable. 1818 1819 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Now get the 1820 instruction TLB entry directly. Since TME_M68K_TLB_OK_FAST_READ was 1821 removed, manually check everything about the instruction TLB entry, 1822 including the new TLB context value. Added some (tme_bus_addr32_t) 1823 casts as needed, to avoid doing wider math when tme_bus_addr_t is 1824 wider. Replaced tme_bus_tlb_is_valid() and tme_m68k_tlb_is_valid() 1825 uses with tme_m68k_tlb_is_valid() and tme_m68k_tlb_is_invalid(). 1826 1827 * ic/m68k/m68k-impl.h (TME_M68K_TLB_ENTRY_SET): 1828 (TME_M68K_TLB_ENTRY): Removed. 1829 (TME_M68K_DTLB_ENTRY): Added. 1830 In struct tme_m68k, replaced the old TLB set pointers with an array of 1831 struct tme_m68k_tlb, and added the internal bus context register. 1832 1833 * ic/m68k/m68k-insns-auto.sh: In the memory access functions, now use 1834 TME_M68K_DTLB_ENTRY() instead of TME_M68K_TLB_ENTRY(), and get the 1835 ITLB entry directly. Since the TME_M68K_TLB_OK_FAST_* macros were 1836 removed, manually check everything about a TLB entry, including the 1837 new TLB context value. In the slow memory access functions, replaced 1838 tme_bus_tlb_is_valid() and tme_m68k_tlb_is_valid() uses with 1839 tme_m68k_tlb_is_valid() and tme_m68k_tlb_is_invalid(). Check the new 1840 TLB context value. Added some (tme_bus_addr32_t) casts as needed, to 1841 avoid doing wider math when tme_bus_addr_t is wider. 1842 1843 * ic/m68k/m68k-misc.c (_tme_m68k_connection_score): 1844 (_tme_m68k_connections_new): The tme_bus_tlb_set_allocate member has 1845 been replaced by tme_bus_tlb_set_add. 1846 (_tme_m68k_connection_make): Initialize the new TLB array and add it 1847 on the bus. 1848 (tme_m68k_go_slow): Since TME_M68K_TLB_OK_FAST_READ was removed, 1849 manually check everything about the instruction TLB entry, including 1850 the new TLB context value. Added some (tme_bus_addr32_t) casts as 1851 needed, to avoid doing wider math when tme_bus_addr_t is wider. 1852 (tme_m68k_tlb_fill): Replaced a tme_bus_tlb_unbusy_fill() with a 1853 tme_m68k_tlb_unbusy()/tme_token_invalid_clear() pair. Set the context 1854 on the TLB entry after it's returned. Added some tme_bus_addr32_t 1855 casts. 1856 (tme_m68k_callout_relock): Now get the instruction TLB entry directly. 1857 Use tme_m68k_tlb_is_invalid() instead of tme_bus_tlb_is_invalid() and 1858 check that the TLB context is the right one. 1859 (tme_m68k_rmw_start): Now use TME_M68K_DTLB_ENTRY() instead of 1860 TME_M68K_TLB_ENTRY(), and tme_m68k_tlb_busy() and 1861 tme_m68k_tlb_unbusy() instead of the plain bus versions. Added some 1862 tme_bus_addr32_t casts, and check a TLB's bus context as needed. 1863 1864 * libtme/recode-insns.c (tme_recode_insns_thunk): Now generate 1865 read-uses records, which track read-uses counts for guest registers 1866 across different live regions in the instructions thunk (instead of 1867 just the entire thunk). One live region for a guest register ends, 1868 and another begins, when a guest register is written or when all guest 1869 registers are flushed out. Initial read-uses records are produced at 1870 a flush point, and write read-uses records are produced at a write. 1871 The register allocator uses these records to update its read-uses 1872 counts when a live region changes. 1873 Read/write instructions also need all flags flushed, since they may 1874 fault and never return. 1875 1876 * libtme/recode-regs.c (tme_recode_regs_host_free_many): When all host 1877 registers are freed, consume initial read-uses records to set the 1878 read-uses counts for all guest registers that have live regions 1879 beginning now. 1880 (tme_recode_regs_dst_any): A write begins a new live region for the 1881 destination guest register, so consume a write read-use record to set 1882 the read-uses count for it. 1883 (tme_recode_regs_dst_specific): When the specific host register 1884 already has a guest register, after writing it if it's dirty, don't 1885 move it into another host register if the guest register won't be read 1886 later. 1887 A write begins a new live region for the destination guest register, 1888 so consume a write read-use record to set the read-uses count for it. 1889 1890 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_guest): Fixed a 1891 bug when making a dummy high half of a double-host-size ia32 guest 1892 function argument, where we would add to %esp instead of subtracting 1893 from it. 1894 (_tme_recode_x86_insn_rw): Added. 1895 (_tme_recode_x86_insn_emit): When the first source operand is not 1896 zero, don't assume that it's a guest register when checking the 1897 opcode-makes-zero optimization. For binary operations on an x86-64 1898 host, we can only emit an immediate whose one or two host-sized parts 1899 can be sign-extended from 32-bit parts. On an ia32 host, we can 1900 always emit any immediate, even for a double-host-sized guest. 1901 Added an optimization, where any current register window index is 1902 saved at an if branch, switched with any current register window index 1903 at an else branch, and compared to the current register window index 1904 at the endif. Only if they are different is the current register 1905 window index invalidated. This can often save a register window 1906 offset reload after an if/endif. Now call _tme_recode_x86_insn_rw() 1907 for a read/write instruction. 1908 1909 * libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): When 1910 emitting a REX prefix for a register store, size may be 1911 double-host-size, so be sure to use the minimum of that and the host 1912 size. 1913 1914 * libtme/host/x86/recode-x86.c: Now define register macros for the XMM 1915 registers, and a generic undefined register number. 1916 Define opcodes for ROR, MOV_Ib_Eb, REP, Group 15 instructions, and XMM 1917 move instructions. 1918 (_tme_recode_x86_raw_reg_copy): Removed. 1919 (_tme_recode_x86_raw_reg_binop): Added, from the old 1920 _tme_recode_x86_raw_reg_copy(). 1921 (_tme_recode_x86_emit_reg_binop): Added, from the old 1922 _tme_recode_x86_emit_reg_copy(). 1923 (_tme_recode_x86_emit_reg_copy): Now use 1924 _tme_recode_x86_emit_reg_binop(). 1925 (_tme_recode_x86_emit_mul_constant): Added. Now include 1926 host/x86/rc-x86-rws.c. 1927 1928 * machine/Makefile.am: Added sun4u to DIST_SUBDIRS. 1929 1930 * machine/sun/Makefile.am: Added sun-cgsix.c to 1931 libtme_machine_sun_la_SOURCES. 1932 1933 * machine/sun/sun-cgsix.c: Added. 1934 1935 * tme/generic/bus-device.h: Moved TME_BUS_ROUTER_INIT_INDEX here. 1936 Added a prototype for tme_bus_device_tlb_set_add(). 1937 1938 * tme/generic/bus.h: Now define TME_BUS64_LOG2, TME_BUS128_LOG2, 1939 TME_BUS_SIGNAL_BR, and TME_BUS_SIGNAL_BG. 1940 (tme_bus_tlb_is_valid): 1941 (tme_bus_tlb_is_invalid): 1942 (tme_bus_tlb_busy): 1943 (tme_bus_tlb_unbusy): 1944 (tme_bus_tlb_unbusy_fill): Now use the corresponding token macros with 1945 the TLB entry's token. 1946 (_tme_bus_tlb_busy_change): 1947 (_TME_BUS_TLB_OK): 1948 (TME_BUS_TLB_OK_FAST_READ): 1949 (TME_BUS_TLB_OK_FAST_WRITE): 1950 (TME_BUS_TLB_OK_SLOW_READ): 1951 (TME_BUS_TLB_OK_SLOW_WRITE): Removed. Now define bus-size-specific 1952 bus address types, and define tme_bus_addr_t to be the largest needed 1953 bus address type. Now define tme_bus_context_t, struct 1954 tme_bus_cacheable, and struct tme_bus_tlb_set_info. In struct 1955 tme_bus_tlb, replaced the members for the old busy and invalid 1956 mechanism with a pointer to the TLB entry's token. Added a pointer 1957 for a TLB entry's cacheable information. Now that a TLB set (with its 1958 bus context register pointer) is added to a bus connection instead of 1959 allocated by it, replaced the old allocate function pointer with an 1960 add function pointer in struct tme_bus_connection, and replaced the 1961 tme_bus_tlb_set_allocate() prototype with one for 1962 tme_bus_tlb_set_add(). Removed the prototypes for the old TLB entry 1963 saving, invalidating, and initializing functions. 1964 1965 * tme/ic/m68k.h (TME_M68K_TLB_OK_FAST_READ): 1966 (TME_M68K_TLB_OK_FAST_WRITE): 1967 (TME_M68K_TLB_OK_SLOW_READ): 1968 (TME_M68K_TLB_OK_SLOW_WRITE): Removed. 1969 (tme_m68k_tlb_busy): 1970 (tme_m68k_tlb_unbusy): Now use the corresponding token macro, on the 1971 token directly in the TLB entry. 1972 (tme_m68k_tlb_is_valid): 1973 (tme_m68k_tlb_is_invalid): Added. Added a token and a bus context to 1974 struct tme_m68k_tlb. 1975 1976Sat Aug 29 01:35:17 2009 Matt Fredette <fredette@alum.mit.edu> 1977 1978 * libtme/misc.c (_tme_misc_number_parse): Changed the G, M, and K 1979 units from the powers of two to the powers of ten. 1980 (tme_misc_cycles_scaled): 1981 (tme_misc_cycles_scaling): 1982 [!TME_HAVE_MISC_CYCLES_PER_MS] (tme_misc_cycles_per_ms): 1983 [!TME_HAVE_MISC_CYCLES] tme_misc_cycles(): Added. 1984 1985 * libtme/host/x86/Makefile.am: Added misc-x86.c to EXTRA_DIST. 1986 1987 * libtme/host/x86/rc-x86-flags.c (_tme_recode_x86_flags_shift_add_add): 1988 In addition to when the shift count is more than three, also do all 1989 shifting when an shl instruction when there is no constant and no 1990 addend register. 1991 1992Fri Aug 28 01:50:09 2009 Matt Fredette <fredette@alum.mit.edu> 1993 1994 * generic/bus-device.c (tme_bus_device_tlb_set_add): Added. 1995 * host/gtk/gtk-display.h: Added tme_gtk_screen_full_redraw to struct 1996 tme_gtk_screen. 1997 1998 * ic/ieee754/ieee754-ops-auto.sh: Now emit an op for to_int64. 1999 2000 * ic/sparc/sparc-rc-cc.c (_tme_sparc_recode_cc_init): Fixed bugs where 2001 we weren't shifting the raw CCR and RCC register numbers to agree with 2002 their eight-bit size. Fixed a bug where we weren't making the 2003 conditions thunk for the internal RCC register. 2004 2005 * libtme/recode-impl.h: Added prototypes for 2006 tme_recode_host_rw_thunk_new() and tme_recode_host_rw_thunk_dup(). 2007 2008Thu Aug 20 22:45:50 2009 Matt Fredette <fredette@alum.mit.edu> 2009 2010 * ic/sparc/sparc-rc-verify.c: Moved TME_SPARC_RECODE_VERIFY_IC_SIZE 2011 before the TLBs. Added TME_STP103X_BLOCK_FPREGS_DOUBLE and struct 2012 tme_sparc_recode_verify_mem_block, for verifying block loads and 2013 stores. 2014 In struct tme_sparc_recode_verify_mem, now track the PC for an access, 2015 and any block load and store information. Changed all sparc state 2016 globals to be the new struct tme_sparc_recode type, which includes 2017 space for an IC-specific extension. 2018 (_tme_sparc_recode_verify_mem_block): 2019 (tme_sparc_recode_verify_mem_block): Added. 2020 (tme_sparc_recode_verify_mem): Now verify the PC of an access, and any 2021 block load and store. 2022 (tme_sparc_recode_verify_reg_tick): 2023 (tme_sparc_recode_verify_reg_tick_now): Added. 2024 (tme_sparc_recode_verify_begin): Now copy any IC-specific extension 2025 into the input and replay states. Now make the ITLB entry that the 2026 replay will use, from the last ITLB entry used in the input state, and 2027 also make one for tme_sparc_recode_insns_dump(). 2028 (tme_sparc_recode_verify_end): Now throw away any memory records for a 2029 trapping PC. Clear the log level while replaying. Make the ITLB 2030 entry that replay used unusable again. Added more registers and 2031 controls to ignore. Now verify any IC-specific extension. Added 2032 support for sparc64 register windows. Make sure we verified all of 2033 the memory records. 2034 (tme_sparc_recode_verify_init): Check the verify and total sizes for 2035 this IC. Initialize all of the replay state TLB entries to be 2036 unusable. 2037 2038Thu Jun 18 01:16:53 2009 Matt Fredette <fredette@alum.mit.edu> 2039 2040 * ic/ad184x.c ic/stp2024.c ic/sparc/sparc-kgdb.c 2041 ic/sparc/sparc-vis-auto.sh ic/sparc/sparc-vis.c: 2042 2043 Added. 2044 2045 * ic/sparc/sparc-rc-verify.c: Moved _tme_sparc_recode_verify_on to 2046 sparc-recode.c. 2047 (tme_sparc_recode_verify_mem): Fixed a bug where this was always 2048 passed an ASI mask, but we thought it got an ASI. 2049 (_tme_sparc_recode_verify_change): Added. 2050 (tme_sparc_recode_verify_begin): Now call 2051 _tme_sparc_recode_verify_change() to turn verifying on or off. Now 2052 set the recode IC in the replay state. 2053 (tme_sparc_recode_verify_end): No longer override changes to the old 2054 TLB array pointers. Turned the override of the memory buffer into a 2055 struct assignment. No longer use TME_SPARC_CWP_OFFSET(). 2056 (tme_sparc_recode_insns_dump): Now use TME_SPARC_TLB_HASH() and 2057 TME_SPARC_ITLB_ENTRY() to get the instruction TLB entry. 2058 2059 * ic/sparc/stp103x.c: Removed the TME_STP103X_TTE_TAG_ macros, since 2060 they weren't being used. 2061 Now define TME_STP103X_ASI_DCACHE_DATA, TME_STP103X_ASI_DCACHE_TAG, 2062 and TME_STP103X_ASI_BLK_COMMIT. Now define TME_STP103X_BLOCK_SIZE and 2063 TME_STP103X_BLOCK_FPREGS_DOUBLE. Moved the GSR value from struct 2064 tme_stp103x to struct tme_sparc. All users changed. 2065 Added a missing static to _TME_SPARC_EXECUTE_OPMAP. Added 2066 tme_sparc64_vis_ls_asi_pst and tme_sparc64_vis_ls_asi_fl to 2067 _tme_stp103x_ls_asi_handlers[]. 2068 (_tme_stp103x_update_pstate): Fixed bugs where we weren't clearing all 2069 of the global-register-selection bits in the PSTATE value before using 2070 + to set new bits. Now check that the selection isn't reserved. 2071 (_tme_stp103x_impdep1): Added support for the VIS instructions. 2072 (_tme_stp103x_tlb_invalidate): Added. 2073 (_tme_stp103x_ls_cycle_quad): Fixed a bug where weren't checking the a 2074 fast transfer TLB for a quad's worth. Now use the 2075 TME_SPARC_LSINFO_ENDIAN_LITTLE indication from tme_sparc64_load(), 2076 instead of figuring it out ourselves. 2077 (_tme_stp103x_ls_asi_quad): Fixed a bug where we were checking for an 2078 stda instruction instead of an ldda instruction. 2079 (_tme_stp103x_ls_asi_tsb_ptr): Fixed a bug where we weren't shifting 2080 the tag access register image into a TSB entry offset. 2081 (_tme_stp103x_ls_asi_tlb_data_in): Fixed a bug where we weren't 2082 invalidating a TLB entry before replacing it. 2083 (_tme_stp103x_ls_asi_mmu_demap): Now use _tme_stp103x_tlb_invalidate() 2084 to invalidate TLB entries. 2085 (_tme_stp103x_ls_asi_dcache): Separate the code that handles writing 2086 zero to a tag and the code that handles the special PROM writes. 2087 Added support for reading tags, always as zero. 2088 (_tme_stp103x_block_buffer_bswap): 2089 (_tme_stp103x_ls_cycle_block_ld): 2090 (_tme_stp103x_ls_cycle_block_st): 2091 (_tme_stp103x_ls_asi_block): Added. 2092 (_tme_stp103x_new): Now initialize tme_sparc_vis_ls_fault_illegal. 2093 Added support for ASI_NUCLEUS_QUAD_LDD_LITTLE and the VIS partial 2094 store and short load ASIs. 2095 2096 * ic/stp22xx/Makefile.am: Added stp222x-impl.h to EXTRA_DIST. 2097 2098 * ic/stp22xx/stp220x.c: Added a missing static to 2099 _tme_stp2210_mc124x9_subregion. 2100 (_tme_stp220x_tlb_fill_transition): Fixed a bug where we would return 2101 a TLB entry that could handle read and write cycles, even if the 2102 old-style TLB entry didn't support what the caller wasn't filling for. 2103 2104 * ic/stp22xx/stp222x-impl.h: Now track the active IDIs in struct 2105 tme_stp222x. Added a prototype for tme_stp222x_mdu_intcon(). 2106 2107 * ic/stp22xx/stp222x-main.c: Changed the obio offset for the audio IDI 2108 to zero, to match the new stp2024 emulation. 2109 (_tme_stp222x_signal): Now call tme_stp222x_mdu_intcon() to handle an 2110 interrupt signal. 2111 (_tme_stp222x_tlb_fill_transition): Fixed a bug where we would return 2112 a TLB entry that could handle read and write cycles, even if the 2113 old-style TLB entry didn't support what the caller wasn't filling for. 2114 2115 * ic/stp22xx/stp222x-mdu.c: Added the TME_STP222X_MDU_IDI_TEST macro. 2116 (tme_stp222x_mdu_intcon): Added. 2117 (tme_stp222x_mdu_regs_clear): If the IDI is being updated to received, 2118 or if the IDI is still active in the interrupt contentrator, mark the 2119 IDI is received. 2120 2121 * ic/stp22xx/stp22xx.c (tme_stp22xx_enter_master) 2122 [TME_STP22XX_BUS_TRANSITION]: Before we enter, if we were making a bus 2123 master cycle callout, find the completion and force it to be valid, 2124 since the transition code may not get a chance to do that before we 2125 are reentered by another master. 2126 (tme_stp22xx_slave_cycle) [TME_STP22XX_BUS_TRANSITION]: Before we make 2127 a bus master cycle callout, assume that the callout will complete 2128 without error. When the callout returns, validate the completion only 2129 if tme_stp22xx_enter_master() didn't do it. 2130 2131Tue Jun 16 00:31:33 2009 Matt Fredette <fredette@alum.mit.edu> 2132 2133 * ic/Makefile.am: Added stp22xx, ncr89c105, stp2024, and ad184x. 2134 2135Tue May 05 22:12:56 2009 Matt Fredette <fredette@alum.mit.edu> 2136 2137 * ic/stp22xx/stp222x-iommu.c: 2138 * ic/stp22xx/stp222x-stc.c: Added. 2139 2140Sat Feb 28 16:48:11 2009 Matt Fredette <fredette@alum.mit.edu> 2141 2142 * ic/ncr89c105.c ic/sparc/stp103x.c ic/stp22xx/Makefile.am 2143 ic/stp22xx/stp220x.c ic/stp22xx/stp222x-asearch.c 2144 ic/stp22xx/stp222x-aspace.c ic/stp22xx/stp222x-impl.h 2145 ic/stp22xx/stp222x-main.c ic/stp22xx/stp222x-mdu.c 2146 ic/stp22xx/stp222x-timer.c ic/stp22xx/stp22xx-impl.h 2147 ic/stp22xx/stp22xx.c libtme/host/x86/misc-x86.c tme/completion.h 2148 tme/bus/Makefile.am tme/bus/upa.h: 2149 2150 Added. 2151 2152Fri Oct 03 00:48:18 2008 Matt Fredette <fredette@alum.mit.edu> 2153 2154 * ic/sparc/sparc-insns-auto.sh: In the load and store functions, added 2155 support for verifying and replaying transfers for recode. In the slow 2156 load and store functions, a TLB entry now has a token pointer that is 2157 always defined, and we no longer have the tme_bus_tlb_global to point 2158 a TLB entry back to itself. When recode is supported, call a function 2159 to update the corresponding recode TLB entry. 2160 2161Wed Sep 24 23:04:32 2008 Matt Fredette <fredette@alum.mit.edu> 2162 2163 * Makefile.am (dist-hook): Now remove any 2164 ${distdir}/libtme/recode-host.c. 2165 2166 * ic/sparc/sparc-rc-ls.c libtme/recode-rws.c libtme/token.c 2167 libtme/host/Makefile.am libtme/host/x86/Makefile.am 2168 libtme/host/x86/rc-x86-rws.c tme/token.h tme/host/Makefile.am: 2169 2170 Added. 2171 2172 * libtme/host/x86/Makefile: Removed. 2173 2174 * tme/memory.h: Added tme_shared to the definition of 2175 tme_memory_atomic_flag_t, and removed the requirement that a lock be 2176 gived in calls to tme_memory_atomic_read_flag() and 2177 tme_memory_atomic_write_flag(). Added tme_memory_atomic_init_flag(). 2178 2179 * tme/generic/fb.h: Added members for the first and last bytes updated 2180 in the real framebuffer memory. 2181 2182Wed Jul 02 00:01:39 2008 Matt Fredette <fredette@alum.mit.edu> 2183 2184 * libtme/host/x86/rc-x86-insns.c (_tme_recode_x86_insn_jump): A 2185 TME_RECODE_OPCODE_JUMP instruction now always jumps somewhere. Any 2186 alternate jump is taken if the jump recode flag is set. A jump jumps 2187 to the instructions thunk epilogue if it can't be chained, otherwise 2188 it jumps to the jump-chain sub. 2189 (_tme_recode_x86_insn_size_max_check): Added. 2190 (tme_recode_host_insns_thunk_new): Now call 2191 tme_recode_insns_thunk_invalidate_all() when there is no space for 2192 another instructions thunk. 2193 2194 * libtme/host/x86/rc-x86-regs.c (tme_recode_host_reg_move): Fixed a 2195 bug found by -Wuninitialized where we wouldn't initialize 2196 reg_x86_other for loads. 2197 2198 * libtme/host/x86/recode-x86.c (tme_recode_host_ic_new): The new 2199 TME_RECODE_X86_OFFSET_JUMP_CHAIN_DIRECT offset in the jump chain subs 2200 is used when the address of the jump to chain is already in the c 2201 register, and the zero offset in the subs is used when the address of 2202 the jump to chain is at the c register plus six 2203 (the size of the 32-bit conditional alternate jump). After the 2204 indirect jump at the end of the jump chain subs, emit an undefined 2205 instruction, to avoid unnecessary speculation by the CPU. No longer 2206 set the first variable thunk offset; machine-independent code does 2207 that. 2208 Call _tme_recode_x86_insn_size_max_check(). 2209 2210 * tme/recode.h: Now define the TME_RECODE_JUMP_ options. Now define 2211 TME_RECODE_INSNS_THUNK_INSNS_MAX. Added the 2212 tme_recode_ic_thunk_off_variable member. Added a prototype for 2213 tme_recode_insns_thunk_invalidate_all(). 2214 2215 * tme/host/recode-mmap.h: Now define TME_RECODE_HOST_THUNK_SIZE_MAX. 2216 2217 * tme/host/recode-x86.h: Replaced TME_RECODE_HOST_THUNK_INSNS_MAX with 2218 TME_RECODE_HOST_INSN_SIZE_MAX and moved TME_RECODE_HOST_THUNK_SIZE_MAX 2219 to the host recode header that is providing the instructions thunk 2220 memory. Replaced the tme_recode_x86_ic_thunk_off_variable member with 2221 a machine-independent member. 2222 2223Tue Jul 01 02:02:57 2008 Matt Fredette <fredette@alum.mit.edu> 2224 2225 * ic/sparc/sparc-rc-insns.c: Removed 2226 TME_SPARC_RECODE_INSN_NO_UPDATE_PC_NEXT, since instructions that need 2227 to update PC_next, now update both PC and PC_next themselves, instead 2228 of relying on TME_SPARC_RECODE_INSN_UPDATE_PCS. Updated the recode 2229 state flags for jumps. In various places, now track some statistics. 2230 (_tme_sparc_recode_insn_assist_redispatch): Added. 2231 (_tme_sparc_recode_insn_assist_store): 2232 (_tme_sparc_recode_insn_assist_full): Before returning, call 2233 _tme_sparc_recode_insn_assist_redispatch(), which will redispatch and 2234 not return if the recode page for the instructions thunk is no longer 2235 valid. 2236 [_TME_SPARC_STATS] (_tme_sparc_recode_insns_total): Added. 2237 (_tme_sparc_recode_recode): Don't update PC and PC_next automatically 2238 at the beginning of each instructions thunk, just to make PC valid 2239 from PC_next. Instead, track where the valid PC is, and update them 2240 only for full assists and control transfer instructions. Now 2241 calculate the worst-case position in the recode instructions buffer, 2242 past which we may not be able to recode another instruction. In a few 2243 places where we have to immediately stop recoding, we may have recoded 2244 no instructions at all for the thunk. In this case, return zero 2245 instead of calling abort(). It was too hard to get 2246 TME_SPARC_RECODE_INSN_NO_UPDATE_PC_NEXT to work all of the time, so 2247 now everywhere we need to update PC_next, update both PC and PC_next. 2248 Now set the new recode flags for jumps, for the control transfer 2249 instructions. 2250 Fixed a bug where we would emit a sethi instruction even if it is 2251 annulled in the delay slot of an unconditional branch. At the end of 2252 the instructions thunk, emit a TME_RECODE_OPCODE_JUMP instruction. 2253 2254 * ic/sparc/sparc-rc-verify.c (tme_sparc_recode_verify_failed): No 2255 longer abort(), so we can continue if needed. 2256 (tme_sparc_recode_verify_begin): Added support for turning 2257 verification on and off. 2258 (tme_sparc_recode_verify_end): Added more fields to ignore in the bulk 2259 comparison. 2260 (tme_sparc_recode_insns_dump): Added. 2261 2262 * ic/sparc/sparc-recode.c: Moved the #include of the verify code after 2263 tme_sparc_recode_invalidate_all(). Renamed the 2264 tme_sparc_recode_src_key_offset_chain member to 2265 tme_sparc_recode_chain_src_key_offset. 2266 (tme_sparc_recode_invalidate_all): Added. 2267 (_tme_sparc_recode_jump_chain) [_TME_SPARC_RECODE_VERIFY]: Stop 2268 chaining only if the verifier is on. 2269 (tme_sparc_recode): Now save the cacheable recode page. While an 2270 instructions thunk is running, it may need to confirm that its page is 2271 still valid. 2272 (tme_sparc_recode_dump_insns): Updated the dump of 2273 TME_RECODE_OPCODE_JUMP instructions. 2274 2275 * libtme/recode-conds.c (tme_recode_conds_thunk): Make sure the first 2276 variable thunk goes after this conditions thunk. 2277 2278 * libtme/recode-flags.c (tme_recode_flags_thunk): Make sure the first 2279 variable thunk goes after any instructions added for a flags thunk. 2280 2281 * libtme/recode-ic.c (tme_recode_ic_new): Make sure the first variable 2282 thunk goes after any thunks made by tme_recode_host_ic_new(). 2283 2284 * libtme/recode-impl.h: Renamed tme_recode_host_thunk_flush_all() to 2285 tme_recode_host_thunk_invalidate_all(). 2286 2287 * libtme/recode-insns.c (tme_recode_insns_thunk): Fixed a comment. 2288 (tme_recode_insns_thunk_invalidate_all): Added. 2289 2290 * libtme/host/recode-mmap.c (tme_recode_host_thunk_flush_all): Renamed 2291 to tme_recode_host_thunk_invalidate_all(). 2292 2293 * libtme/host/x86/rc-x86-conds.c (tme_recode_host_conds_thunk_new): No 2294 longer update the removed tme_recode_x86_ic_thunk_off_variable member. 2295 2296 * libtme/host/x86/rc-x86-flags.c (tme_recode_host_flags_thunk_new): 2297 (_tme_recode_x86_flags_thunk_chain): No longer update the removed 2298 tme_recode_x86_ic_thunk_off_variable member. 2299 2300Mon Jun 30 22:42:10 2008 Matt Fredette <fredette@alum.mit.edu> 2301 2302 * host/gtk/gtk-screen.c (_tme_gtk_screen_new): Fixed the 2303 gtk_window_set_policy() arguments, so the top-level window always 2304 grows and shrinks automatically. 2305 2306Sun Jun 01 23:25:11 2008 Matt Fredette <fredette@alum.mit.edu> 2307 2308 * ic/sparc/sparc-rc-cc.c ic/sparc/sparc-rc-insns.c 2309 ic/sparc/sparc-rc-verify.c ic/sparc/sparc-recode.c 2310 libtme/recode-conds.c libtme/recode-flags.c libtme/recode-ic.c 2311 libtme/recode-impl.h libtme/recode-insns.c libtme/recode-regs.c 2312 libtme/host/recode-mmap.c libtme/host/x86/Makefile 2313 libtme/host/x86/rc-x86-conds.c libtme/host/x86/rc-x86-flags.c 2314 libtme/host/x86/rc-x86-insns.c libtme/host/x86/rc-x86-regs.c 2315 libtme/host/x86/rc-x86-subs-asm.S libtme/host/x86/recode-x86.c 2316 tme/recode.h tme/host/recode-mmap.h tme/host/recode-x86.h: 2317 2318 Added. 2319 2320Thu Sep 06 23:35:41 2007 Matthew Fredette <fredette@alum.mit.edu> 2321 2322 * Release 0.6 out. 2323 2324 * TODO: Updated. 2325 2326 * ic/ncr53c9x.c: Fixed some comments. 2327 (_tme_ncr53c9x_scsi_cycle): When we transfer in from the SCSI bus, if 2328 we need to detect the the transfer residual based on the data 2329 transferred, try to update the transfer residual. 2330 2331 * machine/sun4/sun44c-mmu.c (_tme_sun44c_buserr_common): A bus error 2332 that is asynchronous for the CPU isn't reported as a hard fault to the 2333 CPU, but if the initiator is another bus master, it is reported to 2334 that master as a hard fault. 2335 2336 * scsi/scsi-tape.c (tme_scsi_tape_cdb_xfer0): In the NetBSD PR 2337 pkg/34536 hack, only clear the Illegal Length Indicator (ILI) flag. 2338 More importantly, this preserves the filemark flag, which is needed 2339 for SunOS tape installs to work. 2340 2341Sun Aug 26 14:02:04 2007 Matthew Fredette <fredette@alum.mit.edu> 2342 2343 * configure.in: Bumped version to 0.6. 2344 Now check for the alignment of long, when it's 64 bits. Added support 2345 for sun4 systems. 2346 2347 * ic/ieee754/ieee754-precision.sh: Added some missing ${prefix}es to 2348 the variable names in the precision-independent statements. 2349 2350Sat Aug 25 23:12:31 2007 Matthew Fredette <fredette@alum.mit.edu> 2351 2352 * generic/fb.c (_tme_fb_xlat_colors_get_set): If the colors that the 2353 destination framebuffer needs to allocate don't depend on the source 2354 framebuffer, return a colorset signature that destination framebuffers 2355 can use to avoid reallocating the same set of colors repeatedly. When 2356 the number of colors to allocate is clearly more than the destination 2357 could ever allocate, and source pixels are mapped to intensities, 2358 remove some of the less significant bits of the source intensities to 2359 reduce the number of colors needed. Now give a distinct pixel value 2360 for each distinct color we ask for, especially when we're asking for a 2361 lot of duplicate colors as the result of reducing the range of the 2362 source intensities (see above). 2363 2364 * host/gtk/gtk-display.c (_tme_gtk_display_menu_radio): Added. 2365 2366 * host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Now only 2367 reallocate the GdkImage when the framebuffer size changes, and the 2368 colors when the final mapping from source color to destination pixel 2369 changes. When allocating colors, now only allocate distinct colors. 2370 (_tme_gtk_screen_submenu_scaling): Added. 2371 (_tme_gtk_screen_new): Now use _tme_gtk_display_menu_radio() to create 2372 the scaling submenu. 2373 2374 * ic/i825x6.c: Added a union to fix an aliasing problem with 2375 TME_I825X6_RX_BUFFER_NEXT(). From skrll@netbsd.org. 2376 (_tme_i825x6_rx_buffers_add): Now busy a TLB before checking if it's 2377 valid and useful, and unbusy it for filling if it's not. After 2378 filling it, loop to busy and check it again. When we're done with the 2379 TLB entry, unbusy it. 2380 (_tme_i825x6_callout_ca): When the receive unit is being started, 2381 always abort it first, unless it was already idle. Before, we 2382 wouldn't abort it if it was out of resources, which was wrong since 2383 it's possible to run out of receive frame descriptors but not receive 2384 buffers. 2385 (_tme_i825x6_callout_cu): Don't abort() for a DIAGNOSE command. From 2386 sigmfsk@aol.com in NetBSD PR pkg/35305. 2387 (_tme_i825x6_signal): Don't assume that xor-ing the level out of the 2388 signal value leaves only the base signal; use TME_BUS_SIGNAL_WHICH() 2389 instead. 2390 (_tme_i825x6_read): Keep track of the transmit packet's size in a new 2391 variable, since the DMA read and write helper macros destroy rc. From 2392 sigmfsk@aol.com in NetBSD PR pkg/35305. 2393 2394 * ic/z8530.c (_tme_z8530_channel_reset): On a hardware reset, clear 2395 the IUS bits and reset RR2. Now take a pointer to the structure for 2396 the whole chip, since some registers are common to both channels. All 2397 callers changed. 2398 (_tme_z8530_channel_init): Now take a pointer to the structure for the 2399 whole chip, since some registers are common to both channels. All 2400 callers changed. 2401 (_tme_z8530_rr0_update): Fixed a bug where we would use the RR15 value 2402 where we meant to use the WR15 value. 2403 (_tme_z8530_rr2_update): 2404 (_tme_z8530_int_pending): Added. 2405 (_tme_z8530_intack): Now use _tme_z8530_int_pending() to see if an 2406 interrupt is pending, and call _tme_z8530_rr2_update() to update RR2 2407 and get the vector to use. Now check a socket flag to see if the IEI 2408 pin is tied low. 2409 (_tme_z8530_callout): Now use _tme_z8530_int_pending() to see if an 2410 interrupt is pending. 2411 (_tme_z8530_bus_cycle): When an interrupt is acknowledged, call 2412 _tme_z8530_rr2_update() to update RR2. 2413 2414 * ic/m68k/m6888x-auto.sh: No longer use the IEEE754 sub function to 2415 implement fcmp, use a specific m6888x function instead. 2416 2417 * ic/m68k/m6888x.c (tme_m68k_fpgen): Fixed a bug where a byte or word 2418 source operand in a register would get sign-extended and stored back 2419 into the register, destroying the other parts of the register. 2420 (_tme_m6888x_fcmp): Added. 2421 (tme_m68k_fmove_rm): We don't use TME_M68K_INSN_OP1(), so there's no 2422 need to set _op1. 2423 (tme_m68k_fmovem): Fixed a serious bug where we wouldn't advance the 2424 effective address after storing the last 32-bit word of a register's 2425 value. 2426 (tme_m68k_fsave): Fixed a buffer overflow bug where we could write the 2427 BIU flags outside of the frame structure. 2428 2429 * ic/m68k/m68k-insns-auto.sh: The cmpm, addx, and subx instructions 2430 access the source operand before the destination operand, and we had 2431 it backwards. Now generate the wrapper functions for a move of an 2432 address register to a predecrement or postincrement EA with that same 2433 address register. 2434 (tme_m68k_movem_${name}${size}): Now calculate the total size of the 2435 transfer early, so we can correctly emulate the behavior of storing 2436 the same address register used in a predecrement EA on the different 2437 CPUs. 2438 (tme_m68k_moves${size}): Now when storing the same address register 2439 used in a predecrement EA, store the original value. The BCD math 2440 functions can only fault when they access memory, and they must 2441 advance an address register right after it's used, in case the same 2442 address register is used for the other operand. 2443 2444 * ic/m68k/m68k-insns.c (tme_m68k_tas): Removed the 2445 TME_M68K_INSN_CANFAULT, since tme_m68k_rmw_start() does this if 2446 needed. 2447 (tme_m68k_cmp2_chk2): Fixed several bugs. From sigmfsk@aol.com in 2448 NetBSD PR pkg/33969. 2449 2450 * ic/m68k/m68k-iset-expand.pl: As a special exception, expand a move 2451 instruction that moves an address register into a predecrement or 2452 postincrement EA with the same address register, to use a move wrapper 2453 function. 2454 2455 * ic/m68k/m68k-iset.txt: Fixed a bug in decoding cas instructions - 2456 their size field actually doesn't work like any other. 2457 2458 * ic/m68k/m68k-misc.c (tme_m68k_go_slow): Only make the first and last 2459 valid fast pointers from the TLB entry if it supports fast reading. 2460 (tme_m68k_rmw_start): Fixed a bug where we would mark an instruction 2461 as possibly faulting, even when we wouldn't make any normal bus cycle 2462 calls. 2463 Corrected a byteswapping macro. 2464 (tme_m68k_rmw_finish): Corrected a byteswapping macro. 2465 2466 * ic/m68k/m68k-opmap-make.pl: Now recognize the 2467 move-same-address-register-to-predecrement and -postincrement 2468 functions wherever the move function is recognized. 2469 2470 * libtme/threads-sjlj.c: In struct tme_sjlj_thread, when GTK is in use 2471 track the current timeout handle, and have space for some fixed 2472 timeout handles. We no longer track a single timeout tag, since 2473 removing a timeout that hasn't fired yet may not prevent it from 2474 firing. Now, for each file descriptor, track a different thread for 2475 each file descriptor condition. 2476 (tme_sjlj_threads_init): Initialize the file descriptor condition to 2477 threads mapping. 2478 (tme_sjlj_dispatch_timeout) [HAVE_GTK]: Now remove no longer used 2479 timeouts when they occur naturally, and free their timeout handles. 2480 (tme_sjlj_dispatch_fd): Now dispatch different threads depending on 2481 the file descriptor conditions that are present. 2482 (tme_sjlj_threads_run): Now always do a select, even if there are no 2483 threads blocking on file descriptors. Now make a GdkInputCondition 2484 value for each file descriptor that is ready, for 2485 tme_sjlj_dispatch_fd(). 2486 (tme_sjlj_thread_create) [HAVE_GTK]: Now initialize the timeout 2487 handles. 2488 (tme_sjlj_yield): Now correctly track a different thread for each file 2489 descriptor condition, since there are often different threads managing 2490 the same file descriptor. When GTK is in use, timeouts can actually 2491 expire up to 1ms early, so account for this, and no longer try to 2492 remove an old timeout now, since it may still fire anyways. Instead, 2493 allocate and use another timeout handle, which will be managed by 2494 tme_sjlj_dispatch_timeout(). 2495 2496 * machine/sun/sun-obie.c (_tme_sun_obie_bus_signal): Fixed a bug where 2497 instead of managing the INTR bit in the CSR, we were just passing the 2498 i82586's interrupt signal through to the mainbus. This was breaking 2499 SunOS. Found by sigmfsk@aol.com in NetBSD PR pkg/35305. Now also 2500 pass a reset signal from obio up to the i82586. 2501 (_tme_sun_obie_connections_new): Now use _tme_sun_obie_bus_signal to 2502 handle bus signals coming from obio. 2503 2504 * scsi/emulexmt02.c (_tme_emulexmt02_cdb_mode_sense): Now use 2505 TME_EMULEXMT02_BLOCK_SIZE instead of the hard-coded constant. 2506 (_tme_emulexmt02_cdb_mode_select): Avoid a gcc warning about a 2507 comparison whose result is always known due to the limited range of a 2508 type. 2509 (tme_scsi_tape_emulexmt02_init): Now provide the fixed block size to 2510 the machine-independent code. 2511 2512 * scsi/scsi-cdb.c (tme_scsi_device_mode_select_data): Added. 2513 (_tme_scsi_device_make_inquiry_string): Fixed a type to get better 2514 type agreement. From tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 2515 2516 * scsi/scsi-tape.c (tme_scsi_tape_cdb_xfer0): Don't pad out a block 2517 with zeroes if the filemark indication is set. 2518 (_tme_scsi_tape_mode_select_data): 2519 (tme_scsi_tape_cdb_mode_select): Avoid a gcc warning about a 2520 comparison whose result is always known due to the limited range of a 2521 type. 2522 2523 * tme/generic/fb.h: Now define TME_FB_COLORSET_NONE. 2524 2525Sat Aug 25 19:52:23 2007 Matthew Fredette <fredette@alum.mit.edu> 2526 2527 * host/gtk/gtk-display.h: Now store a colorset signature in struct 2528 tme_gtk_screen. Define struct tme_gtk_display_menu_item, and added a 2529 prototype for _tme_gtk_display_menu_radio(). 2530 2531Fri Aug 24 01:21:50 2007 Matthew Fredette <fredette@alum.mit.edu> 2532 2533 * acinclude.m4 (AC_CHECK_ALIGNOF): Some compilers will do a smaller 2534 read than you expect, if they know that the value read will only be 2535 used at a smaller size later. A little math on the value read 2536 discourages this. 2537 (AC_CHECK_SHIFTMAX): Don't create the center value with one 2538 expression, which would do the shifting in type int. Defeat any 2539 constant optimizations on the shift count by using sscanf to 2540 initialize it. 2541 2542 * generic/float-auto.sh (tme_float_infinity_${_builtin_type}): 2543 (tme_float_negative_zero_${_builtin_type}): Added. 2544 (tme_float_radix${radix}_mantissa_exponent_${_builtin_type}): If the 2545 value is a zero, just return the same value. Fixed a bug where we 2546 would return a mantissa that was exactly the radix (instead of 2547 reducing it again to 1). 2548 2549 * host/posix/posix-serial.c (_tme_posix_serial_th_ctrl): If a TIOCMGET 2550 ioctl fails, be sure to use a zero modem state instead of garbage. 2551 2552 * ic/am7930.c (_tme_am7930_bus_cycle): Fixed a bug where we used 2553 TME_BUS16_LOG2 but the device is only eight bits wide. 2554 2555 * ic/ieee754/ieee754-misc-auto.sh (tme_ieee754_${precision}_value_to_builtin): 2556 Use the new tme_float_infinity_${_builtin_type}() and 2557 tme_float_negative_${_builtin_type}() functions to get built-in 2558 infinities and negative zeroes. 2559 (tme_ieee754_${precision}_value_from_builtin): Detect a negative zero 2560 using a bit-for-bit comparison to a positive zero, since the C 2561 equality operator may treat all zeroes as equal. Fixed a bug where 2562 roundup in a builtin-to-integer cast would affect the conversion. 2563 Removed an extraneous assignment to factor in the shell script. 2564 2565 * ic/sparc/sparc-misc.c (tme_sparc32_dump_memory): To avoid an 2566 assertion failure with TLB lock debugging turned on, now save, set, 2567 and restore the busy flag on the DTLB entry that the load function 2568 will use (assuming that it will only use one). 2569 2570 * machine/sun2/sun2-mainbus.c (tme_machine_sun2,zs): Override the 2571 default z8530 socket flags - on a sun2, the IEI lines are tied low. 2572 2573 * machine/sun3/SUN3-CARRERA: Removed the "delay 10000" option from 2574 bpf1, to speed things up in general - however it is still needed when 2575 netbooting NetBSD, to avoid a race condition in the kernel RARP client 2576 (when the RARP response comes back before the tsleep() starts, the 2577 wakeup() is lost). 2578 2579 * machine/sun3/sun3-mainbus.c (machine/sun3/sun3-mainbus.c): Now 2580 propagate a reset signal from the m68k out to the busses. 2581 2582 * tme/threads.h: Now include <sys/time.h>. 2583 2584 * tme/generic/float.h: Added prototypes for 2585 tme_float_infinity_${_builtin_type}() and 2586 tme_float_negative_zero_${_builtin_type}(). 2587 2588 * tme/ic/z8530.h: Started a set of socket flags, and added the 2589 tme_z8530_socket_flags to struct tme_z8530_socket. 2590 2591 * tme/machine/sun.h: In TME_SUN_Z8530_SOCKET_INIT, supply a default 2592 value for the z8530 socket flags. 2593 2594Thu Mar 29 01:56:40 2007 Matthew Fredette <fredette@alum.mit.edu> 2595 2596 * generic/fb-xlat-auto.sh: Fixed bugs where we would use the wrong 2597 masks with TME_FB_XLAT_MAP_LINEAR_SCALE() when we needed to scale 2598 large intensities down into a lookup range, 2599 2600 * host/posix/posix-serial.c (_tme_posix_serial_th_reader): If we get 2601 EOF, exit the thread. 2602 2603 * ic/m68k/m68k-impl.h: Keep the m68k TLB array pointers in unions with 2604 regular bus TLB pointers, to avoid any aliasing problems when 2605 allocating them. 2606 2607 * ic/m68k/m68k-misc.c (_tme_m68k_connection_make): When allocating the 2608 m68k TLB arrays, pass pointers to the regular bus TLB pointers in 2609 unions in struct tme_m68k, to avoid any aliasing problems. 2610 2611 * ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): Cast a constant 2612 to an unsigned type to silence a gcc warning. 2613 2614 * ic/sparc/sparc-impl.h: Keep the sparc TLB array pointers in unions 2615 with regular bus TLB pointers, to avoid any aliasing problems when 2616 allocating them. 2617 2618 * ic/sparc/sparc-insns-auto.sh: In the jmpl instructions, cast a 2619 constant to an unsigned type to silence a gcc warning. 2620 2621 * ic/sparc/sparc-insns.c (tme_sparc32_rdpsr): 2622 (tme_sparc32_wrpsr): Cast constants to an unsigned type to silence a 2623 gcc warning. 2624 2625 * ic/sparc/sparc-misc.c (_tme_sparc_connection_make): When allocating 2626 the TLB arrays, pass pointers to the regular bus TLB pointers in 2627 unions in struct tme_sparc, to avoid any aliasing problems. 2628 (tme_sparc32_trap): Cast a constant to an unsigned type to silence a 2629 gcc warning. 2630 (tme_sparc32_dump_memory): Added. 2631 2632 * machine/sun/sun-fb.c (TME_SUNFB_S4_REG): Added. 2633 (tme_bt458_omap_best): Fixed a bug where we would use the final loop 2634 counter as the best colormap index. 2635 (_tme_sunfb_callout): Reworked to handled failed callouts better, and 2636 added support for calling out framebuffer interrupts. 2637 (_tme_sunfb_callout_thread): The callout thread is now always present, 2638 running when a condition is notified. 2639 (tme_sunfb_memory_update): Now notify the callout thread to call out 2640 an interrupt if one is now pending. 2641 (tme_sunfb_bus_cycle_bt458): Now support 8-bit and 32-bit accesses. 2642 Schedule a mode change callout whenever the colormap or overlay map 2643 changes. Fixed bugs where we wouldn't read and write the bt458 2644 register set correctly. 2645 (tme_sunfb_bus_cycle_s4): If a write covers the status register, clear 2646 any pending interrupt. Call _tme_sunfb_callout() to make any 2647 callouts. 2648 (tme_sunfb_new): Initialize the callout thread condition, and create 2649 the callout thread. 2650 (tme_sun_cgthree): Set the correct sunfb flags for a cgthree. Fixed a 2651 bug where we wouldn't initialize the bt458 colormap pointers to point 2652 to the colormap. 2653 2654 * machine/sun/sun-fb.h: Since the callout thread is always present, 2655 removed the flag that marked when it was. Added flags for specifying 2656 which byte in a 32-bit access to an 8-bit register is used. In struct 2657 tme_sunfb now track whether or not the framebuffer interrupt is 2658 asserted, added a condition for notifying the callout thread, and 2659 added an alias for the first S4 basic register. 2660 2661 * machine/sun/sun-keyboards.txt: Removed the acute keysym from the US 2662 type 4 keyboard. Its definition is the same as apostrophe, and it was 2663 causing problems on hosts that actually have acute. This is really a 2664 bug in the keyboard emulation. 2665 2666 * machine/sun4/SUN4-75: Many changes. 2667 2668 * machine/sun4/sun44c-cache.c (_tme_sun44c_cache_new): Cast some 2669 expressions in comparisons to an unsigned type, to silence a gcc 2670 warning. 2671 2672 * machine/sun4/sun44c-control.c (_tme_sun44c_control_cycle_handler): 2673 Cast a promoted expression to an unsigned type in a ternary operator 2674 expression to silence a gcc warning. 2675 2676 * scsi/scsi-cdrom.c (tme_scsi_cdrom_cdb_read_toc): 2677 (tme_scsi_cdrom_cdb_mode_sense): Cast some expressions to unsigned 2678 types to silence a gcc warning. 2679 2680Sun Mar 25 21:18:50 2007 Matthew Fredette <fredette@alum.mit.edu> 2681 2682 * dist/softfloat/softfloat/bits64/softfloat.c (float128_rem): Added a 2683 cast to get better type agreement. From tsutsui@ceres.dti.ne.jp in 2684 NetBSD PR pkg/34113. 2685 2686 * generic/bus-el.c (_tme_bus_intack): Now unlock the bus before 2687 calling a device's interrupt acknowledge function, to avoid a 2688 deadlock. 2689 2690 * ic/am7990.c (_tme_am7990_receive): Added a cast to avoid a 2691 signed/unsigned comparison. 2692 2693Sat Mar 03 15:36:15 2007 Matthew Fredette <fredette@alum.mit.edu> 2694 2695 * host/gtk/gtk-mouse.c (_tme_gtk_mouse_mouse_event): Now discard 2696 double- and triple-click button events, since normal button press and 2697 release events are always generated also. 2698 2699 * machine/sun/sun-cgtwo.c (_tme_suncg2_callout): Fixed a bug where we 2700 tested the wrong variable for the mode change callout bit. 2701 2702Wed Feb 21 01:52:28 2007 Matthew Fredette <fredette@alum.mit.edu> 2703 2704 * host/bsd/bsd-bpf.c (_tme_bsd_bpf_callout): Now check that the packet 2705 being written has a reasonable size, and that the write succeeds. 2706 From sigmfsk@aol.com in NetBSD PR pkg/35305. 2707 2708 * host/gtk/gtk-display.h: Changed the signedness of the 2709 tme_gtk_screen_mouse_warp_x and tme_gtk_screen_mouse_warp_y members to 2710 get better type agreement. From tsutsui@ceres.dti.ne.jp in NetBSD PR 2711 pkg/34113. 2712 2713 * host/gtk/gtk-mouse.c: Changed some types to get better type 2714 agreement. From tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 2715 2716 * host/gtk/gtk-screen.c (_tme_gtk_gdkimage_scanline_pad): Removed the 2717 if that tests for the eight-bit case. This avoids a gcc4 warning 2718 about a possible missing return value, even though the possibility of 2719 that was zero. 2720 2721 * ic/i825x6reg.h: The size mask in an i82586 TBD is 0x3fff (it's 2722 0x7fff on a i82596). From sigmfsk@aol.com in NetBSD PR pkg/35305. 2723 2724 * ic/ncr53c9x.c (_tme_ncr53c9x_stimreg_msec): Fixed a gcc4 warning. 2725 2726 * ic/ieee754/ieee754-ops-auto.sh: Now perform negation by multiplying 2727 the source operand by -1, which correctly negates 0.0 into -0.0. From 2728 sigmfsk@aol.com in NetBSD PR pkg/34616. 2729 2730 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Simplified how 2731 PC-relative EAs are calculated. This should fix NetBSD PR pkg/34538. 2732 2733 * ic/sparc/sparc-misc.c (tme_sparc_new): Increased the instruction 2734 burst size to 800. 2735 (tme_sparc_do_reset): Now poison all idle type state to force the idle 2736 type to retrain, since we may be booting a new kernel. 2737 2738 * libtme/module.c (tme_module_open): Changed the signedness of 2739 tokens_count to get better type agreement. From 2740 tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 2741 2742 * machine/sun/sun-si.c (_tme_sun_si_bus_cycle_regs): Fixed an 2743 uninitialized variable bug that wasn't noticed by gcc3, because the 2744 value was never used. From tsutsui@ceres.dti.ne.jp in NetBSD PR 2745 pkg/34113. 2746 (tme_sun_si): Changed a type to get better type agreement. From 2747 tsutsui@ceres.dti.ne.jp in NetBSD PR pkg/34113. 2748 2749 * tme/memory.h (tme_memory_atomic_pointer_write): Fixed a bug where we 2750 tried to use a ternary operator expression as an lvalue. 2751 2752Fri Feb 16 02:50:23 2007 Matthew Fredette <fredette@alum.mit.edu> 2753 2754 * host/bsd/bsd-bpf.c (_tme_bsd_bpf_read): Fixed a bug where we would 2755 drop packets or pass garbage packets because we weren't using 2756 BPF_WORDALIGN() to determine the offset of the next packet. Added 2757 code to try to detect and strip off any CRC accidentally passed up 2758 through BPF from a host network device driver. 2759 2760 * ic/m68k/m68010.c (_tme_m68010_rte): A zero returned by 2761 tme_m68k_sequence_fill() or tme_m68k_insn_buffer_fill() also means a 2762 format error. 2763 2764 * ic/m68k/m68020.c (_tme_m68020_rte): A zero returned by 2765 tme_m68k_sequence_fill() or tme_m68k_insn_buffer_fill() also means a 2766 format error. 2767 2768 * ic/m68k/m68k-execute.c ic/m68k/m68k-impl.h 2769 ic/m68k/m68k-insns-auto.sh ic/m68k/m68k-insns.c 2770 ic/m68k/m68k-misc-auto.sh ic/m68k/m68k-misc.c: 2771 2772 Although I hate doing this, many changes to convert the m68k 2773 emulation to the new TLB and memory discipline. This has mainly 2774 affected fast instruction fetching and memory access. Fast 2775 instruction fetches now happen directly into the instruction buffer, 2776 with some optimizations to lessen the penalty for that. Fast 2777 fetches are now kept entirely out of the transfer accounting, and 2778 the functions that empty and fill the instruction buffer from an 2779 exception frame are also simpler now. 2780 All memory access functions now busy and unbusy a TLB entry and use 2781 the generic memory access functions when doing fast transfers. 2782 The tme_m68k_rmw_start() and tme_m68k_rmw_finish() are completely 2783 changed for the new TLB discipline. All of the atomic instructions 2784 are also completely changed. All callouts are now wrapped in 2785 tme_m68k_callout_unlock() and tme_m68k_callout_relock(), which will 2786 unbusy and rebusy any instruction TLB entry for the fast executor, 2787 and poison the fast executor if that TLB entry is now invalid. 2788 2789Thu Feb 15 02:15:41 2007 Matthew Fredette <fredette@alum.mit.edu> 2790 2791 * generic/keyboard.c (_tme_keysym_state_get): 2792 (tme_keyboard_buffer_in_macro): 2793 (tme_keyboard_buffer_out_map): 2794 (tme_keyboard_buffer_out_mode): 2795 (_tme_keyboard_buffer_in2): 2796 (_tme_keyboard_buffer_in0): Use tme_keyboard_hash_data_from_keyval() 2797 to convert a tme_keyboard_keyval_t to a tme_hash_data_t. 2798 2799 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_x11_new): 2800 (_tme_gtk_keyboard_key_event): Use 2801 tme_keyboard_hash_data_from_keyval() and 2802 tme_keyboard_hash_data_to_keyval() to convert between 2803 tme_keyboard_keyval_t and tme_hash_data_t. 2804 2805 * machine/sun/sun-bwtwo.c: Removed much code, which became the new 2806 generic Sun framebuffer code. The remaining bwtwo code now uses this 2807 generic support. Added support for the SBus bwtwo. 2808 2809 * machine/sun/sun-cgtwo.c (_tme_suncg2_validate_bitmaps): 2810 (_tme_suncg2_validate_pixmap): Don't attempt to translate using 2811 unsigned longs on 64-bit hosts. 2812 (_tme_suncg2_mode_change): Don't try to make any sense of the case 2813 where the pixel colors don't select any bitmap. In this case, or when 2814 multiple bitmaps seem to be selected, just display the pixmap. 2815 2816 * machine/sun2/sun2-control.c (_TME_SUN2_REG_ACCESSED): Silence a 2817 warning about comparing an unsigned quantity to be greater than or 2818 equal to zero. This would happen on 64-bit big-endian systems, due to 2819 their particular struct tme_ic register layout. 2820 2821 * machine/sun2/sun2-mmu.c (_tme_sun2_mmu_reset): Now busy and 2822 unbusy-fill the reset TLBs, so they are marked valid. 2823 2824 * machine/sun4/sun4-impl.h: Added a prototype for _tme_sun4_reset(). 2825 2826 * machine/sun4/sun4-mainbus.c (_tme_sun4_reset): Added. 2827 (_tme_sun4_command): Now use _tme_sun4_reset() to do the reset. 2828 (tme_machine_sun4): Fixed the usage string. 2829 2830 * machine/sun4/sun44c-control.c (_tme_sun44c_control_cycle_handler): A 2831 write to the software reset bit in the enable register clears all 2832 other bits in the register, and now call _tme_sun4_reset() to do the 2833 reset. 2834 2835 * scsi/scsi-bus.c (_tme_scsi_bus_cycle): Skip any SCSI connection that 2836 isn't waiting on any events and has no actions to take. 2837 2838 * tme/hash.h: Added macros for converting between tme_hash_data_t and 2839 some integral types. 2840 2841 * tme/generic/ethernet.h: Define some Ethernet packet types. 2842 2843 * tme/generic/keyboard.h: Added macros to convert between a keyval and 2844 a tme_hash_data_t. 2845 2846 * tme/scsi/scsi-cdb.h: Define extended sense key, ASC, and ASCQ 2847 values. Define struct tme_scsi_device_mode_blocks and give a 2848 prototype for tme_scsi_device_mode_select_data(). 2849 2850Mon Feb 12 23:50:36 2007 Matthew Fredette <fredette@alum.mit.edu> 2851 2852 * generic/bus.c (tme_bus_tlb_map): Fixed a word-size bug, where the 2853 address offset was kept as a tme_bus_addr_t. Since this offset can be 2854 negative, and it's used in pointer arithmetic, it has to be a signed 2855 long. 2856 2857 * generic/fb-xlat-auto.sh (TME_FB_XLAT_SHIFT_DST): Now detect when we 2858 shifted a tme_uint32_t by 32 on an architecture where SHIFTMAX_INT32_T 2859 is less than 32, and force the shifted result to zero. 2860 2861 * ic/ncr5380.c (_tme_ncr5380_bus_tlb_fill): Fixed a bug where we 2862 wouldn't notice a TLB that was invalid. 2863 2864 * ic/ieee754/ieee754-misc-auto.sh (tme_ieee754_${precision}_value_builtin_set): 2865 When rewriting x to be an infinity, don't set the float format until 2866 the end, because we still need to test the original format x's sign. 2867 After converting a native result to the best native format for the 2868 IEEE754 precision, don't forget to update x's float format. 2869 (tme_ieee754_${precision}_value_to_builtin): When the format has an 2870 explicit integer bit, don't treat it as a fraction bit when the 2871 exponent is the biased maximum. 2872 2873 * ic/m68k/m68k-bus-auto.sh: Fixed a bug where tme_m68k_router_32 was 2874 defined static. 2875 2876 * ic/sparc/sparc-misc-auto.sh: Make sure that TME_SPARC_IREG_FPX is 2877 aligned to four, since it is often used as a register pair, and the 2878 ldd/std functions expect the first register of a pair (and later, some 2879 quad load/store functions) to be aligned. 2880 2881 * machine/sun/sun-si.c (_tme_sun_si_tlb_fill_regs): Fixed a bug where 2882 we were filling TLBs that supported fast reading. We can't support 2883 fast reading, because we have to fault on byte accesses, to support 2884 the SunOS sc/si probes. 2885 2886Tue Jan 30 22:57:08 2007 Matthew Fredette <fredette@alum.mit.edu> 2887 2888 * ic/am7990.c (_tme_am7990_init): Now log the init. Fixed a bug where 2889 we wouldn't start reading the Ethernet again after exiting loopback 2890 mode. 2891 (_tme_am7990_start): Now log the start. 2892 (_tme_am7990_receive): Append dummy CRC bytes to each received frame. 2893 Log receive MISS and BUFF errors. 2894 (_tme_am7990_transmit): Log transmit BUFF errors. 2895 (_tme_am7990_bus_cycle): Log writes to CSRs other than CSR0. 2896 2897Sun Jan 21 15:45:01 2007 Matthew Fredette <fredette@alum.mit.edu> 2898 2899 * libtme/misc.c (tme_misc_tokenize): 2900 (_tme_misc_number_parse): Don't use the ctype macros with a char, 2901 since it will be sign-extended to an int. 2902 2903 * libtme/module.c (tme_module_open): Don't use the ctype macros with a 2904 char, since it will be sign-extended to an int. 2905 2906 * serial/serial-kb.c (tme_serial_,kb,keyboard): Don't use the ctype 2907 macros with a char, since it will be sign-extended to an int. 2908 2909Fri Jan 19 01:01:07 2007 Matthew Fredette <fredette@alum.mit.edu> 2910 2911 * host/gtk/gtk-display.h: In struct tme_gtk_display, track the next 2912 keysym to try in the unused keysym allocator. 2913 2914 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Don't consider a 2915 conversion of a string to a keysym successful unless the keysym 2916 reverses to that same string. 2917 Fixed a bug in the code that tries to allocate an unused keysym for an 2918 unknown string, where we would repeatedly allocate the first unused 2919 keysym over and over again. 2920 2921 * ic/sparc/sparc-impl.h: Increased the size of the ITLB hash. 2922 2923 * ic/sparc/sparc-insns-auto.sh: Now emit code in the load and store 2924 functions to track DTLB fills under _TME_SPARC_STATS. 2925 2926 * machine/sun/sun-keyboards.txt: Added a map for the US type 4 2927 keyboard. 2928 2929 * scsi/cdrom-tme.c: 2930 * scsi/scsi-cdrom.c: 2931 * tme/scsi/scsi-cdrom.h: Added. 2932 2933 * scsi/scsi-device.c (tme_scsi_device_check_condition): Added. 2934 2935 * tme/scsi/scsi-device.h: Added a prototype for 2936 tme_scsi_device_check_condition(). 2937 2938Thu Jan 18 02:15:49 2007 Matthew Fredette <fredette@alum.mit.edu> 2939 2940 * tme/common.h: Added definitions of __tme_predict_true() and 2941 __tme_predict_false() for gcc>=2.96. 2942 2943Sun Jan 14 16:53:04 2007 Matthew Fredette <fredette@alum.mit.edu> 2944 2945 * generic/bus-el.c (tme_generic,bus): Fixed a printf string. Some 2946 changes to silence gcc -Wuninitialized. 2947 2948 * ic/sparc/Makefile.am: Added sparc-fpu-auto.sh to EXTRA_DIST. 2949 2950 * ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): In NetBSD 3.x, 2951 the idle loop wrpsrs use %l1 instead of %g1, and the annulled wrpsr 2952 writes IPL_SCHED << 8, not PSR_PIL. 2953 2954 * ic/sparc/sparc-fpu-auto.sh: Removed the parameter lists from some 2955 macro #undefs. 2956 2957 * ic/sparc/sparc-fpu.c (tme_sparc_fpu_new): Removed the parameter list 2958 from a macro #undef. 2959 2960 * ic/sparc/sparc-insns.c (tme_sparc32_wrpsr): Updated the 2961 netbsd32-type-0 idle type comment. 2962 2963 * ic/sparc/sparc-misc.c (tme_sparc_new): Increased the burst size. 2964 2965 * libtme/threads-sjlj.c (tme_sjlj_yield) [HAVE_GTK]: Fixed a bug where 2966 we could round the number of microseconds to a whole second and leave 2967 it that way. 2968 2969 * machine/Makefile.am: Added the sun4 directory to DIST_SUBDIRS. 2970 2971 * machine/sun/sun-fb.c (tme_bt458_omap_best): Fixed a bug caught by 2972 gcc -Wuninitialized. 2973 2974 * scsi/Makefile.am: Added scsi-cdrom.c and cdrom-tme.c to 2975 tme_scsi_la_SOURCES. 2976 2977 * scsi/scsi-tape.c (_tme_scsi_tape_mode_select_data): Fixed a bug 2978 caught by gcc -Wuninitialized. 2979 2980 * tme/scsi/Makefile.am: Now install scsi-cdrom.h. 2981 2982Mon Jan 08 00:59:04 2007 Matthew Fredette <fredette@alum.mit.edu> 2983 2984 * bus/Makefile.am: Added sbus to DIST_SUBDIRS. 2985 2986 * bus/sbus/Makefile.am: 2987 * bus/sbus/sun-fbs4.c: 2988 * tme/ic/bt458.h: Added. 2989 2990 * generic/scsi.c (tme_scsi_phase_resid): Added. 2991 2992 * ic/Makefile.am: Added sparc to DIST_SUBDIRS. 2993 Now build tme_ic_ncr53c9x.la, tme_ic_mk48txx.la, tme_ic_nec765.la, 2994 tme_ic_am7930.la, tme_ic_am7990.la, and tme_ic_lsi64854.la. 2995 2996 * ic/ncr53c9x.c: Added tme_ncr53c9x_transfer_resid_detect_state to 2997 struct tme_ncr53c9x, for detecting the SCSI transfer residual while 2998 data is being transferred. 2999 (_tme_ncr53c9x_cs_monitor_phase): Now take a new argument that will 3000 force the phase to be checked, even if there isn't any SCSI transfer 3001 residual. All callers changed. 3002 (_TME_NCR53C9X_CS_MONITOR_PHASE): Now check the phase immediately. 3003 (_TME_NCR53C9X_CS_TRANSFER): Now initialize the transfer residual 3004 detect state to zero. 3005 (_tme_ncr53c9x_update): In TME_NCR53C9X_CMD_TRANSFER, fixed bugs for 3006 the MESSAGE IN phase, and simplified the sequence for the MESSAGE OUT 3007 phase. Fixed many bugs for all of the target selection commands. 3008 (_tme_ncr53c9x_callout): When we're detecting the transfer residual 3009 while data is being transferred, we can't transfer more than one byte 3010 at a time from a TLB that only supports slow reading, and also call 3011 tme_scsi_phase_resid() to do the detection. 3012 Don't hold ACK on a transfer unless it definitely includes the last 3013 byte of the transfer. 3014 (_tme_ncr53c9x_scsi_cycle): Fixed a bug where we wouldn't note an 3015 automatically asserted ACK or ATN in the active SCSI cycle. 3016 (_tme_ncr53c9x_bus_cycle): Fixed a bug where we wouldn't add to the 3017 data FIFO at the head. 3018 3019 * ic/nec765.c (_tme_nec765_bus_cycle): More correctly alias reads and 3020 writes to register number two on an i82072 to the MSR and DRS, 3021 respectively. This allows both the NetBSD fdc and the SunOS fd 3022 drivers to work. 3023 3024 * ic/sparc/sparc-execute.c: Now define tme_sparc_idle_type_pc 3025 appropriately for the version. 3026 (_TME_SPARC_EXECUTE_NAME): When we begin a new instruction burst, if 3027 the first instruction in the burst is the beginning of the idle loop, 3028 go idle. 3029 Check an annulled instruction for the netbsd32-type-0 idle type. 3030 Check a branch for the sunos32-type-0 idle type. Fixed a bug where 3031 repeated annulled instructions could cause the instruction burst to 3032 never finish. 3033 3034 * ic/sparc/sparc-fpu-auto.sh: Avoid a gcc -Wuninitialized warning by 3035 setting fpreg_rd_format even for an unimplemented operation. 3036 3037 * ic/sparc/sparc-impl.h: Added support for idle types. 3038 3039 * ic/sparc/sparc-insns-auto.sh: In the slow read and write functions, 3040 fixed a bug found by gcc -Wuninitialized in the unusual case where 3041 this cycle is part fast, part slow, where we would use use an 3042 uninitialized resid. 3043 3044 * ic/sparc/sparc-insns.c (tme_sparc32_rdasr): To avoid a gcc 3045 -Wuninitialized warning, for an unimplemented rdasr set value to zero 3046 even though we abort(). 3047 (tme_sparc32_rdpsr): Added support for the sunos32-type-0 idle type. 3048 (tme_sparc32_wrpsr): Added support for the sunos32-type-0 and 3049 netbsd32-type-0 idle types. 3050 3051 * ic/sparc/sparc-misc.c (_tme_sparc_command): 3052 (tme_sparc_do_idle): tme_sparc_fetch_nearby): Added. 3053 (tme_sparc_new): Now set _tme_sparc_command to handle commands. 3054 Poison the initial idle type state. 3055 3056 * machine/sun/sun-cgtwo.c: Use the new generic tme_sunfb_ functions 3057 and macros instead of the older tme_sun_fb_p4_ functions. 3058 3059 * machine/sun/sun-fb.c: Replaced the old tme_sun_fb_p4_ functions with 3060 the new generic tme_sunfb_ functions, and added support for more 3061 sizes. 3062 Added all of the new generic Sun framebuffer support, including some 3063 out-of-place Bt458 support. 3064 (tme_sun_cgthree): Added. 3065 3066 * machine/sun/sun-fb.h: Removed most of the P4-specific definitions. 3067 Added many definitions for a generic Sun framebuffer, including some 3068 P4 and S4 specifics. 3069 3070 * machine/sun4/sun4-mainbus.c (tme_machine_sun4,bwtwo): 3071 (tme_machine_sun4,si): 3072 (tme_machine_sun4,cgtwo): Removed. 3073 3074 * scsi/scsi-bus.c (_tme_scsi_bus_cycle): Added an assert to the 3075 bulk-copy code to check that the target is always in sequence step 3076 one. 3077 3078 * scsi/scsi-device.c (_tme_scsi_device_cycle): Now log the message in 3079 a MESSAGE_OUT phase. Now extended messages have their own dispatch 3080 array. 3081 (tme_scsi_device_target_mc): Added. 3082 (tme_scsi_device_new): By default, a new device will reject 3083 synchronous negotiation. 3084 3085 * scsi/scsi-msg.c (tme_scsi_device_msg_target_reject): Added. 3086 3087 * tme/generic/scsi.h: Added the prototype for tme_scsi_phase_resid(). 3088 3089 * tme/ic/Makefile.am: Added bt458.h to tmeicinclude_HEADERS. 3090 3091 * tme/machine/sun.h: Added a prototype for tme_sun_cgthree(). 3092 3093 * tme/scsi/scsi-device.h: Now define TME_SCSI_DEVICE_DO_MSG_EXT(). 3094 Added a dispatch array for extended messages to struct 3095 tme_scsi_device. 3096 Now declare tme_scsi_device_target_mc(). 3097 3098 * tme/scsi/scsi-msg.h: Now define TME_SCSI_MSG_EXT_SDTR. Now declare 3099 tme_scsi_device_msg_target_reject(). 3100 3101Sun Nov 26 16:37:55 2006 Matthew Fredette <fredette@alum.mit.edu> 3102 3103 * generic/bus.c (tme_bus_tlb_fill): Fixed bugs in the support for bus 3104 connections with nonzero sourced-address masks. 3105 3106 * ic/am7930.c: 3107 * ic/am7990.c: Added. 3108 3109 * ic/mk48txx.c (_tme_mk48txx_bus_cycle): Added support for a 3110 platform's year zero. 3111 3112 * ic/ieee754/ieee754-misc-auto.sh: Removed the simple 3113 tme_ieee754_PRECISION_to_int32 functions in favor of the ops versions. 3114 3115 * ic/ieee754/ieee754-ops-auto.sh: Now emit ops for from_int32 and 3116 from_int64. Now allow an op to override the type of its first source 3117 operand. Made the generation of the preprocessor condition more 3118 general. Added some more support for integral source operands. Fixed 3119 a bug in substituting in softfloat function names. 3120 3121 * ic/sparc/sparc-fpu-auto.sh: Fixed the ops that convert between 3122 integer and floating-point to use the regular IEEE754 ops. 3123 3124 * machine/sun4/sun4-mainbus.c (tme_machine_sun4,clock): Now set the 3125 sun4 year zero in the mk48txx socket. 3126 3127 * scsi/scsi-bus.c (_tme_scsi_bus_callout): Now clear the actions and 3128 events for a connection before they are called out, to prevent calling 3129 them out again. 3130 Added support for the cycle marker bit. 3131 (_tme_scsi_bus_cycle): Added support for the cycle marker bit. Added 3132 support for TME_SCSI_ACTION_SELECT_WITH_ATN and 3133 TME_SCSI_ACTION_DMA_INITIATOR_HOLD_ACK. Moved the bulk DMA copy code 3134 inside the slow initiator DMA code. This allows the normal target and 3135 initiator slow DMA code to always handle the boundaries of a transfer, 3136 which (especially in the initiator hold ACK case) can be important. 3137 3138 * scsi/scsi-tape.c: Added the tme generic SCSI-1 tape to the list. 3139 (tme_scsi_tape_cdb_xfer0): Added a big hack to quickly fix NetBSD PR 3140 pkg/34536. 3141 (_tme_scsi_tape_mode_select_data): Added. 3142 (tme_scsi_tape_cdb_block_limits): 3143 (tme_scsi_tape_cdb_mode_select): Implemented. 3144 3145 * tme/common.h: Replaced the old TME_FIELD_MASK_EXTRACTS macros with a 3146 single smarter version. 3147 Now TME_FIELD_MASK_DEPOSITU masks the value being deposited. 3148 3149 * tme/memory.h [!TME_THREADS_COOPERATIVE]: Now define 3150 TME_MEMORY_BUS_BOUNDARY to be sizeof(tme_uint8_t), to avoid some 3151 compiler warnings when the previous value of zero was used in some 3152 comparisons. 3153 3154 * tme/generic/ethernet.h: Fixed a bug where the source address field 3155 was named tme_ethernet_header_size. 3156 3157 * tme/generic/scsi.h: Renumbered the SCSI actions to allow for future 3158 expansion, and also to add TME_SCSI_ACTION_DMA_INITIATOR_HOLD_ACK, 3159 TME_SCSI_ACTION_SELECT_WITH_ATN, and TME_SCSI_ACTION_CYCLE_MARKER. 3160 3161 * tme/ic/mk48txx.h: Added tme_mk48txx_socket_year_zero to the socket 3162 structure. 3163 3164 * tme/scsi/scsi-device.h: Expanded tme_scsi_device_data to 256 bytes, 3165 to hold a large MODE SELECT parameter list. 3166 3167Thu Nov 16 02:54:40 2006 Matthew Fredette <fredette@alum.mit.edu> 3168 3169 * generic/bus-el.c (_tme_bus_connections_new): Added support for the 3170 'slot', 'offset', 'controller', and 'dma-offset' arguments. 3171 (TME_ELEMENT_SUB_NEW_DECL(tme_generic,bus)): Added real argument 3172 processing, and added support for the arguments that define bus slots. 3173 3174 * generic/bus.c (tme_bus_tlb_fill): If this bus has a controller, and 3175 the TLB fill request isn't from the controller, pass the TLB fill on 3176 to the controller. 3177 (tme_bus_connection_make): Added support for making a connection to a 3178 bus controller. 3179 3180 * generic/ethernet.c (tme_ethernet_chunks_copy): Made the destination 3181 chunks structures const. 3182 (tme_ethernet_crc32_el): Added. 3183 3184 * ic/lsi64854.c ic/ncr53c9x.c ic/nec765.c machine/sun4/sun4-fdc.c 3185 scsi/tape-tme.c tme/ic/nec765.h: 3186 3187 Added. 3188 3189 * ic/ncr5380.c (_tme_ncr5380_signal): Now use TME_BUS_SIGNAL_WHICH() 3190 to remove the flags from a bus signal. 3191 3192 * ic/z8530.c (_tme_z8530_channel_reset): Now have 3193 TME_Z8530_RR1_ALL_SENT in the reset value for RR1. 3194 (_tme_z8530_bus_cycle): Now clear TME_Z8530_RR1_ALL_SENT when transmit 3195 data is written. 3196 (_tme_z8530_read): Now set TME_Z8530_RR1_ALL_SENT when all transmit 3197 data has been written. 3198 3199 * ic/ieee754/ieee754-misc-auto.sh: Now emit prototypes for the 3200 functions that convert floats to 32-bit integers. 3201 3202 * ic/ieee754/ieee754-misc.c (tme_ieee754_fpreg_format): Added. 3203 3204 * ic/sparc/cy7c601.c (TME_ELEMENT_X_NEW_DECL(tme_ic_,sparc,cy7c601)): 3205 The common CY7C601 has a PSR version of 1. Use the default slow 3206 instruction fetch function. 3207 3208 * ic/sparc/mb86900.c (TME_ELEMENT_X_NEW_DECL(tme_ic_,sparc,mb86900)): 3209 Use the default slow instruction fetch function. 3210 3211 * ic/sparc/sparc-execute.c (_TME_SPARC_EXECUTE_NAME): Now save the ASI 3212 mask for instructions in the CPU state. 3213 Now fetch all instructions with tme_memory_bus_read32(), which gives 3214 all needed behavior (when threads are cooperative, 3215 tme_memory_atomic_read32 means a function call). Now log call 3216 instructions, which makes reconstructing code flow possible. 3217 3218 * ic/sparc/sparc-fpu.c (tme_sparc_fpu_new): Fixed a bug where the FPU 3219 version wasn't being put into the FSR. 3220 3221 * ic/sparc/sparc-impl.h: Now define TME_SPARC_SLOW_FLAG_INSN and 3222 TME_SPARC_SLOW_FLAG_NO_FAULTS for the slow load and store functions. 3223 Now _tme_sparc_bus_fault/tme_sparc32_bus_fault get the flags passed to 3224 the slow load/store function. Added a prototype for 3225 tme_sparc32_fetch_slow(). 3226 3227 * ic/sparc/sparc-insns-auto.sh: For the instructions that have 3228 add-style condition codes, changed the calculation of C to match the 3229 V8 architecture manual. In the memory access instructions, instead of 3230 using a tme_memory_atomic_ function, use a tme_memory_bus_ function, 3231 which is how it should always have been. Log jmpl instructions that 3232 act as call or return instructions, which makes reconstructing code 3233 flow possible. In the slow load/store functions, use the ASI mask for 3234 instructions if the instruction flag is specified, and allow the 3235 CPU-specific bus fault handler to cancel a fault. 3236 3237 * ic/sparc/sparc-insns.c (tme_sparc32_rett): Fixed a bug where a user 3238 PS wasn't restored into S correctly. Fixed a bug where we wouldn't 3239 redispatch after changing the PSR. 3240 (tme_sparc32_ticc): Fixed a bug where we thought the trap number was 3241 in rd, instead of from rs1 + rs2. 3242 3243 * ic/sparc/sparc-misc.c (tme_sparc32_fetch_slow): Added. 3244 (tme_sparc32_bus_fault): When a fault happens during an instruction 3245 fetch, ignore the fault if we're supposed to, otherwise return an 3246 instruction access exception instead of a data access exception. 3247 3248 * libtme/module.c (_tme_modules_find): Fixed a bug where we wouldn't 3249 check the LTDL_SHLIBPATH_VAR directory for modules. 3250 3251 * libtme/threads-sjlj.c (tme_sjlj_cond_sleep_yield): Added. 3252 3253 * machine/sun/sun-mmu.c: In struct tme_sun_mmu, added members for MMUs 3254 with an address space hole. 3255 (tme_sun_mmu_new): If this MMU has an address space hole, adjust the 3256 number of address bits and save a mask with the last significant 3257 address bit set. 3258 (_tme_sun_mmu_lookup): If this MMU has an address space hole, and the 3259 address to look up is in the hole, return the hole PTE. 3260 (tme_sun_mmu_pte_set): 3261 (tme_sun_mmu_segmap_get): 3262 (tme_sun_mmu_segmap_set): Handle addresses in an address space hole. 3263 (tme_sun_mmu_tlb_fill): Fixed a bug in the previous commit that would 3264 not remember TLBs filled from invalid PTEs for later invalidation when 3265 those PTEs are made valid. However, don't remember TLBs filled in the 3266 address hole. 3267 3268 * machine/sun/sun-si.c (_tme_sun_si_tlb_fill): Now use 3269 tme_bus_tlb_initialize() to make a TLB entry passed on the stack 3270 invalid, since tme_bus_tlb_invalidate() assumes that the TLB's locks 3271 have been constructed. 3272 3273 * machine/sun4/Makefile.am: Added sun4-fdc.c to 3274 tme_machine_sun4_la_SOURCES. 3275 3276 * machine/sun4/sun4-mainbus.c (_tme_sun4_connections_new): Only fill 3277 the TLB set allocator on a bus connection for an actual bus, not the 3278 other devices. 3279 3280 * machine/sun4/sun4-timer.c (_tme_sun4_timer_reset): Fixed a 3281 TME_SUN4_IS_SUN4C to TME_SUN4_IS_SUN44C. 3282 (_tme_sun4_timer_cycle_control): Fixed a bug where we had the counter 3283 values counting down, not up. Fixed a TME_SUN4_IS_SUN4C to 3284 TME_SUN4_IS_SUN44C. Now log for all registers, and make the minimum 3285 log level much higher to filter out these messages. 3286 3287 * machine/sun4/sun44c-mmu.c (_tme_sun44c_buserr_log): On a sun4c, add 3288 0xf0000000 to the physical address displayed. 3289 (_tme_sun44c_tlb_fill_mmu): 3290 (_tme_sun44c_tlb_fill_pte): Before a TLB has been filled, it has no 3291 fault handlers, and since the TLB might be on the stack its handler 3292 count is garbage, so always thread the initiator's bus connection down 3293 as the first fault handler private value. 3294 3295 * scsi/Makefile.am: Added tape-tme.c to tme_scsi_la_SOURCES. 3296 3297 * scsi/scsi-device.c (tme_scsi_device_target_phase): Bumped the log 3298 level for the various data phases so it's easier to filter the 3299 messages out. 3300 (_tme_scsi_device_cycle): Fixed a bug in handling the length byte of 3301 an extended message. 3302 3303 * serial/Makefile.am: Added serial-sink.c to tme_serial_kb_la_SOURCES. 3304 3305 * tme/Makefile.am: Replaced atomics.h with memory.h in 3306 pkginclude_HEADERS. 3307 3308 * tme/connection.h: Now define TME_CONNECTION_BUS_SPARC. 3309 3310 * tme/threads.h: Now define TME_THREADS_COOPERATIVE to TRUE. Now 3311 define tme_thread_suspend_others() and tme_thread_resume_others(). 3312 [!TME_NO_DEBUG_LOCKS]: When __FILE__ and __LINE__ aren't defined, 3313 fixed a bug where we would pass in NULL for __LINE__, instead of zero. 3314 Added a prototype for tme_sjlj_cond_sleep_yield(), and the 3315 tme_cond_sleep_yield() macro. Removed the old atomic memory access 3316 support. 3317 3318 * tme/generic/bus.h: Now define 3319 TME_BUS_CONNECTION_INT_FLAG_ADDRESSABLE and 3320 TME_BUS_CONNECTION_INT_FLAG_CONTROLLER. Now define struct 3321 tme_bus_slot. In struct tme_bus, keep a list of struct tme_bus_slot, 3322 and track up to one bus connection that is the "controller" of the 3323 bus. 3324 3325 * tme/generic/ethernet.h: Added a const to the prototype for 3326 tme_ethernet_chunks_copy(), and added a prototype for 3327 tme_ethernet_crc32_el(). 3328 3329 * tme/generic/ic.h: Quadrupled the value of TME_IC_REGS_SIZE, to 3330 support the SPARC emulations and their large register sets. In struct 3331 tme_ic, fixed the definitions for the 64-bit register members, to 3332 divide the TME_IC_REGS_SIZE by eight instead of sixteen. 3333 3334 * tme/ic/Makefile.am: Added sparc.h, mk48txx.h, and nec765.h to 3335 tmeicinclude_HEADERS. 3336 3337 * tme/ic/ieee754.h: Now define macros describing an IEEE754 register 3338 file. Added a prototype for tme_ieee754_fpreg_format(). 3339 3340 * tme/machine/sun.h: Now define TME_SUN_IDPROM_OFF_MACHTYPE, and 3341 macros for some possible machine and architecture types. In struct 3342 tme_sun_mmu_info, added tme_sun_mmu_info_topindex_bits, for describing 3343 either the number of top address bits for region, or for the address 3344 hole. 3345 3346 * tme/scsi/scsi-tape.h: In struct tme_scsi_tape, added members for 3347 describing the minimum, maximum, and current block sizes. 3348 3349 * tmesh/tmesh-cmds.c (_tmesh_command_alias): Added. 3350 (tmesh_eval): Now dispatch an 'alias' command. 3351 3352 * tmesh/tmesh-impl.h: Now define TMESH_COMMAND_ALIAS. 3353 3354 * tmesh/tmesh-input.y: Added support for scanning and parsing the new 3355 'alias' command. 3356 3357Sat Sep 30 13:48:38 2006 Matthew Fredette <fredette@alum.mit.edu> 3358 3359 * bus/multibus/3c400.c bus/multibus/sun-mie.c bus/multibus/sun-sc.c 3360 generic/bus-device-auto.sh generic/bus-device.c generic/bus-el.c 3361 generic/bus.c host/posix/posix-memory.c host/posix/posix-serial.c 3362 ic/am9513.c ic/i825x6.c ic/isil7170.c ic/mm58167.c ic/ncr5380.c 3363 ic/z8530.c libtme/Makefile.am libtme/memory-auto.sh 3364 machine/sun/sun-bwtwo.c machine/sun/sun-cgtwo.c 3365 machine/sun/sun-mmu.c machine/sun/sun-obie.c machine/sun/sun-si.c 3366 machine/sun2/sun2-impl.h machine/sun2/sun2-mmu.c 3367 machine/sun3/sun3-impl.h machine/sun3/sun3-mmu.c tme/connection.h 3368 tme/memory.h tme/tme.h tme/generic/bus-device.h tme/generic/bus.h 3369 tme/ic/m68k.h tme/machine/sun.h: 3370 3371 Changed how atomic values are handled. Removed the TME_ATOMIC_ set 3372 of macros, which may or may not use a rwlock to serialize access to 3373 a value, and added the tme_memory_atomic_ set of macros, which 3374 always requires an rwlock argument. 3375 This tme_memory_atomic_ set of macros also takes a compile-time 3376 minimum alignment hint, covers a wide range of math operations, and 3377 is guaranteed to work atomically for any access, no matter what the 3378 actual alignment. 3379 Added the tme_memory_bus_ set of macros, which work just like the 3380 tme_memory_atomic_ macros but only within a certain bus size - i.e., 3381 if a 32-bit bus size is specified, and an access crosses one 3382 32-bit-aligned address boundary, the access will be split into two 3383 atomic accesses. 3384 The tme_memory_atomic_ and tme_memory_bus_ macros should better 3385 enable emulation on a non-cooperative threading host someday. Added 3386 the tme_memory_ set of macros, which don't access memory atomically 3387 but still take the same compile-time minimum-alignment hint and are 3388 guaranteed to work for any actual alignment. This has caused 3389 significant fallout in all TLB handling, since the first and last 3390 address fields in a TLB were previously TME_ATOMICs, and TLBs were 3391 invalidated by atomically updating these first to be greater than 3392 last. 3393 This method would not have worked in a non-cooperative threading 3394 host. First, it was impossible to update both first and last 3395 address fields simultaneously, and second, it was impossible to know 3396 if anyone was using, or had committed to using, the TLB while you 3397 were invalidating it. Without knowing that the TLB can't be used 3398 after invalidation, the invalidator can't continue and make other 3399 changes that would give incorrect behavior if the TLB *is* actually 3400 used later. 3401 So, TLBs have a new discipline. They have "busy" and "invalid" 3402 atomic flags. Before a TLB entry is used, its busy flag is marked 3403 true, and its invalid flag is checked. If the invalid flag is true, 3404 the TLB is unbusied and prepared for filling (see 3405 tme_bus_tlb_unbusy_fill() and tme_bus_tlb_invalidate() for how they 3406 synchronize and avoid interesting races), otherwise the TLB entry is 3407 valid and won't be invalidated until its busy flag is set to false. 3408 To make this truly thread-safe, someday all slow bus cycle handlers 3409 will have to take a TLB entry somehow, so they can correctly busy 3410 the TLB entry before making the access. 3411 3412 * generic/ethernet.c generic/keyboard.c generic/mouse.c 3413 libtme/element.c scsi/acb4000.c serial/serial-kb.c: 3414 3415 Now explicitly include errno.h. 3416 3417 * host/bsd/bsd-bpf.c host/posix/posix-tape.c serial/serial-kb.h 3418 serial/serial-ms.h tme/scsi/scsi-device.h: 3419 3420 Now explicitly include tme/threads.h. 3421 3422 * ic/mk48txx.c ic/sparc/Makefile.am ic/sparc/cy7c601.c 3423 ic/sparc/mb86900.c ic/sparc/sparc-bus-auto.sh 3424 ic/sparc/sparc-execute.c ic/sparc/sparc-fpu-auto.sh 3425 ic/sparc/sparc-fpu.c ic/sparc/sparc-impl.h 3426 ic/sparc/sparc-insns-auto.sh ic/sparc/sparc-insns.c 3427 ic/sparc/sparc-misc-auto.sh ic/sparc/sparc-misc.c 3428 machine/sun4/Makefile.am machine/sun4/SUN4-75 3429 machine/sun4/sun4-impl.h machine/sun4/sun4-mainbus.c 3430 machine/sun4/sun4-timer.c machine/sun4/sun44c-cache.c 3431 machine/sun4/sun44c-control.c machine/sun4/sun44c-memerr.c 3432 machine/sun4/sun44c-mmu.c serial/serial-sink.c tme/ic/mk48txx.h 3433 tme/ic/sparc.h: 3434 3435 Added. 3436 3437 * machine/sun3/sun3-mainbus.c (_tme_sun3_command): Fixed a bug where 3438 we wouldn't reset the VME bus. 3439 3440 * tme/atomics.h: Removed. 3441 3442Sun Dec 04 22:53:37 2005 Matthew Fredette <fredette@alum.mit.edu> 3443 3444 * ic/ncr5380.c: Fixed a bug in the TME_NCR5380_REG_PUT macro. 3445 (_tme_ncr5380_reg_put): Now declared static. 3446 (_tme_ncr5380_callout): Fixed a comment. Fixed a bug where we 3447 wouldn't set the residual in the SCSI DMA structure. 3448 3449 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed a bug where 3450 we would call the slow executor inside a return() statement. 3451 3452 * machine/sun/sun-cgtwo.c (_tme_suncg2_validate_bitmaps): Fixed a bug 3453 where we were processing the pixmap into the bitmaps from 3454 left-to-right, instead of from right-to-left like the individual pixel 3455 bit translation requires. 3456 3457 * machine/sun/sun-si.c (tme_sun_si): Now fail and display the usage if 3458 no si type is given. Fixed the usage string. 3459 3460Sat Jun 11 13:47:23 2005 Matthew Fredette <fredette@alum.mit.edu> 3461 3462 * machine/sun/sun-mmu.c: Removed the invalid segment member of the MMU 3463 structure, since the hardware doesn't have the notion of an invalid 3464 segment. 3465 (tme_sun_mmu_new): Now initialize the segment map with the last PMEG 3466 number. 3467 (tme_sun_mmu_pte_get): 3468 (tme_sun_mmu_pte_set): 3469 (tme_sun_mmu_segmap_set): Removed checks for the invalid segment. 3470 3471 * machine/sun2/sun2-mmu.c (_tme_sun2_mmu_new): Now zero the MMU 3472 information structure first, and don't provide the invalid segment 3473 number. 3474 3475 * machine/sun3/sun3-mmu.c (_tme_sun3_mmu_new): Now zero the MMU 3476 information structure first, and don't provide the invalid segment 3477 number. 3478 3479 * tme/machine/sun.h: Removed tme_sun_mmu_info_seginv from struct 3480 tme_sun_mmu_info. 3481 3482Sun May 15 01:24:11 2005 Matthew Fredette <fredette@alum.mit.edu> 3483 3484 * Release 0.4 out. 3485 3486 * configure.in: Fixed a bug where StaticGray, StaticColor, and 3487 PseudoColor visuals would be considered indexed. This would cause the 3488 translation functions to incorrectly try to map intensities into pixel 3489 subfields. 3490 3491Sat May 14 22:28:29 2005 Matthew Fredette <fredette@alum.mit.edu> 3492 3493 * TODO: Updated. 3494 3495 * acinclude.m4 (AC_CHECK_FUNC_LONG): Added. 3496 3497 * configure.in: Now check for sys/bswap.h, bswap16(), and bswap32(). 3498 Now check for isinff(). 3499 Instead of taking a set of host display formats in the environment 3500 variable TME_DISPLAYS, now take the configure argument 3501 --with-tme-host-displays. When debugging is disabled, to get best 3502 performance now define macros that preprocess out a lot of debugging 3503 code. Debugging now defaults to disabled. 3504 3505 * generic/float.c [!HAVE_ISINFF] (isinff): Added. 3506 3507 * host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Now initially 3508 try to allocate new colors. For any colors that fail, try to allocate 3509 best-match colors. Warn if even best-match colors could not be 3510 allocated. 3511 3512 * ic/ieee754/ieee754-misc.c: Declare more single- and double-precision 3513 constants. 3514 3515 * tme/common.h: Now include <sys/bswap.h> for the byteswapping 3516 functions. When the host is big-endian, try to use bswap16() and 3517 bswap32() for byteswapping functions, otherwise define them. Now 3518 define little-endian conversion functions on big-endian hosts. 3519 3520 * tme/generic/float.h: Corrected some HAVE_ macros to _TME_HAVE_ 3521 macros. Now include float.h and limits.h. Added a prototype for 3522 isinff(). 3523 3524Sat May 14 19:18:42 2005 Matthew Fredette <fredette@alum.mit.edu> 3525 3526 * generic/fb-xlat-auto.sh: Fixed a bug in the initialization of 3527 dst_masks_default, that was causing incorrect halving translation on 3528 PseudoColor hosts. 3529 3530 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Fixed a bug in 3531 the warning message when a keysym can't be generated by the host 3532 keyboard. 3533 3534 * ic/ieee754/Makefile.am: Added -lm to libtme_ieee754_la_LDFLAGS. 3535 3536 * ic/m68k/m68k-opmap-dump.c: 3537 * machine/sun3/sun3-carrera-eeprom.txt: Added. 3538 3539 * ic/m68k/m68k-opmap-make.pl: The previous opcode map functions were 3540 too big (or complicated?) to be compiled in a reasonable amount of 3541 time on slower machines. Now compress the functions down by 3542 initializing similar roots close to each other, and in groups whenever 3543 possible. This cuts down on the amount of params[] refilling and 3544 function calls, and decreases the size of m68k-opmap.c by almost half. 3545 3546 * machine/sun3/Makefile.am: Added sun3-carrera-eeprom.txt to 3547 examples_DATA. 3548 3549 * serial/serial-kb.c (_tme_serial_kb_connection_make): When a keyboard 3550 macro can't be parsed, instead of aborting, just log a complaint. 3551 3552Sat May 14 01:43:33 2005 Matthew Fredette <fredette@alum.mit.edu> 3553 3554 * acinclude.m4 (AC_CHECK_FLOAT_FORMAT): Fixed a tme_uint16_t, which 3555 was causing failures on big-endian systems. 3556 3557 * ic/ieee754/softfloat-tme.c: Swapped some declarations that were with 3558 the wrong comments. 3559 3560 * tme/ic/ieee754.h: Declare more single- and double-precision 3561 constants. 3562 3563Wed May 11 00:15:42 2005 Matthew Fredette <fredette@alum.mit.edu> 3564 3565 * dist/softfloat/softfloat/bits64/softfloat-macros (add192): 3566 (sub192): Fixed some gcc3 signed/unsigned comparison warnings. 3567 3568 * dist/softfloat/softfloat/bits64/softfloat.c (roundAndPackFloatx80): 3569 Fixed a gcc3 signed/unsigned comparison warning. 3570 3571 * ic/i825x6.c (_tme_i825x6_callout_ru): 3572 (_tme_i825x6_callout): Fixed some gcc3 signed/unsigned comparison 3573 warnings. 3574 3575 * ic/ieee754/ieee754-misc-auto.sh: Fixed a gcc3 signed/unsigned 3576 comparison warning. 3577 3578 * machine/sun3/sun3-mainbus.c (_tme_sun3_bus_intack): Make signal 3579 unsigned, to fix gcc3 signed/unsigned comparison warnings. 3580 3581 * tme/generic/float.h (tme_float_is_negative): Fixed all conditional 3582 arms to be conditional expressions, to keep the type of the whole 3583 expression int. 3584 3585Tue May 10 11:15:26 2005 Matthew Fredette <fredette@alum.mit.edu> 3586 3587 * machine/sun3/SUN3-CARRERA: Disable obie0 by default. 3588 3589Tue May 10 00:38:19 2005 Matthew Fredette <fredette@alum.mit.edu> 3590 3591 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_attach): Connect the 3592 key_press and key_release events with gtk_signal_connect_after, so we 3593 can stop the event from propagating up to parents, where a GtkWindow 3594 parent will do strange things with arrow key presses. 3595 3596 * ic/isil7170.c (_tme_isil7170_bus_cycle): Fixed an off-by-one bug in 3597 the month register. 3598 3599 * machine/sun3/SUN3-CARRERA: Disable the serial console by default. 3600 3601Mon May 09 02:01:02 2005 Matthew Fredette <fredette@alum.mit.edu> 3602 3603 * machine/sun/sun-cgtwo.c (_tme_suncg2_bus_cycle_regs): Wrap the 3604 rasterop register log in #ifndef TME_NO_LOG, since the rasterop 3605 register names array doesn't exist otherwise. 3606 3607Mon May 09 01:59:03 2005 Matthew Fredette <fredette@alum.mit.edu> 3608 3609 * generic/ethernet.c (tme_ethernet_chunks_copy): Fixed a bug where the 3610 size of the destination buffer would get loaded with the size of the 3611 source buffer. 3612 3613 * generic/fb.c (_tme_fb_xlat_colors_get_set): Fixed a bug where the 3614 number of colors allocated wasn't being saved. 3615 3616 * ic/i825x6.c (_tme_i825x6_fbl_refill): Now tolerate a Receive Buffer 3617 with zero size. 3618 (_tme_i825x6_callout_ru): Initialize rbd_size early, since its value 3619 is decreased early when a fake receive buffer is made from the RFD 3620 Ethernet header space. 3621 3622Sat Apr 30 15:22:25 2005 Matthew Fredette <fredette@alum.mit.edu> 3623 3624 * configure.in: Now determine the default display depth with xwininfo 3625 -root, assuming that the root window is at the default depth. If the 3626 depth is greater than one, also determine the visual class and any 3627 subfield masks, and include this information in the destination image 3628 key. Add support for color framebuffer images on the sun3. 3629 3630 * generic/bus.c (_tme_bus_cycle_xfer_resp_least_lane): 3631 (tme_bus_cycle_xfer_reg): Added. 3632 3633 * generic/fb-xlat-auto.sh: Added support for color source and 3634 destination images. 3635 3636 * generic/fb.c (tme_fb_xlat_best): 3637 (tme_fb_xlat_is_optimal): Now consider source image class, mapping 3638 type, mapping size, and subfield masks, and destination image mapping 3639 type and subfield masks. 3640 (_tme_fb_xlat_colors_get_set): 3641 (tme_fb_xlat_colors_get): 3642 (tme_fb_xlat_colors_set): Added. 3643 3644 * host/gtk/gtk-display.h: Removed the monochrome invert mask from 3645 struct tme_gtk_display. Inversion is now specified by the 3646 framebuffer. 3647 3648 * host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Added color 3649 support. Now we determine the destination image class, mapping, and 3650 any subfield masks. We choose a translation function based on image 3651 classes, mappings, and subfield masks, and allocate colors on behalf 3652 of the translation function. 3653 3654 * ic/m68k/m68020.c (_tme_m68020_exception): Fixed a bug where a 32-bit 3655 fetch wasn't marking the B stage as faulted. 3656 3657 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed a bug with 3658 the instruction buffer. Before, when the slow executor would take a 3659 fault in the middle of a 32-bit instruction fetch, the successfully 3660 fetched first 16 bits wouldn't get put in the instruction buffer by 3661 the fault processing, because a fetch was only accounted for once it 3662 fully succeeded. When the fetch was resumed, the first 16 bits was 3663 lost. Now, a slow executor fetch is accounted for before it begins, 3664 which guarantees that any partially fetched instruction makes it into 3665 the instruction buffer. 3666 3667 * ic/m68k/m68k-misc-auto.sh: Now, we update the instruction buffer 3668 fetch total and sizes values before we do the actual fetch, because we 3669 may transfer a few bytes and then fault. Without this, those few 3670 bytes wouldn't get saved in the exception stack frame by 3671 tme_m68k_insn_buffer_xfer(), because it wouldn't know about the fetch. 3672 Later, when the instruction would be resumed, tme_m68k_fetch32() won't 3673 refetch them, because it knows they've already been fetched and thinks 3674 they're still in the instruction buffer. 3675 3676 * machine/sun/Makefile.am: Now build sun-cgtwo.c for 3677 libtme_machine_sun.la. 3678 3679 * machine/sun/sun-bwtwo.c (_tme_sunbw2_connections_new): Fill in the 3680 new parts of the struct tme_fb_connection. 3681 (tme_sun_bwtwo): Fixed a bug in the argument processing. 3682 3683 * machine/sun/sun-cgtwo.c: Added. 3684 3685 * machine/sun2/SUN2-MULTIBUS: Since the Emulex emulation changed 3686 slightly, make sure that NetBSD will still probe this as an Emulex. 3687 3688 * machine/sun3/SUN3-CARRERA: Added support for the cgthree board. 3689 3690 * machine/sun3/sun3-mainbus.c (tme_machine_sun3,cgtwo): Added. 3691 3692 * machine/sun3/sun3-mmu.c (_tme_sun3_tlb_fill_mmu): Temporarily work 3693 around a bug in NetBSD/sun3 where the cgtwo is mapped at the wrong 3694 physical address. 3695 3696 * tme/generic/bus.h: Added a prototype for tme_bus_cycle_xfer_reg(). 3697 3698 * tme/generic/fb.h: Added macros for the different image classes, 3699 mapping types, and default subfield masks. Also added macros for the 3700 "any" subfield mask, and for the mask of the maximum index value. 3701 Expanded struct tme_fb_connection and struct tme_fb_xlat to include 3702 image class, subfield masks, and mapping information. Added 3703 prototypes for tme_fb_xlat_colors_get() and tme_fb_xlat_colors_set(). 3704 3705 * tme/machine/sun.h: Added a prototype for tme_sun_cgtwo(). 3706 3707Wed Mar 23 12:42:56 2005 Matthew Fredette <fredette@alum.mit.edu> 3708 3709 * ic/ieee754/ieee754-ops-auto.sh: Now emit ops for log, log10, and 3710 exp. 3711 3712 * ic/m68k/m68010.c: TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68010): Now 3713 call tme_m68k_opcodes_init_m68010() to initialize the opcode table. 3714 3715 * ic/m68k/m68020.c: TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68020): Now 3716 call tme_m68k_opcodes_init_m68020() to initialize the opcode table. 3717 3718 * ic/m68k/m6888x.c (tme_m68k_fbcc): Fixed a bug in calculating the 3719 target PC; the displacement is always added to the original PC plus 3720 two. Now always take a 32-bit displacement as a proper operand. 3721 3722 * ic/m68k/m68k-execute.c: Simplified how instructions are decoded and 3723 executed. Now, the first 16-bit instruction word is used to directly 3724 index an array of 32-bit integers, each of which gives the 3725 instruction's function number, the function's arguments, immediate 3726 fetching and EA calculation information, and a single 3727 special-operation escape bit. Only two types of immediate fetches are 3728 supported: a 16-bit fetch, sign-extended to 32 bits, and a 32-bit 3729 fetch. All of this speeds things up dramatically. 3730 [_TME_M68K_STATS]: Keep statistics on executed instructions. 3731 3732 * ic/m68k/m68k-impl.h: Removed TME_M68K_SIZE_SUBMAP_X, 3733 TME_M68K_SIZE_16U8, TME_M68K_SIZE_16S32, TME_M68K_OPNUM_SUBMAP_X, 3734 TME_M68K_OPNUM_UNDEF, and the list of special opcodes, all of which 3735 were used only in the old opcode maps. 3736 Added macros for the decoded instruction parameters in the new opcode 3737 maps. 3738 Removed the data structures used by the old opcode maps. The EA 3739 register is now a proper IC register. Added statistics to struct 3740 tme_m68k. Removed the declarations of the small immediate arrays. 3741 The small immediates are now proper IC registers. Added declarations 3742 of the different CPUs' opcode maps and their initialization functions, 3743 and the instruction function array. Added declarations for 3744 tme_m68k_bccl(), tme_m68k_bsrl(), tme_m68k_divl() and tme_m68k_mull(). 3745 3746 * ic/m68k/m68k-insns.c (tme_m68k_bccl): 3747 (tme_m68k_bsrl): 3748 (tme_m68k_link): 3749 (tme_m68k_rtd): Now that the opcode map supports 16-bit immediates 3750 sign-extended to 32 bits, always take a proper 32-bit operand. 3751 3752 * ic/m68k/m68k-iset.txt: Now that the opcode map supports 16-bit 3753 immediates sign-extended to 32 bits again, make rtd and the 16-bit 3754 versions of link, bsr, bcc, and fbcc take this kind of immediate. 3755 3756 * ic/m68k/m68k-misc.c (tme_m68k_exception): Now log a message when a 3757 double fault causes a processor halt. 3758 3759 * ic/m68k/m68k-opmap-make.pl: The initial rewrite of the opcode map 3760 generation resulted in an enormous opcode map source file, and, 3761 because the instruction function pointers were in the map entries 3762 directly, an opcode map array that wasn't 64-bit friendly. 3763 Now, the instruction function pointers are in a small separate array 3764 which is indexed by eight bits in the 32-bit opcode parameter 3765 information, which is all that remains in the opcode map. To make 3766 room for these eight bits, the first EA mode and reg fields are not 3767 stored (and are instead are swapped in by the instruction executer 3768 after the instruction function has been fetched), and the special 3769 operation field has been reduced to a single bit. To shrink the 3770 opcode map sources, we take advantage of the fact that each of the 3771 1024 aligned sets of 64 opcodes (a "root") uses one of a small number 3772 of patterns to initialize itself (for m68000 through m68020, there are 3773 only 37 such patterns), and we generate a function to initialize the 3774 parameters in that pattern. Also, each CPU uses the previous CPU's 3775 opcode initialization function to initialize the bulk of its opcode 3776 map, making changes only as needed. 3777 All of this has reduced the size of the opcode map source file 3778 dramatically. 3779 Also, support for 16-bit immediates, sign-extended to 32 bits, has 3780 been added again. 3781 3782Tue Mar 15 02:56:58 2005 Matthew Fredette <fredette@alum.mit.edu> 3783 3784 * ic/m68k/m6888x.c (tme_m68k_fbcc): All 16-bit immediates are now 3785 sign-extended to 32-bits in a fixed immediate register. 3786 3787 * ic/m68k/m68k-insns.c (_tme_m68k_bcc): 3788 (tme_m68k_bccl): 3789 (_tme_m68k_bsr): 3790 (tme_m68k_bsrl): Added. 3791 (tme_m68k_bcc): Now just use _tme_m68k_bcc. 3792 (tme_m68k_bsr): Now just use _tme_m68k_bsr. 3793 (tme_m68k_link): Now handle the 16-bit variant explicitly. 3794 (tme_m68k_rtd): Now handle our 16-bit argument correctly. 3795 (tme_m68k_mull): 3796 (tme_m68k_divl): Added. 3797 3798Thu Mar 10 13:29:42 2005 Matthew Fredette <fredette@alum.mit.edu> 3799 3800 * ic/m68k/m68010.c: Now define _TME_M68K_EXECUTE_OPMAP to 3801 tme_m68k_opcodes_m68010 when compiling the executors. 3802 TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68010): No longer call 3803 _tme_m68010_decoder_map_init(). 3804 3805 * ic/m68k/m68020.c: Now define _TME_M68K_EXECUTE_OPMAP to 3806 tme_m68k_opcodes_m68020 when compiling the executors. 3807 TME_ELEMENT_X_NEW_DECL(tme_ic_,m68k,m68020): No longer call 3808 _tme_m68020_decoder_map_init(). 3809 3810 * ic/m68k/m68k-insns-auto.sh: cas2 now gets its specop2 as a 16-bit 3811 operand. moves now must do its own memory cycles, and EA 3812 postincrement and predecrement. 3813 Now track memory statistics in the memory functions. 3814 3815 * ic/m68k/m68k-iset.txt: Many simplifications, and some expansions, to 3816 enable faster instruction dispatching. Eliminated all specops except 3817 for specop16 and fpgen, eliminated the #16S32 immediate type (all 3818 16-bit immediates are now sign-expanded to 32 bits), and bcc and bsr 3819 are now expanded (multiple iset lines may expand to the same pattern, 3820 with the first one winning, but also with a system of * understood by 3821 m68k-opmap-make.pl to count the correct number of duplicates). 3822 3823 * ic/m68k/m68k-misc-auto.sh: Now define a 96-bit register for 3824 immediates. Now define registers for the constants zero through 3825 eight. 3826 3827 * ic/m68k/m68k-misc.c: Removed the small immediates arrays. 3828 (_tme_m68k_connection_break): Now return zero, to silence a warning 3829 (?). 3830 (tme_m68k_new): Increased the instruction burst size to 200. This 3831 dramatically improves performance. Now initialize the small 3832 immediates. 3833 (tme_m68k_redispatch): Count redispatch statistics. 3834 (tme_m68k_tlb_fill): Count TLB fill statistics. 3835 (tme_m68k_dump): No longer display the specop2 value. 3836 3837 * ic/m68k/m68k-opmap-make.pl (operand_final): Removed. 3838 3839 * ic/m68k/m68k-opmap-make.pl: Rewritten to support much faster 3840 dispatching of instructions. Now each CPU gets an independent 3841 64K-entry array, indexed by first instruction word, that yields a 3842 function pointer and 32 bits of parameter information. This 3843 information includes struct tme_m68k-relative offsets for the 3844 function's operands, EA and immediate fetching information, and specop 3845 information. 3846 3847Fri Feb 18 04:12:55 2005 Matthew Fredette <fredette@alum.mit.edu> 3848 3849 * bus/multibus/sun-mie.c (_tme_sun_mie_tlb_set_allocate): Atomic 3850 variable changes. 3851 (_tme_sun_mie_tlb_fill): Don't invalidate a TLB entry if it happens to 3852 be the same as the one we're filling. 3853 3854 * bus/multibus/sun-sc.c (_tme_sun_sc_bus_cycle_dma): Fixed a bug where 3855 we would do 16-bit accesses in 8-bit mode. 3856 (_tme_sun_sc_intack): Added. 3857 (_tme_sun_sc_cycle_new): 3858 (_tme_sun_sc_callout): 3859 (_tme_sun_sc_bus_cycle_data_reg): 3860 (_tme_sun_sc_bus_cycle_icr): 3861 (_tme_sun_sc_scsi_cycle): Mostly mechanical changes to support the new 3862 events/actions SCSI bus interface. 3863 (_tme_sun_sc_connection_make_scsi): No longer get any predefined SCSI 3864 sequences. 3865 (_tme_sun_sc_connections_new): No longer provide a predefined SCSI 3866 sequence function. 3867 (tme_bus_multibus,sun_sc): Added support for the "vme" argument. 3868 3869 * generic/fb-xlat-auto.sh: Fixed a serious bug where we would decide 3870 that FIFOs are always aligned, even when the FIFO's bits per pixel 3871 value isn't known at compile time. 3872 Fixed a bug where xlat_run would get decremented during every loop 3873 iteration, instead of only after every translated source 32-bit word. 3874 When the loop isn't unrolled for source pixels, this causes xlat_run 3875 to go negative too early, which can stop translation. 3876 3877 * generic/scsi.c (tme_scsi_connection_score): No longer score based on 3878 a predefined SCSI sequence function. 3879 3880 * ic/m68k/Makefile.am: Now build the m6888x support, which depends on 3881 the ieee754 support. 3882 3883 * ic/m68k/m68k-impl.h: 3884 * tme/ic/m68k.h: Added m6888x support. 3885 3886 * ic/m68k/m68k-iset.txt: Added the floating-point instructions. 3887 3888 * ic/m68k/m68k-misc.c (_tme_m6888x_enable): Added. 3889 (_tme_m68k_connection_score): A bus must not provide an m6888x enable 3890 function. 3891 (_tme_m68k_connections_new): A m68k provides an m6888x enable 3892 function. 3893 (tme_m68k_new): Now pass FPU arguments to tme_m68k_fpu_new(), and 3894 display the FPU usage with tme_m68k_fpu_usage(). 3895 (tme_m68k_do_reset): Reset any FPU. 3896 3897 * machine/sun2/SUN2-MULTIBUS: Make the bpf attachment for ie0 delay 3898 packets slightly. This works around a sleep/wakeup race condition in 3899 the NetBSD kernel RARP code. 3900 Changed the type of the bwtwo from obmem to multibus, since the bwtwo 3901 implementation is now common to all sun machines. 3902 3903 * machine/sun3/SUN3-CARRERA: Now define an unknown-compliance m68881. 3904 Now use the revision 3.0 ROM. 3905 Increased the size of the VME bus to the full 4GB. Commented out the 3906 sc0 attachment, in favor of the new si0 attachment. 3907 To support stock NetBSD 1.6*, make the Emulex tape respond to INQUIRY 3908 commands in a normal way. 3909 3910 * machine/sun3/sun3-control.c (_tme_sun3_control_cycle_handler): Call 3911 out changes to the FPU and DVMA enable bits. Silently ignore an 3912 attempt to enable the Sun FPA. 3913 3914 * machine/sun3/sun3-impl.h: Now track the active DVMA TLBs, so that 3915 they can be invalidated when DVMA is enabled or disabled. Atomic 3916 variable fixes, and a prototype for _tme_sun3_mmu_sdvma_change(). 3917 3918 * machine/sun3/sun3-mmu.c (_tme_sun3_cycle_dummy): 3919 (_tme_sun3_sdvma_disabled): 3920 (_tme_sun3_mmu_sdvma_change): Added. 3921 (_tme_sun3_bus_tlb_fill): Now track TLB entries filled for DVMA space. 3922 Entries that are filled while DVMA is disabled generate a VME bus 3923 fault. For now, bus cycles to unmapped DVMA addresses are ignored. 3924 (_tme_sun3_tlb_fill_mmu): Apparently the magic obio mapping of the 3925 PROM works over a PROM-sized region starting at 0x100000. Made some 3926 changes to silence -Wuninitialized. 3927 (_tme_sun3_mmu_tlb_set_allocate): Atomic variable changes. 3928 3929 * scsi/scsi-bus.c: Replaced the idea of a SCSI sequence with the much 3930 simpler idea of a bus agent waiting for one or more SCSI events to 3931 happen, then taking one or more SCSI actions. 3932 (_tme_scsi_bus_callout): Now call out the events triggered and actions 3933 taken to the connection. 3934 (_tme_scsi_bus_cycle): Now take the events to wait on and the actions 3935 to take from the connection. A connection waits until one of its 3936 events triggers, then some part of its actions are taken. There is 3937 now support for half and full SCSI bus arbitration, and reselection. 3938 (_tme_scsi_bus_sequence_get): Removed. 3939 (_tme_scsi_bus_connection_score): 3940 (_tme_scsi_bus_connections_new): We can't provide a predefined 3941 sequence function any more, or score a connection based on one. 3942 3943 * scsi/scsi-device.c (_tme_scsi_device_callout): 3944 (_tme_scsi_device_cycle): More or less mechanical changes to support 3945 the new events/actions SCSI bus interface. Fixed a bug where we would 3946 go past the end of the message dispatch array for IDENTIFY messages. 3947 (tme_scsi_device_connections_new): Removed the predefined SCSI 3948 sequence member assignment. 3949 3950 * scsi/scsi-tape.c (tme_scsi_tape_cdb_inquiry): It looks like 3951 nonexistent LUNs are reported as "unsupported", and not "not present". 3952 Now identify as a SCSI-1 device, and be sure not to return more data 3953 than the initiator requested. 3954 3955 * tme/common.h: Now declare _tme_volatile. 3956 Added some missing parentheses to _TME_FIELD_DEPOSIT(). Fixed a bug 3957 in the definition of the tme_value64_uint32s[] member of union 3958 tme_value64. 3959 Added definitions for tme_value64_imul() and tme_value64_idiv(). 3960 3961 * tme/generic/Makefile.am: Now install float.h. 3962 3963 * tme/generic/bus.h: Now define TME_BUS_SIGNAL_DRQ and 3964 TME_BUS_SIGNAL_DACK. 3965 3966 * tme/generic/scsi.h: Now define TME_SCSI_ID_SELECTED() and 3967 TME_SCSI_ID_RESELECTED(), to determine if an ID is being selected or 3968 reselected. Replaced the idea of a SCSI sequence with the much 3969 simpler idea of a bus agent waiting for one or more SCSI events to 3970 happen, then taking one or more SCSI actions. 3971 3972 * tme/ic/Makefile.am: Now install i825x6.h and ieee754.h. 3973 3974 * tme/machine/sun.h: Added a prototype for tme_sun_si(). 3975 3976 * tme/scsi/scsi-device.h: Removed the old predefined SCSI sequences 3977 from struct scsi_device. 3978 3979 * tme/scsi/scsi-msg.h: Now define TME_SCSI_MSG_IDENTIFY_LUN_MASK, for 3980 getting the LUN out of an IDENTIFY message. 3981 3982 * tmesh/tmesh-input.y: Now define YYMAXDEPTH, to silence -Wundef. 3983 3984Thu Feb 17 13:42:44 2005 Matthew Fredette <fredette@alum.mit.edu> 3985 3986 * Makefile.am: Added tools/ to SUBDIRS, and dist/ to EXTRA_DIST. 3987 Added a dist-hook target to clean the CVS directories out of dist/. 3988 3989 * acinclude.m4 (AC_CHECK_FLOAT_FORMAT): 3990 (AC_CHECK_FLOAT_LIMITS): Added. 3991 3992 * configure.in: Bumped version to 0.4. 3993 Now check for limits.h and float.h. Check for volatile, float, 3994 double, and long double, and the signal handler type. 3995 Added ieee754 and ncr5380 to the list of sun3 ICs. When using gcc, 3996 now use -Wundef when compiling with warnings, and set the no strict 3997 aliasing flag. Add the floating point format configuration to 3998 tmeconfig.h. 3999 4000 * generic/Makefile.am: Now build float.c and float-auto.c, and include 4001 float-auto.sh and float-auto.c in the distribution. 4002 4003 * generic/bus-el.c generic/bus.c machine/sun/sun-mmu.c 4004 machine/sun/sun-obie.c machine/sun2/sun2-impl.h 4005 machine/sun2/sun2-mmu.c tme/atomics.h tme/generic/bus.h 4006 tme/machine/sun.h: 4007 4008 Cleaned up atomic variables. Now atomic variables declared with 4009 TME_ATOMIC and TME_ATOMIC_POINTER_TYPE are volatile. To do this 4010 right, TME_ATOMIC_POINTER_TYPE changed to take just the base type 4011 pointed to, so there has been some fallout. 4012 4013 * generic/float-auto.sh generic/float.c ic/ncr5380.c 4014 ic/ieee754/Makefile.am ic/ieee754/ieee754-misc-auto.sh 4015 ic/ieee754/ieee754-misc.c ic/ieee754/ieee754-ops-auto.sh 4016 ic/ieee754/ieee754-precision.sh ic/ieee754/softfloat-tme.c 4017 ic/ieee754/softfloat-tme.h ic/m68k/m6888x-auto.sh ic/m68k/m6888x.c 4018 machine/sun/sun-si.c tme/generic/float.h tme/ic/ieee754.h 4019 tools/Makefile.am: 4020 4021 Added. 4022 4023 * host/posix/posix-disk.c (tme_host_posix,disk): Only probe for the 4024 block size if the device is a character device. If we have mmap 4025 support, the block size for all devices must be some multiple of the 4026 page size - this fixes a bug where we would try to mmap() 4027 non-page-sized regions at non-page boundaries. 4028 4029 * ic/Makefile.am: Added ieee754 to the list of distribution 4030 subdirectories. Now build ncr5380.c. 4031 Added i825x6reg.h to the list of i825x6 sources. 4032 4033 * ic/m68k/m68020.c (_tme_m68020_exception): 4034 (_tme_m68020_rte): Fixed bugs in the handling of bus fault frames for 4035 instruction fetches. Previously, we would always fault on stage B, 4036 and only on stage C for a 32-bit fetch. This was supposed to be the 4037 other way around. Also, an address error doesn't set a fault bit, 4038 only a rerun bit. 4039 4040 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed some bugs 4041 caught by gcc -Wuninitialized. 4042 4043 * ic/m68k/m68k-opmap-make.pl: Fixed a bug where the illegal opcode 4044 wouldn't get the 'illegal' specop. 4045 4046 * libtme/threads-sjlj.c [HAVE_GTK]: Define G_ENABLE_DEBUG if it isn't 4047 defined, to silence -Wundef. 4048 4049 * machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Fixed a serious bug 4050 where any page marked as modified was given out as writable, even if 4051 it wasn't marked as writable. SunOS likes to set page table entries 4052 that are modified, but not writable, and this bug was preventing 4053 proper copy-on-write behavior. 4054 4055 * machine/sun2/Makefile.am: No longer build sun2-bwtwo.c. 4056 4057 * machine/sun2/sun2-bwtwo.c: Removed. 4058 4059 * machine/sun2/sun2-mainbus.c (_tme_sun2_connections_new): Fixed bugs 4060 in forming the list of free buses. 4061 (tme_machine_sun2,zs): Now use the standard Sun z8530 socket 4062 definition. 4063 (tme_machine_sun2,bwtwo): Added. 4064 4065 * machine/sun3/sun3-mainbus.c (_tme_sun3_bus_signal): Apparently, 4066 SunOS likes to set both the level 5 and level 7 clock interrupt enable 4067 bits. The level 5 bit seems to take precedence. 4068 (_tme_sun3_connection_score): Insist on a m68020 or better. 4069 (tme_machine_sun3,si): Added. 4070 4071 * scsi/emulexmt02.c (_tme_emulexmt02_cdb_request_sense): Fixed a bug 4072 where we weren't putting the Emulex error code in the sense. 4073 (_tme_emulexmt02_cdb_inquiry): Added a hack to make this tape usable 4074 to install SunOS 4.1.1. 4075 (tme_scsi_tape_emulexmt02_init): If the user specified a vendor of 4076 EMULEX, use the normal INQUIRY CDB handling, instead of returning the 4077 useless Emulex INQUIRY data. Now return an illegal command for a 4078 RESERVE CDB. 4079 4080Thu Feb 17 02:14:57 2005 Matthew Fredette <fredette@alum.mit.edu> 4081 4082 * ic/m68k/m68k-insns.c (tme_m68k_bfffo): Fixed a bug where we were 4083 using ffs(), which finds the least significant bit set, and not the 4084 most significant bit set. Now find the most significant bit set. 4085 4086 * ic/m68k/m68k-verify.c (_tme_m68k_verify_end): Added better support 4087 for verifying bitfield instructions. Don't try to verify 4088 floating-point instructions. 4089 (tme_m68k_verify_end_branch): Now leave the m68k structure unchanged. 4090 4091 * machine/sun/Makefile.am: Added sun-fb.h and sun-si.c to the sources 4092 list. Added tme-sun-eeprom.pl to the distribution. 4093 4094Wed Jan 26 13:13:29 2005 Matthew Fredette <fredette@alum.mit.edu> 4095 4096 * host/gtk/gtk-display.h: If G_ENABLE_DEBUG isn't defined, define it 4097 to zero. Some GTK installations apparently require this. 4098 4099 * host/gtk/gtk-screen.c (_tme_gtk_screen_mode_change): Allocate a 4100 GdkImage with the extra scanlines needed to hold the overtranslation 4101 that the automatically generated functions do. 4102 4103 * ic/isil7170.c: Include <time.h> and not <sys/types.h> to get struct 4104 tm. 4105 4106 * ic/m68k/m68020.c (_tme_m68020_exception): Store the memory Z buffer. 4107 (_tme_m68020_rte): Restore the memory Z buffer. 4108 4109 * libtme/module.c (tme_module_open): Fixed a bug where were freeing 4110 the tokens array twice. 4111 4112 * scsi/scsi-msg.c (tme_scsi_device_msg_identify): Now set the 4113 addressed LUN. 4114 4115Sun Jan 16 01:24:37 2005 Matthew Fredette <fredette@alum.mit.edu> 4116 4117 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Added support for 4118 executing floating-point general instructions. 4119 4120Fri Jan 14 12:27:41 2005 Matthew Fredette <fredette@alum.mit.edu> 4121 4122 * dist/softfloat/processors/386-GCC.h 4123 dist/softfloat/processors/SPARC-GCC.h 4124 dist/softfloat/softfloat/README.txt 4125 dist/softfloat/softfloat/SoftFloat-history.txt 4126 dist/softfloat/softfloat/SoftFloat-source.txt 4127 dist/softfloat/softfloat/SoftFloat.txt 4128 dist/softfloat/softfloat/timesoftfloat.txt 4129 dist/softfloat/softfloat/bits32/softfloat-macros 4130 dist/softfloat/softfloat/bits32/softfloat.c 4131 dist/softfloat/softfloat/bits32/timesoftfloat.c 4132 dist/softfloat/softfloat/bits32/386-Win32-GCC/Makefile 4133 dist/softfloat/softfloat/bits32/386-Win32-GCC/milieu.h 4134 dist/softfloat/softfloat/bits32/386-Win32-GCC/softfloat-specialize 4135 dist/softfloat/softfloat/bits32/386-Win32-GCC/softfloat.h 4136 dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/Makefile 4137 dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/milieu.h 4138 dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat-specialize 4139 dist/softfloat/softfloat/bits32/SPARC-Solaris-GCC/softfloat.h 4140 dist/softfloat/softfloat/bits32/templates/Makefile 4141 dist/softfloat/softfloat/bits32/templates/milieu.h 4142 dist/softfloat/softfloat/bits32/templates/softfloat-specialize 4143 dist/softfloat/softfloat/bits32/templates/softfloat.h 4144 dist/softfloat/softfloat/bits64/softfloat-macros 4145 dist/softfloat/softfloat/bits64/softfloat.c 4146 dist/softfloat/softfloat/bits64/timesoftfloat.c 4147 dist/softfloat/softfloat/bits64/386-Win32-GCC/Makefile 4148 dist/softfloat/softfloat/bits64/386-Win32-GCC/milieu.h 4149 dist/softfloat/softfloat/bits64/386-Win32-GCC/softfloat-specialize 4150 dist/softfloat/softfloat/bits64/386-Win32-GCC/softfloat.h 4151 dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/Makefile 4152 dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/milieu.h 4153 dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat-specialize 4154 dist/softfloat/softfloat/bits64/SPARC-Solaris-GCC/softfloat.h 4155 dist/softfloat/softfloat/bits64/templates/Makefile 4156 dist/softfloat/softfloat/bits64/templates/milieu.h 4157 dist/softfloat/softfloat/bits64/templates/softfloat-specialize 4158 dist/softfloat/softfloat/bits64/templates/softfloat.h: 4159 4160 Import of SoftFloat Release 2b. 4161 4162 * dist/softfloat/softfloat/bits32/softfloat.c: 4163 * dist/softfloat/softfloat/bits64/softfloat.c: Added the tme/softfloat 4164 glue and removed some unused variables. 4165 4166Fri Jan 14 11:44:18 2005 Matthew Fredette <fredette@alum.mit.edu> 4167 4168 * machine/sun/tme-sun-eeprom.pl: Make selftest-#megs default to zero. 4169 * tools/tme-binary-struct.pl.in: When standard input is a terminal, we 4170 don't read any input. 4171 4172Thu Aug 19 12:27:24 2004 Matthew Fredette <fredette@alum.mit.edu> 4173 4174 * TODO: Updated. 4175 4176 * acinclude.m4 (AC_CHECK_SHIFTSIGNED): Added. 4177 4178 * configure.in: Use AC_CHECK_SHIFTSIGNED() to see if right shifts of 4179 signed integrals preserve sign. 4180 Added support for sun3 systems. 4181 4182 * generic/bus-el.c (_tme_bus_intack): If a device doesn't acknowledge 4183 interrupts, return any user-specified vector on the bus connection 4184 before falling back to the undefined vector. 4185 (_tme_bus_connections_new): Now allow the user to specify a vector on 4186 the bus connection. 4187 (tme_generic,bus): Added a hack that allows the user to specify a 4GB 4188 bus on a 32-bit system. 4189 4190 * ic/Makefile.am: Now build tme_ic_isil7170.la. 4191 4192 * ic/i825x6.c (_tme_i825x6_callout_cu): Added a missing break 4193 statement to a switch arm. 4194 4195 * ic/isil7170.c ic/m68k/m68020.c machine/sun/sun-bwtwo.c 4196 machine/sun/sun-fb.c machine/sun/sun-fb.h machine/sun/sun-obie.c 4197 machine/sun/tme-sun-eeprom.pl machine/sun3/Makefile.am 4198 machine/sun3/SUN3-CARRERA machine/sun3/sun3-control.c 4199 machine/sun3/sun3-impl.h machine/sun3/sun3-mainbus.c 4200 machine/sun3/sun3-mmu.c tme/ic/isil7170.h 4201 tools/tme-binary-struct.pl.in: 4202 4203 Added. 4204 4205 * ic/m68k/Makefile.am: Removed an inadvertent m68k-verify.c from 4206 tme_ic_m68k_la_SOURCES. 4207 4208 * ic/m68k/Makefile.am: Now compile m68020.c. 4209 4210 * ic/m68k/m68k-misc.c (tme_m68000_exception_process): 4211 (tme_m68020_exception_process): For illegal instruction exceptions, 4212 now use the line A or line F vector as appropriate. 4213 (tme_m68k_rte_start): Added some TME_M68K_SEQUENCE_RESTARTING 4214 protection. 4215 4216 * libtme/threads-sjlj.c: Removed the unused 4217 tme_sjlj_thread_cond_notified field from the thread structure. 4218 (tme_sjlj_thread_create): Initialize the thread's linkage in the 4219 timeout list. 4220 4221 * machine/Makefile.am: Added the sun3 directory to DIST_SUBDIRS. 4222 4223 * machine/sun/Makefile.am: Now build sun-bwtwo.c, sun-fb.c, and 4224 sun-obie.c for libtme_machine_sun.la. 4225 Now make the tme-sun-eeprom script. 4226 4227 * machine/sun/sun-keyboards.txt: Added a map for the type 3 keyboard. 4228 4229 * machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Don't invalidate the 4230 old TLB entry if it happens to be the same one we're filling. 4231 4232 * tme/common.h: Now define TME_FIELD_MASK_EXTRACTU and the internal 4233 _TME_FIELD_MASK_FACTOR, for extracting field values using a mask. 4234 4235 * tme/generic/bus.h: Now define TME_BUS_CYCLE_SYNCHRONOUS_EVENT. Now 4236 track a single interrupt vector for a connection, for those 4237 connections that only use a single, nonprogrammable vector. 4238 4239 * tme/ic/Makefile.am: Now install isil7170.h. 4240 4241 * tme/machine/sun.h: To allow for more code sharing, now define 4242 TME_SUN_Z8530_SIZE and TME_SUN_Z8530_SOCKET_INIT. Added prototypes 4243 for tme_sun_obie() and tme_sun_bwtwo(). 4244 4245Wed Aug 11 12:30:28 2004 Matthew Fredette <fredette@alum.mit.edu> 4246 4247 * ic/m68k/m68010.c: Removed GROUPn_ from the TME_M68K_EXCEPTION_ macro 4248 names, since those group numbers applied to only the 68000 and 68010. 4249 Also added the new TME_M68K_VECTOR_ macros. 4250 4251 * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Fixed problems with 4252 the way that tracing is handled, to enable support for 68020 tracing 4253 and its new trace exception frame format. Fixed a bug in the code 4254 that detects a 32-bit branch. Fixed a bug in decoding the divul and 4255 mulul extension words. Added missing declarations for some variables 4256 used in 68020 effective address calculation. 4257 4258 * ic/m68k/m68k-impl.h: Replaced TME_M68K_FLAG_T with TME_M68K_FLAG_T0 4259 and TME_M68K_FLAG_T1, and use them wherever possible. Removed the 4260 GROUPn_ from the TME_M68K_EXCEPTION_ macros, since the original group 4261 numbers were specific to the 68000 and 68010. Added more exception 4262 frame format identifier macros. Added new macros for the exception 4263 vectors. 4264 (TME_M68K_INSN_BRANCH): 4265 (TME_M68K_INSN_CHANGE_SR): Improved tracing support. 4266 4267 * ic/m68k/m68k-insns-auto.sh: The old asr expansion (which was the 4268 same as the lsr expansion, but with a signed operand and result) had 4269 bugs and also required that right shifts of a signed operand be 4270 arithmetic. Added a new expansion that fixes these problems. 4271 Removed the _GROUPn from the TME_M68K_EXCEPTION_ macro names, since 4272 the group numbers were specific to the 68000 and 68010. Also added 4273 the new TME_M68K_VECTOR_ macros. 4274 In the bus-cycle functions, recognize the 4275 TME_BUS_CYCLE_SYNCHRONOUS_EVENT pseudo-error, and make it force the 4276 executer to check external events before executing the next 4277 instruction. 4278 4279 * ic/m68k/m68k-insns.c: Removed the _GROUPn from the 4280 TME_M68K_EXCEPTION_ macro names, since the group numbers were specific 4281 to the 68000 and 68010. Also added the new TME_M68K_VECTOR_ macros. 4282 Where applicable, store the current PC as the last PC before setting 4283 the next PC as the current PC. This supports format 2 exception 4284 frames, which stack the address of the instruction that caused the 4285 exception. 4286 (tme_m68k_movec): Added support for the 68020 control registers. 4287 4288 * ic/m68k/m68k-misc-auto.sh: Create registers for the next program 4289 counter, the 68020 cacr and caar, and the always-zero register. 4290 4291 * ic/m68k/m68k-misc.c: Removed the _GROUPn from the 4292 TME_M68K_EXCEPTION_ macro names, since the group numbers were specific 4293 to the 68000 and 68010. Also added the new TME_M68K_VECTOR_ macros. 4294 (_tme_m68k_bus_interrupt): 4295 (tme_m68k_external_check): Implement a system that prevents NMI from 4296 being repeatedly accepted. If the interrupt priority mask is already 4297 seven, only accept an NMI on a transition from deasserted to asserted. 4298 (tme_m68k_new): Now set the mask of T bits used by the processor. 4299 (tme_m68k_do_reset): Now clear the E and F bits in the 68020 cacr. 4300 Fixed a bug where we loaded the initial SSP and PC from supervisor 4301 data space instead of the correct supervisor program space. 4302 (tme_m68k_change_sr): Only recognize the M bit on a 68020 or greater, 4303 and fixed bugs in the selection of the correct stack pointer control 4304 register. 4305 (tme_m68k_exception_process): Renamed to tme_m68000_exception_process, 4306 since the grouping and priority it implements are specific to the 4307 68000 and 68010. 4308 (tme_m68020_exception_process): Added. 4309 (tme_m68k_bitfield_offset): Simplified the bitfield byte offset 4310 calculation for negative bit offsets. 4311 (tme_m68k_bitfield_width): Don't bother masking a bitfield width that 4312 was encoded in the instruction; it can't be greater than 31. 4313 (_tme_m68k_bitfield_read): If the bitfield is in memory, note that the 4314 current instruction can fault. Fixed bugs where we assumed that 4315 TME_BIT(32) is zero mod 2^32, when it may be 1 because of shift 4316 limiting, which would cause us to fail to mask and/or sign-extend a 4317 32-bit bitfield value correctly. 4318 (tme_m68k_bitfield_write_unsigned): Fixed a bug where we wouldn't mask 4319 the value we were given before setting the flags. Fixed bugs where we 4320 assumed that TME_BIT(32) is zero mod 2^32, when it may be 1 because of 4321 shift limiting. If the bitfield is in memory, note that the current 4322 instruction can fault. 4323 4324 * ic/m68k/m68k-verify.c (tme_m68k_verify_mem_any): Fixed a bug where 4325 we wouldn't properly verify transfers of endianless data. 4326 (tme_m68k_verify_init): Now set up a full 32-bit address space. 4327 (_tme_m68k_verify_end): Store %a7 back in its proper stack pointer 4328 control register, so we can verify changes to the control registers. 4329 Ignore extra verifier memory reads on bitfield instructions; the 4330 verifier bitfield implementation often reads addresses not covered by 4331 the bitfield. 4332 4333Mon May 17 11:57:01 2004 Matthew Fredette <fredette@alum.mit.edu> 4334 4335 * host/bsd/bsd-bpf.c: Added support for the "delay" option, which 4336 delays all incoming packets for a user-specified number of 4337 microseconds. 4338 (_tme_bsd_bpf_read): Fixed a bug where a TME_ETHERNET_READ_PEEK read 4339 would discard the read packet. 4340 4341Fri May 14 00:56:19 2004 Matthew Fredette <fredette@alum.mit.edu> 4342 4343 * host/bsd/bsd-bpf.c: Removed the unused tme_bsd_bpf_cond_writer 4344 structure member. 4345 (tme_host_bsd,bpf): Fixed a bug where we weren't initializing the 4346 tme_bsd_bpf_conf_reader condition. 4347 4348Tue May 11 12:03:36 2004 Matthew Fredette <fredette@alum.mit.edu> 4349 4350 * ic/i825x6.c: Added some logging. 4351 (_tme_i825x6_callout_ru): Don't set the B bit in RFD status fields. 4352 4353 * libtme/misc.c (_tme_misc_number_parse): Some changes to silence gcc 4354 -Wuninitialized. 4355 4356Tue May 04 01:17:27 2004 Matthew Fredette <fredette@alum.mit.edu> 4357 4358 * bus/multibus/sun-mie.c: 4359 * ic/i825x6.c: 4360 * ic/i825x6reg.h: 4361 * tme/ic/i825x6.h: Added. 4362 4363 * machine/sun2/SUN2-MULTIBUS: Added commands to create ie0. 4364 4365Fri Apr 30 12:11:36 2004 Matthew Fredette <fredette@alum.mit.edu> 4366 4367 * bus/multibus/3c400.c bus/multibus/sun-sc.c generic/bus-el.c 4368 ic/am9513.c ic/z8530.c ic/m68k/m68k-insns.c ic/m68k/m68k-misc.c 4369 machine/sun2/sun2-mainbus.c tme/generic/bus.h: 4370 4371 Reworked bus signals in several ways: Added the notion of the bus 4372 signals set. Every bus should support multiple device-specific bus 4373 signals sets, added by elements connecting to the bus. This enables 4374 elements to pass these device-specific bus signals to each other. 4375 Now bus signals are only specified as either asserted or negated, 4376 and devices almost never signal edges. For devices that only drive 4377 signals either high or low, you can exclusive-or 4378 TME_BUS_SIGNAL_LEVEL_ASSERTED with either TME_BUS_SIGNAL_LEVEL_HIGH 4379 or TME_BUS_SIGNAL_LEVEL_LOW as appropriate, and provide that to the 4380 device such that the device only needs to exclusive-or that with the 4381 signal level to get the right asserted or negated level. Also 4382 expanded the number of generic bits in a signal value, and improved 4383 the set of macros used to compose and decompose signal values. 4384 4385 * bus/multibus/sun-sc.c generic/bus.c ic/m68k/m68k-misc.c 4386 machine/sun/sun-mmu.c tme/generic/bus.h: 4387 4388 Made changes to the TLB protocol, to better support reentrant 4389 devices. Now, a TLB entry passed to a fill function is expected to 4390 be local on the stack, and it "reserves" the real, backing TLB entry 4391 in the device's state. This prevents the case where a device tries 4392 to fill the same backing TLB entry at the same time in two or more 4393 threads. TLB fill functions for devices that need to invalidate 4394 outstanding TLBs always invalidate the backing TLB entry. After a 4395 TLB fill has finished, the caller checks its reservation on the 4396 real, backing TLB, and copies the local TLB back if the reservation 4397 has not been broken. Devices that want to use a TLB entry 4398 immediately after the fill function returns must use the local TLB, 4399 since it cannot have been invalidated yet. Also made fixes to TLB 4400 entry users that avoid rereading fields that are destroyed by 4401 invalidation, after the device has committed to using the TLB entry, 4402 since invalidation can happen at any time. Also made the TLB 4403 tme_bus_tlb_emulator_off_read member const. 4404 4405 * generic/Makefile.am: 4406 * generic/bus-device.c: 4407 * tme/generic/bus-device.h: Added generic bus-device support for real 4408 bus interfaces and bus-mastering. 4409 4410Fri Apr 30 01:46:01 2004 Matthew Fredette <fredette@alum.mit.edu> 4411 4412 * TODO: Updated. 4413 4414 * configure.in: Added the i825x6 to the list of ICs for the sun2. 4415 4416 * bus/multibus/Makefile.am: Now compile sun-mie.c. 4417 4418 * ic/Makefile.am: Now build tme_ic_i825x6.la. 4419 4420 * tme/common.h: Added the TME_X_VERSION versioning macros. Simplified 4421 the definition of TME_RANGES_OVERLAP. 4422 4423 * tme/generic/ethernet.h: Now define TME_ETHERNET_LENGTH_SIZE and 4424 TME_ETHERNET_HEADER_SIZE. 4425 4426 * tme/ic/m68k.h: Removed the ancient tme_m68k_tlb_bus_wrlock_on_read 4427 macro. 4428 4429Sun Mar 28 23:38:28 2004 Matthew Fredette <fredette@alum.mit.edu> 4430 4431 * generic/bus-device-auto.sh: Added. 4432 4433Fri Feb 20 12:42:11 2004 Matthew Fredette <fredette@alum.mit.edu> 4434 4435 * ic/m68k/m68k-execute.c [_TME_M68K_EXECUTE_FAST]: Make the fast 4436 emulator load pointers const. 4437 4438Fri Jan 09 03:42:48 2004 Matthew Fredette <fredette@alum.mit.edu> 4439 4440 * generic/bus-el.c ic/am9513.c ic/m68k/m68k-misc.c 4441 machine/sun2/sun2-mainbus.c tme/generic/bus.h: 4442 4443 Increased the possible number of signal flag bits. 4444 (TME_BUS_SIGNAL_WHICH): Renamed to TME_BUS_SIGNAL_INDEX, all callers 4445 changed, and added a new macro with the same old name that simply 4446 masks off the signal flag bits. 4447 (TME_BUS_SIGNAL_WHICH_INT): Renamed to TME_BUS_SIGNAL_INDEX_INT, all 4448 callers changed. 4449 4450 * generic/bus.c (tme_bus_addr_parse_any): Now use 4451 tme_misc_unumber_parse_any(). 4452 4453 * generic/disk.c (tme_disk_dimension_parse): Now use 4454 tme_misc_unumber_parse(). 4455 4456 * generic/fb-xlat-auto.sh: No longer emit some pixel-doubling code in 4457 optimized translation functions for formats for 24 or more bits per 4458 pixel, because that code would expand to shifts of more than 32 bits, 4459 tripping gcc -Werror. 4460 4461 * host/gtk/gtk-screen.c (_tme_gtk_gdkimage_bipp): Fixed a bug where 4462 this would fail when bipp > depth, which is common on deep 4463 framebuffers. 4464 4465 * libtme/misc.c (_tme_misc_number_parse): 4466 (tme_misc_unumber_parse_any): 4467 (tme_misc_number_parse_any): 4468 (tme_misc_unumber_parse): 4469 (tme_misc_number_parse): Added. 4470 4471 * tme/misc.h: Added prototypes for tme_misc_unumber_parse_any, 4472 tme_misc_number_parse_any, tme_misc_unumber_parse, and 4473 tme_misc_number_parse. 4474 4475Wed Oct 29 02:03:26 2003 Matthew Fredette <fredette@alum.mit.edu.> 4476 4477 * Release 0.2 out. 4478 4479 * host/gtk/gtk-screen.c: Some quick changes for GTK 2 compatibility. 4480 4481Sat Oct 25 17:08:02 2003 Matthew Fredette <fredette@alum.mit.edu> 4482 4483 * ic/am9513.c ic/mm58167.c ic/z8530.c ic/z8530reg.h 4484 ic/m68k/m68k-execute.c ic/m68k/m68k-insns.c ic/m68k/m68k-iset.txt 4485 ic/m68k/m68k-misc.c ic/m68k/m68k-verify.c tmesh/tmesh-cmds.c 4486 tmesh/tmesh-util.c: 4487 4488 RCS Id, header comment, and license sweep. 4489 4490Thu Oct 16 03:02:11 2003 Matthew Fredette <fredette@alum.mit.edu> 4491 4492 * configure.in: Now check for size_t. 4493 Now make sure that <net/bpf.h> defines BIOCSHDRCMPLT before deciding 4494 that bpf support is present. 4495 4496 * generic/bus.c generic/keyboard.c host/bsd/bsd-bpf.c 4497 host/bsd/bsd-if.c host/gtk/gtk-display.h host/gtk/gtk-keyboard.c 4498 host/posix/posix-tape.c ic/am9513.c ic/m68k/m68k-impl.h 4499 libtme/log-prf.c machine/sun2/sun2-mmu.c scsi/scsi-cdb.c 4500 scsi/scsi-tape.c serial/kb-sun.c serial/serial-kb.c 4501 serial/serial-ms.c tme/generic/keyboard.h tme/scsi/scsi-device.h 4502 tmesh/tmesh-cmds.c tmesh/tmesh.c: 4503 4504 Fixed many small bugs caught by the gcc3 -Wall -Wuninitialized. 4505 4506 * host/posix/posix-disk.c: Fixed various type problems found by gcc3. 4507 4508 * scsi/acb4000.c (_tme_acb4000_cdb_bad): Fixed a bug where we set the 4509 amount of valid sense to TRUE instead of to a byte count. 4510 4511 * scsi/scsi-bus.c (_tme_scsi_bus_cycle): Work around an aliasing 4512 warning. 4513 4514 * tme/common.h: Fixed a bug where tme_value64_set had a conditional 4515 with two different result types. 4516 When included by the implementation, now try to bring in standard 4517 headers to get string and memory function prototypes. Added an 4518 incomplete list of prototypes for when standard headers aren't 4519 available. 4520 4521Mon Sep 29 11:42:56 2003 Matthew Fredette <fredette@alum.mit.edu> 4522 4523 * generic/fb-xlat-auto.sh: Added many comments, clarified some obscure 4524 code, and fixed a bug where unoptimized halving translators wouldn't 4525 shift the source FIFOs by two pixels when they had to. 4526 4527Wed Sep 10 01:49:22 2003 Matthew Fredette <fredette@alum.mit.edu> 4528 4529 * generic/fb-xlat-auto.sh: Fixed various bugs when the destination 4530 FIFOs may not be aligned, and when doubling. These bugs were mostly 4531 found by inspection, and the fixes haven't been tested. 4532 4533Mon Sep 01 14:58:57 2003 Matthew Fredette <fredette@alum.mit.edu> 4534 4535 * configure.in: Changed the version number. 4536 Now only build the bsd host modules on BSD-like systems. 4537 4538 * generic/keyboard.c (_tme_keyboard_buffer_in0): Now examine any 4539 keycode on the user's event to determine if an earlier press of a 4540 different keysym from the same keycode has actually released. 4541 4542 * host/gtk/gtk-display.h: Now keep a mapping from keysym to keycode, 4543 for those keysyms that can only be generated by one keycode. 4544 4545 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_x11_new): 4546 (_tme_gtk_keyboard_key_event): 4547 (_tme_gtk_keyboard_new): Now keep a mapping from keysym to keycode, 4548 for those keysyms that can only be generated by one keycode, and add 4549 that keycode to key events. 4550 4551 * host/posix/posix-tape.c: Some changes to silence gcc 4552 -Wuninitialized. 4553 4554 * host/posix/posix-tape.c (_tme_posix_tape_xfer1): When we hit the end 4555 of the media, don't try to skip ahead to a nonexistent next segment. 4556 4557 * libtme/hash.c (_tme_hash_lookup_internal): When the lookup succeeds, 4558 be sure to return the handle the bucket. 4559 4560 * libtme/log.c: Fixed many of the non-stdarg declarations of the 4561 variable-argument functions. 4562 4563 * machine/sun2/SUN2-MULTIBUS: Now set a fixed key rate on kbd0, to 4564 work around a bug in NetBSD where only the first of simultaneously 4565 received keycodes will be processed. 4566 4567 * serial/serial-kb.c (_tme_serial_kb_callout): Cleaned up the code 4568 that translates keyboard events into serial data, and added support 4569 for rate-limiting. 4570 (_tme_serial_kb_th_rate): Added. 4571 (_tme_serial_kb_serial_read): 4572 ((tme_serial_,kb,keyboard): Added support for rate-limiting. 4573 4574 * serial/serial-kb.h: Added various members to control rate-limiting. 4575 4576 * tme/generic/keyboard.h: A keyboard event for a keysym can now 4577 include the related keycode. This is for handling the case of a key 4578 release giving a different keysym than the key press did because 4579 modifiers changed in between. 4580 4581Sat Aug 23 13:50:34 2003 Matthew Fredette <fredette@alum.mit.edu> 4582 4583 * generic/Makefile.am: Be sure to distribute fb-xlat-auto.sh. 4584 * generic/keyboard.c (_tme_keyboard_debug): 4585 (tme_keyboard_buffer_new): Changes to support logging debug messages. 4586 4587 * host/gtk/Makefile.am: 4588 * serial/Makefile.am: 4589 * tme/generic/Makefile.am: Added some headers that weren't getting 4590 distributed. 4591 4592 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_new): Allow the keyboard 4593 buffer to log messages using our log handle. 4594 4595 * host/posix/posix-tape.c: Changes to silence various gcc warnings. 4596 4597 * libtme/module.c: Added a hack to support older installed libltdls 4598 that don't define lt_ptr. 4599 4600 * libtme/threads-sjlj.c: Fixed uses of struct fd_set. 4601 4602 * tme/common.h: Now include <netinet/in.h> for the byteswapping 4603 functions. 4604 4605 * tme/generic/keyboard.h: Users can now give a log handle to the 4606 keyboard buffer, for logging debug messages. 4607 4608Fri Aug 22 16:39:30 2003 Matthew Fredette <fredette@alum.mit.edu> 4609 4610 * serial/serial-kb.c (tme_serial_,kb,keyboard): Give the element's log 4611 handle to the keyboard buffer, to enable debugging. 4612 4613Tue Aug 12 23:00:40 2003 Matthew Fredette <fredette@alum.mit.edu> 4614 4615 * machine/sun/Makefile.am: Now install sun-keyboards.txt and 4616 my-sun-macros.txt. 4617 4618 * machine/sun/my-sun-macros.txt: 4619 * machine/sun/sun-keyboards.txt: Added. 4620 4621 * machine/sun2/Makefile.am: Removed some old targets and dependencies. 4622 4623 * machine/sun2/SUN2-MULTIBUS: Reorganized and added more comments. 4624 As-is, this now represents the common case of local disk, no network. 4625 4626Fri Aug 08 13:33:45 2003 Matthew Fredette <fredette@alum.mit.edu> 4627 4628 * tmesh/tmesh.c (main): Added support for the --noninteractive option. 4629 Fixed a bug where we wouldn't report meaningful file and line number 4630 information on early errors. 4631 4632Thu Aug 07 22:14:46 2003 Matthew Fredette <fredette@alum.mit.edu> 4633 4634 * bus/multibus/sun-sc.c (_tme_sun_sc_bus_cycle_data_reg): Added. 4635 (_tme_sun_sc_bus_cycle_data): 4636 (_tme_sun_sc_bus_cycle_cmd_stat): Now use 4637 _tme_sun_sc_bus_cycle_data_reg to run the bus cycle. 4638 (_tme_sun_sc_tlb_fill): The data register can't allow fast reading. 4639 4640 * host/posix/posix-disk.c (_tme_posix_disk_buffer_get): Now honor a 4641 device's block size. 4642 (tme_host_posix,disk): If the disk image is a character device, see if 4643 it has a minimum block size. 4644 4645 * host/posix/posix-tape.c (__tme_posix_tape_command): Fixed a bug 4646 where an error return value wouldn't get returned. Fixed a bug where 4647 a LOAD control would get called out even when an error occured during 4648 loading. 4649 4650 * scsi/emulexmt02.c: Replaced blocksize with block_size for 4651 consistency. 4652 (_tme_emulexmt02_cdb_block_limits): Added. 4653 (tme_scsi,tape): Now handle the BLOCK LIMITS command. 4654 4655 * scsi/scsi-cdb.c (tme_scsi_device_cdb_illegal): Added. 4656 (_tme_scsi_device_make_inquiry_string): Added. 4657 (tme_scsi_device_make_inquiry_data): Added. 4658 (tme_scsi_device_cdb_inquiry): Removed. 4659 4660 * scsi/scsi-device.c (tme_scsi_device_address_lun_aware): Always allow 4661 an INQUIRY command, even for a LUN that isn't defined. 4662 (tme_scsi_device_new): Set a NULL handler for the INQUIRY command by 4663 default. 4664 4665 * scsi/scsi-disk.c: Renamed the tme-scsi-2 disk type to tme-scsi-1, to 4666 reflect that it's a SCSI-1 disk. 4667 (tme_scsi_disk_cdb_inquiry): Added. 4668 (tme_scsi_disk_cdb_mode_sense): 4669 (tme_scsi_disk_cdb_start_stop): 4670 (tme_scsi_disk_cdb_prevent_allow): 4671 (tme_scsi_disk_cdb_read_capacity): Crudely implemented these commands. 4672 (tme_scsi_disk_cdb_read1): 4673 (tme_scsi_disk_cdb_write1): Implemented these commands. 4674 (_tme_scsi_disk_control): Made public. 4675 (_tme_scsi_disk_connection_break): Made public. 4676 (_tme_scsi_disk_connection_make): Made public. 4677 (_tme_scsi_disk_connections_new): Made public. 4678 (tme_scsi,disk): Install the disk handler for the INQUIRY command. 4679 4680 * scsi/scsi-tape.c (tme_scsi_tape_cdb_inquiry): Added. 4681 (tme_scsi_tape_cdb_load_unload): 4682 ((tme_scsi_tape_cdb_prevent_allow): Made these command handlers do 4683 nothing, for now. 4684 (tme_scsi,tape): Install the tape handler for the INQUIRY command. 4685 4686 * tme/generic/disk.h: Define some disk controls. 4687 4688 * tme/scsi/scsi-cdb.h: Define various macros, types, and prototypes 4689 for generating INQUIRY response data. 4690 4691 * tme/scsi/scsi-disk.h: Added some prototypes for some now-public 4692 functions. 4693 4694 * tme/scsi/scsi-tape.h: Added a prototype for 4695 tme_scsi_tape_cdb_inquiry. 4696 4697Tue Aug 05 03:41:31 2003 Matthew Fredette <fredette@alum.mit.edu> 4698 4699 * bus/multibus/sun-sc.c (_tme_sun_sc_scsi_cycle): If we're not 4700 starting DMA, be sure to call out a wait-change cycle instead, 4701 otherwise we can miss SCSI bus transitions. 4702 4703 * generic/Makefile.am: Now compile tape.c 4704 4705 * generic/tape.c host/posix/posix-tape.c scsi/emulexmt02.c 4706 scsi/scsi-tape.c tme/generic/tape.h tme/scsi/scsi-tape.h: 4707 4708 Added. 4709 4710 * host/posix/Makefile.am: Now compile posix-tape.c. 4711 4712 * ic/z8530.c (_tme_z8530_bus_cycle): Added support for the WR0 reset 4713 Rx interrupt command. 4714 4715 * ic/m68k/m68k-impl.h: Now always declare tme_m68k_verify_hook. 4716 4717 * ic/m68k/m68k-insns-auto.sh: Fixed a bug in the V bit calculation in 4718 the asl insns. 4719 4720 * ic/m68k/m68k-misc.c (tme_m68k_verify_hook): Now always compile this 4721 function. 4722 4723 * ic/m68k/m68k-verify.c (_tme_m68k_verify_end): Ignore the T bits when 4724 verifying %sr. 4725 4726 * machine/sun2/SUN2-MULTIBUS: Updated. 4727 4728 * scsi/Makefile.am: Now compile emulexmt02.c and scsi-tape.c. 4729 4730 * scsi/acb4000.c (_tme_acb4000_address_lun): When marking a 4731 nonextended sense as valid we now have to indicate how many bytes it 4732 contains. 4733 4734 * scsi/acb4000.c: 4735 * tme/scsi/scsi-device.h: Fixed a comment. 4736 4737 * scsi/scsi-bus.c (_tme_scsi_bus_cycle): Now be more universal about 4738 remembering the last SCSI bus state we called out to each connection, 4739 and call out whenever that state changes and the connection wants a 4740 callout. When a connection gives us an empty DMA sequence, instead of 4741 aborting just immediately call out. When a connection is in a DMA 4742 sequence and the bus gets reset, try to reset on behalf of the 4743 connection. 4744 4745 * scsi/scsi-cdb.c (tme_scsi_device_cdb_request_sense): Now require 4746 that the valid marker for nonextended senses give the length of the 4747 sense. 4748 4749 * scsi/scsi-device.c (tme_scsi_device_target_phase): Now log up to 128 4750 bytes of output in various phases. 4751 (_tme_scsi_device_cycle): Now log short transfers. 4752 (tme_scsi_device_target_dsmf): Fixed a comment. 4753 4754 * scsi/scsi-disk.c (_tme_scsi_disk_connections_new): Fixed a usage 4755 string. 4756 (tme_disk,new): Fixed a comment. 4757 4758 * serial/ms-mssystems.c: Removed the 3-byte packet support, since it's 4759 apparently only found on the Tadpole SPARCbooks. 4760 4761 * serial/serial-ms.c (_tme_serial_ms_serial_config): Now store the 4762 peer's serial configuration. 4763 4764 * serial/serial-ms.h: Now store the peer's serial configuration. 4765 4766 * tme/connection.h: Now define TME_CONNECTION_TAPE. 4767 4768 * tme/generic/Makefile.am: Now install tape.h. 4769 4770 * tme/scsi/Makefile.am: Now install scsi-tape.h. 4771 4772Thu Jul 31 19:03:16 2003 Matthew Fredette <fredette@alum.mit.edu> 4773 4774 * scsi/scsi-bus.c (_tme_scsi_bus_cycle): Fixed some uses of dma_in to 4775 dma; caught by gcc -Wuninitialized. 4776 4777 * tmesh/tmesh-cmds.c (_tmesh_command_log): Wrapped some otherwise 4778 unused declarations in !TME_NO_LOG. 4779 4780Thu Jul 31 01:47:46 2003 Matthew Fredette <fredette@alum.mit.edu> 4781 4782 * generic/Makefile.am: Now compile mouse.c. 4783 4784 * generic/fb.c (tme_fb_xlat_best): Fixed a bug where we wouldn't 4785 reject translation functions that don't match the question. 4786 4787 * generic/keyboard.c: Fixed a comment. 4788 4789 * generic/mouse.c host/gtk/gtk-mouse.c serial/ms-mssystems.c 4790 serial/serial-ms.c serial/serial-ms.h tme/generic/mouse.h: 4791 4792 Added. 4793 4794 * host/gtk/Makefile.am: Now compile gtk-mouse.c. 4795 4796 * host/gtk/gtk-display.c: 4797 * host/gtk/gtk-display.h: 4798 * host/gtk/gtk-keyboard.c: Many changes to add mouse support. 4799 4800 * host/gtk/gtk-screen.c: Many changes to improve the user interface. 4801 Now include a menu for changing the scaling factor. Fixed bugs with 4802 respect to event masks, mostly by adding an event box. 4803 4804 * ic/z8530.c (_tme_z8530_callout): Fixed a bug that caused us to never 4805 check the callouts on channel B. 4806 4807 * ic/m68k/m68k-insns.c (tme_m68k_reset): Added a crude implementation 4808 of the reset instruction. 4809 4810 * machine/sun2/SUN2-MULTIBUS: Updated. 4811 4812 * machine/sun2/sun2-mainbus.c (_tme_sun2_bus_signal): Instead of 4813 aborting, just ignore the RESET signal from the CPU for now. 4814 4815 * serial/Makefile.am: Now compile serial-ms.c and ms-mssystems.c. 4816 4817 * tme/connection.h: Now define TME_CONNECTION_MOUSE. 4818 4819Tue Jul 29 18:33:14 2003 Matthew Fredette <fredette@alum.mit.edu> 4820 4821 * Makefile.am: 4822 * tme/Makefile.am: Added scsi to SUBDIRS. 4823 4824 * configure.in: If long on the target is 64-bits, use it as our 64-bit 4825 type. Substitute the scsi Makefiles. 4826 4827 * bus/multibus/3c400.c (TME_3C400_CSR_PUT_3c400): Corrected a 4828 tme_betoh_u16 into a tme_htobe_u16. 4829 4830 * bus/multibus/Makefile.am: Now compile sun-sc.c. 4831 4832 * bus/multibus/sun-sc.c generic/disk.c generic/scsi.c 4833 host/posix/posix-disk.c scsi/Makefile.am scsi/acb4000.c 4834 scsi/disk-tme.c scsi/scsi-bus.c scsi/scsi-cdb.c scsi/scsi-device.c 4835 scsi/scsi-disk.c scsi/scsi-msg.c tme/generic/disk.h 4836 tme/generic/scsi.h tme/scsi/Makefile.am tme/scsi/scsi-cdb.h 4837 tme/scsi/scsi-device.h tme/scsi/scsi-disk.h tme/scsi/scsi-msg.h: 4838 4839 Added. 4840 4841 * generic/Makefile.am: Now compile disk.c and scsi.c. 4842 4843 * generic/bus-device.c: 4844 * generic/bus-el.c: Fixed a comment. 4845 4846 * host/posix/Makefile.am: Now compile posix-disk.c. 4847 4848 * host/posix/posix-memory.c: 4849 * host/posix/posix-serial.c: Fixed comments. 4850 4851 * ic/mm58167.c: Fixed many significant problems with this emulation, 4852 most notably that the size of the chip was not calculated correctly at 4853 all. We now report with microsecond resolution, since SunOS's probe 4854 routine requires this. 4855 4856 * ic/z8530.c (_tme_z8530_intack): Simplified and fixed bugs in how 4857 variable interrupt vectors are computed. For now, since there's no 4858 emulation of the IEI pin, we just behave as if it's always tied low, 4859 so we never put any vector on the bus during a hard interrupt 4860 acknowledge. 4861 (_tme_z8530_bus_cycle): Now ignore all WR0 CRC reset commands. Now 4862 support the WR0 transmitter reset command. Now support reads of RR10 4863 and RR14. 4864 4865 * ic/m68k/m68k-insns-auto.sh: The movem instructions cannot fault when 4866 the register mask is zero. Now that we generally have a 64-bit type 4867 available, fixed various bugs in the 64-bit multiply and divide 4868 instructions. 4869 4870 * ic/m68k/m68k-insns.c (tme_m68k_movec): Now appropriately mask values 4871 loaded into control registers. movec only has a long version, and 4872 SunOS on the Sun-2 doesn't necessarily clear the remainder of the data 4873 register it uses to load %sfc and %dfc. 4874 4875 * ic/m68k/m68k-misc.c (tme_m68k_exception_process_start): Fixed a bug 4876 where the T bits weren't cleared. This bug was found by SunOS on the 4877 sun2, which starts at least init in usermode with tracing enabled. 4878 4879 * ic/m68k/m68k-verify.c (tme_m68k_verify_init): Now assume that the 4880 CPU generates 28-bit addresses. SunOS 3 on the Sun-2 does this. 4881 4882 * machine/sun/tme-sun-idprom.pl: Added support for the obscure 4883 Roadrunner-MB1. 4884 4885 * machine/sun2/sun2-bwtwo.c: Fixed various comments. 4886 Because SunOS's probe routine fails otherwise, added support for the 4887 entire 2KB page starting at the CSR to appear undecoded, i.e., to look 4888 like the CSR repeated 1024 times. 4889 4890 * machine/sun2/sun2-impl.h: Now define TME_SUN2_DVMA_SIZE_MBMEM and 4891 TME_SUN2_DVMA_SIZE_VME. 4892 Now make struct tme_sun2_bus_connection public, since the bus DVMA TLB 4893 filler needs to know which bus it's filling for. 4894 4895 * machine/sun2/sun2-mainbus.c (_tme_sun2_connections_new): When making 4896 the connections for the mbmem or vme buses, be sure to set the last 4897 address that we decode on the bus, for DVMA purposes. 4898 4899 * machine/sun2/sun2-mmu.c (_tme_sun2_bus_tlb_fill): Fixed many bugs 4900 involving filling TLB entries for bus's DVMA regions. 4901 (_tme_sun2_mmu_pte_set): Added a missing protection. 4902 4903 * tme/common.h: Added some crude support for 64-bit math, even for 4904 compilers that offer no 64-bit type at all. 4905 4906 * tme/connection.h: Now define TME_CONNECTION_SCSI and 4907 TME_CONNECTION_DISK. 4908 4909 * tme/generic/Makefile.am: Added more headers. 4910 4911 * tme/generic/bus-device.h: Corrected a comment. 4912 4913 * tme/generic/ic.h: Corrected the 64-bit support. 4914 4915 * tmesh/tmesh-cmds.c (_tmesh_command_log): Added. 4916 4917 * tmesh/tmesh-impl.h: Now define TMESH_COMMAND_LOG. 4918 4919 * tmesh/tmesh-input.y: Added support for parsing the `log' command. 4920 4921Tue Jul 22 18:30:31 2003 Matthew Fredette <fredette@alum.mit.edu> 4922 4923 * generic/fb-xlat-auto.sh: Changes to silence gcc -Wuninitialized. 4924 * host/gtk/gtk-keyboard.c (_tme_gtk_keyboard_lookup): Changes to 4925 silence gcc -Wuninitialized. 4926 4927 * libtme/module.c (tme_module_open): Changes to silence gcc 4928 -Wuninitialized. 4929 4930 * libtme/threads-sjlj.c (tme_sjlj_dispatch): Declared some locals 4931 volatile to silence gcc's setjmp-related warning. 4932 4933Fri Jun 27 21:30:37 2003 Matthew Fredette <fredette@alum.mit.edu> 4934 4935 * Makefile.am: Added the serial directory to SUBDIRS. 4936 * configure.in: Many changes to support framebuffer emulation and X11 4937 and gtk elements. Also added some serial elements support. 4938 4939 * generic/Makefile.am: Now create fb-xlat-auto.c and build fb.c and 4940 keyboard.c. 4941 4942 * generic/bus-device.c: 4943 * generic/bus-el.c: 4944 * generic/bus.c: Although I hate doing this, various changes to 4945 support a single bus connection connecting to a bus region sparsely. 4946 4947 * generic/fb-xlat-auto.sh: Now declare src_bypb to include one more 4948 extra line of data, to make a total of two. 4949 Fixed a bug where translating and halving would really translate every 4950 line twice. Now when we reach the end of a line we skip the next 4951 line, to move to the next pair of lines. 4952 4953 * generic/fb.c generic/keyboard.c host/gtk/Makefile.am 4954 host/gtk/gtk-display.c host/gtk/gtk-display.h 4955 host/gtk/gtk-keyboard.c host/gtk/gtk-screen.c libtme/hash.c 4956 machine/sun2/sun2-bwtwo.c serial/Makefile.am serial/kb-sun.c 4957 serial/serial-kb.c serial/serial-kb.h tme/hash.h tme/misc.h 4958 tme/generic/fb.h tme/generic/keyboard.h: 4959 4960 Added. 4961 4962 * generic/keyboard.c: Disabled debug output. 4963 4964 * host/Makefile.am: Added gtk to DIST_SUBDIRS. 4965 4966 * ic/am9513.c (_tme_am9513_th_timer): Removed a newline from a log 4967 statement. 4968 4969 * ic/z8530.c (_tme_z8530_channel_reset): Fixed an incorrect reset 4970 value for RR3. 4971 (_tme_z8530_config): Simply ignore a peer's request to change the 4972 serial configuration. 4973 4974 * ic/m68k/m68k-execute.c: To fix a problem where m68k execution could 4975 possibly never yield (by oscillating back and forth between fast and 4976 slow execution, for example) we make sure that we never run more than 4977 _tme_m68k_instruction_burst before checking for external interrupts 4978 and yielding. 4979 4980 * ic/m68k/m68k-impl.h: Now in addition to _tme_m68k_instruction_burst, 4981 the maximum burst length, there is 4982 _tme_m68k_instruction_burst_remaining, which is the maximum number of 4983 instructions remaining in the current burst. 4984 4985 * ic/m68k/m68k-iset-expand.pl: 4986 * ic/m68k/m68k-opmap-make.pl: Made the RCS keywords, copyright and 4987 license like other files. 4988 4989 * ic/m68k/m68k-misc.c (tme_m68k_new): Now initialize the new 4990 _tme_m68k_instruction_burst_remaining struct member. 4991 4992 * libtme/Makefile.am: Now compile hash.c, and use the GTK CFLAGS. 4993 4994 * libtme/misc.c (tme_misc_tokenize): 4995 (tme_free_string_array): Added. 4996 4997 * libtme/module.c (tme_module_open): Now use tme_misc_tokenize to 4998 tokenize. 4999 5000 * libtme/threads-sjlj.c: Although I hate doing this, many changes to 5001 support using the GTK event loop. 5002 5003 * machine/sun2/Makefile.am: Now build sun2-bwtwo.c. 5004 5005 * machine/sun2/SUN2-MULTIBUS: Added commands to create a real physical 5006 console. 5007 5008 * machine/sun2/sun2-mainbus.c (_tme_sun2_bus_intack): Now acknowledge 5009 interrupts on the obmem bus too, since the bwtwo z8530s are there. 5010 5011 * tme/Makefile.am: Now install misc.h and hash.h. 5012 5013 * tme/common.h: Now define tme_letoh_u16() and tme_letoh_u32(x). 5014 Declare tme_free_string_array(). 5015 5016 * tme/connection.h: Add connection types for keyboards and 5017 framebuffers. 5018 5019 * tme/threads.h: Under _TME_HAVE_GTK, declare tme_threads_gtk_init. 5020 5021 * tme/tme.h: Now include <tme/hash.h> and <tme/misc.h>. 5022 5023 * tme/generic/Makefile.am: Now install fb.h and keyboard.h. 5024 5025 * tme/generic/bus-device.h: 5026 * tme/generic/bus.h: Changes to support a single bus connection 5027 connecting to a bus region sparsely. 5028 5029 * tmesh/Makefile.am: Now link with the GTK libraries. 5030 5031Fri Jun 27 01:37:57 2003 Matthew Fredette <fredette@alum.mit.edu> 5032 5033 * generic/fb-xlat-auto.sh: Added. 5034 5035Thu Jun 26 13:16:12 2003 Matthew Fredette <fredette@alum.mit.edu> 5036 5037 * tme/generic/ic.h: Fixed grammar in a comment. 5038 5039Sun May 18 02:40:56 2003 Matthew Fredette <fredette@alum.mit.edu> 5040 5041 * configure.in: Changed the version number to 0.0; this is very alpha. 5042 There are now fewer include directories under tme/; many unnecessary 5043 headers that belonged to modules were removed. 5044 5045 * bus/multibus/3c400.c: No longer include <tme/bus/multibus/3c400.h>. 5046 5047 * bus/multibus/Makefile.am generic/Makefile.am host/bsd/Makefile.am 5048 host/posix/Makefile.am ic/Makefile.am ic/m68k/Makefile.am 5049 libtme/Makefile.am machine/sun/Makefile.am machine/sun2/Makefile.am 5050 tmesh/Makefile.am: 5051 5052 Added library and module versioning. 5053 5054 * host/bsd/bsd-bpf.c: 5055 * host/bsd/bsd-if.c: Now include "bsd-impl.h" instead of 5056 <tme/host/bsd.h>. 5057 5058 * host/bsd/bsd-impl.h: 5059 * machine/sun/tme-sun-idprom.pl: Added. 5060 5061 * machine/sun2/SUN2-MULTIBUS: Changed the extension on the PROM and 5062 IDPROM files from .dat to .bin. 5063 5064 * machine/sun2/SUN2-MULTIBUS: Changed the name of the PROM filename to 5065 match the documentation. 5066 5067 * tme/Makefile.am: Removed the host and bus include directories; they 5068 don't exist anymore. 5069 5070Sat May 17 20:34:07 2003 Matthew Fredette <fredette@alum.mit.edu> 5071 5072 * acinclude.m4: Added an RCS Id and a short comment. 5073 * configure.in: Added an RCS Id, the copyright, and license. Do a 5074 real path search for perl. 5075 5076 * libtme/log-prf.c: 5077 * libtme/module.c: 5078 * machine/sun2/sun2-mainbus.c: Changes to silence gcc -Wuninitialized. 5079 5080Fri May 16 21:48:16 2003 Matthew Fredette <fredette@alum.mit.edu> 5081 5082 * Makefile.am TODO acconfig.h configure.in modules bus/Makefile.am 5083 bus/multibus/3c400.c bus/multibus/Makefile.am generic/Makefile.am 5084 generic/bus-device.c generic/bus-el.c generic/bus.c 5085 host/bsd/Makefile.am host/bsd/bsd-bpf.c host/posix/Makefile.am 5086 host/posix/posix-memory.c host/posix/posix-serial.c ic/Makefile.am 5087 ic/am9513.c ic/mm58167.c ic/z8530.c ic/m68k/Makefile.am 5088 ic/m68k/m68010.c ic/m68k/m68k-impl.h ic/m68k/m68k-insns-auto.sh 5089 ic/m68k/m68k-misc.c libtme/Makefile.am libtme/alloc.c 5090 libtme/element.c libtme/log-prf.c libtme/log.c libtme/misc.c 5091 libtme/module.c libtme/threads-sjlj.c machine/Makefile.am 5092 machine/sun/Makefile.am machine/sun/sun-mmu.c 5093 machine/sun2/Makefile.am machine/sun2/SUN2-MULTIBUS 5094 machine/sun2/sun2-impl.h machine/sun2/sun2-mainbus.c 5095 machine/sun2/sun2-mmu.c tme/Makefile.am tme/common.h 5096 tme/connection.h tme/element.h tme/log.h tme/module.h tme/tme.h 5097 tme/tmesh.h tme/generic/bus-device.h tme/generic/bus.h 5098 tme/ic/am9513.h tme/ic/m68k.h tme/ic/mm58167.h tme/ic/z8530.h 5099 tmesh/Makefile.am tmesh/tmesh-cmds.c tmesh/tmesh-impl.h 5100 tmesh/tmesh-input.y tmesh/tmesh-util.c tmesh/tmesh.c: 5101 5102 By far, this is the worst bulk commit I've ever done. Many changes 5103 to simplify the element interface as much as possible, to do modules 5104 better, and to do logging better. Fixed a small number of actual 5105 bugs. Also converted to modern autoconf and automake, because the 5106 module support requires modern libtool. Also added the main libtme, 5107 libtmesh, and tmesh itself. 5108 5109 * ic/m68k/m68k-verify.c: Now include <stdio.h>. 5110 5111Fri May 16 17:50:17 2003 Matthew Fredette <fredette@alum.mit.edu> 5112 5113 * acinclude.m4 (AC_CHECK_ALIGNOF): Now takes only a size, in bits, to 5114 check the alignment for. Before, it used to take a string of the form 5115 intN_t, which wouldn't work on systems that don't define an intN_t 5116 type. When cross-compiling, assume the target requires alignment 5117 equal to the size. Now use AC_DEFINE_UNQUOTED's third argument to 5118 specify the config.h.in comment. 5119 (AC_CHECK_SHIFTMAX): Added. 5120 (AC_SYS_SOCKADDR_SA_LEN): Now use AC_DEFINE_UNQUOTED's third argument 5121 to specify the config.h.in comment. 5122 5123Thu May 15 15:52:08 2003 Matthew Fredette <fredette@alum.mit.edu> 5124 5125 * ic/m68k/m68k-insns-auto.sh: Fixed bugs in the shift and rotate 5126 insns, where we might try to shift by an amount greater than the 5127 maximum meaningful shift for a given size. 5128 5129Sat May 10 15:41:23 2003 Matthew Fredette <fredette@alum.mit.edu> 5130 5131 * acinclude.m4 (AC_CHECK_ALIGNOF): Fixed a bug where this would stop 5132 on the first misalignment, instead of continuing to find the true 5133 minimum alignment. For example, this would have found the minimum 5134 32-bit alignment to be 4 instead of 2 on a 68000 or 68010, stopping on 5135 the misaligned address 3. 5136 5137 * configure.in ic/Makefile.am ic/m68k/Makefile.am machine/Makefile.am 5138 machine/sun2/Makefile.am tme/Makefile.am: 5139 5140 Some early distribution work. 5141 5142 * ic/m68k/m68k-insns-auto.sh: 5143 * ic/m68k/m68k-misc-auto.sh: Fixed some bad macro and type name 5144 references. 5145 5146 * ic/m68k/m68k-insns-auto.sh: 5147 * ic/m68k/m68k-misc-auto.sh: Handled the rename of the aligned and 5148 unaligned memory access rwlocking macros, and use the new 5149 tme_memory_sequence_ rwlocking macros. Generally made things a little 5150 easier to read, although we do rely on the optimizer to do the right 5151 thing somewhat more. 5152 5153 * tme/threads.h: Renamed the memory-access locking functions to be 5154 tme_memory_HOW_WHATlock, where HOW is aligned or unaligned, and WHAT 5155 is rd or wr. Now define the tme_memory_sequence_WHATlock macros, used 5156 when doing a sequence of memory accesses that must appear to be 5157 atomic. 5158 Now define TME_SEQUENCE_ACCESS_NOT_COSTLIER as TRUE if locking for a 5159 sequence and locking for an aligned access have the same cost, else 5160 define it as FALSE. 5161 5162Sat May 10 00:31:32 2003 Matthew Fredette <fredette@alum.mit.edu> 5163 5164 * ic/m68k/m68k-insns-auto.sh: Overhauled the shift instructions to not 5165 use loops. 5166 5167Fri May 09 17:45:06 2003 Matthew Fredette <fredette@alum.mit.edu> 5168 5169 * ic/m68k/m68k-execute.c: As an optimization, now require the 5170 individual insn functions to use TME_M68K_INSN_CANFAULT if they may 5171 fault, instead of figuring out every time if an insn can fault or not. 5172 Check that insn functions have set it if they need it, and left it 5173 unset if they do not need it. 5174 5175 * ic/m68k/m68k-execute.c: Made some changes to somewhat optimize 5176 certain effective address calculations. 5177 5178 * ic/m68k/m68k-impl.h: Now define TME_M68K_INSN_CANFAULT. 5179 5180 * ic/m68k/m68k-impl.h: Renumbered the TME_M68K_SIZE_ macros slightly 5181 to enable an optimization on effective address 5182 predecrement/postincrement calculation. Grew the memory transfer 5183 function arrays to match. 5184 Moved the generic IC data structure to the top of the m68k structure, 5185 to enable register indexing to happen without an offset. 5186 Removed _tme_m68k_areg_increment, it's no longer needed. 5187 5188 * ic/m68k/m68k-insns-auto.sh: 5189 * ic/m68k/m68k-insns.c: Now use TME_M68K_INSN_CANFAULT where it's 5190 needed. Also fixed some random restarting bugs in some insns. 5191 5192 * ic/m68k/m68k-misc.c: Removed _tme_m68k_areg_increment, it's no 5193 longer needed. Grew the memory transfer function arrays to match the 5194 renumbering of the TME_M68K_SIZE_ macros, and added some preprocessor 5195 error checking on those macros. 5196 5197Fri May 09 14:36:16 2003 Matthew Fredette <fredette@alum.mit.edu> 5198 5199 * bus/multibus/3c400.c generic/bus-device.c generic/bus-el.c 5200 generic/bus.c host/posix/posix-memory.c ic/am9513.c ic/mm58167.c 5201 ic/z8530.c tme/generic/bus-device.h tme/generic/bus.h: 5202 5203 Bulk change to no longer require bus connections to have a 5204 power-of-two width. This is largely a name change, renaming 5205 address_mask to address_last, as nothing depended on the 5206 address_mask being all-bits-one. 5207 5208 * bus/multibus/3c400.c (_tme_3c400_callout): Make buffer status values 5209 have the minimum Ethernet frame size. 5210 5211 * ic/am9513.c: Now include <stdio.h>, in case 5212 TME_AM9513_TRACK_INT_RATE is defined. 5213 5214 * ic/am9513.c: Under TME_AM9513_TRACK_INT_RATE, periodically report 5215 the interrupt rates achieved by the various timers. 5216 5217 * machine/sun2/sun2-mmu.c (_tme_sun2_m68k_tlb_fill): Because 5218 supervisor and user accesses go through different context registers, 5219 TLBs are generally only ever valid for the supervisor or the user, but 5220 not both. Fixed a bug where a TLB for a user-visible page would be 5221 marked as good for the supervisor even if the mapping isn't the same 5222 in the system context. 5223 5224 * tme/generic/ethernet.h: Now define TME_ETHERNET_CRC_SIZE. 5225 5226Thu May 08 23:37:55 2003 Matthew Fredette <fredette@alum.mit.edu> 5227 5228 * ic/m68k/m68k-insns-auto.sh: Fixed bugs, found by the verifier, in 5229 the SR and CCR immediate instructions. 5230 5231 * ic/m68k/m68k-verify.c: Now keep a short ring of PCs verified. 5232 5233Thu May 08 19:22:10 2003 Matthew Fredette <fredette@alum.mit.edu> 5234 5235 * ic/z8530.c (_tme_z8530_intack): Changes to silence -Wuninitialized. 5236 * ic/m68k/Makefile.am: No longer define _TME_M68K_OPW_OK. 5237 * ic/m68k/m68k-execute.c: Changes to support verifying restarted 5238 instructions. 5239 5240 * ic/m68k/m68k-impl.h: Fixed the definitions of the dummy 5241 tme_m68k_verify_ macros. 5242 5243 * ic/m68k/m68k-impl.h: Now call tme_m68k_verify_end_branch inside 5244 TME_M68K_INSN_BRANCH. Added a unique identifier member to the 5245 sequence structure. Made a few functions take a const struct tme_m68k 5246 *. Made changes to the verifier to support verifying restarted 5247 instructions. 5248 5249 * ic/m68k/m68k-insns-auto.sh: Fixed a bug found by the verifier, where 5250 the movem instructions weren't following the EA discipline correctly 5251 and so would transfer to the wrong addresses after a restart. 5252 5253 * ic/m68k/m68k-misc.c (tme_m68k_go_slow): Now take a const struct 5254 tme_m68k *. 5255 (tme_m68k_sequence_empty): 5256 (tme_m68k_sequence_fill): Made the argument that's supposed to be 5257 read-only const. Under _TME_M68K_VERIFY, save and restore the 5258 sequence unique identifier. 5259 5260 * ic/m68k/m68k-verify.c: Many changes to support verifying 5261 instructions that ended only after they were restarted because of one 5262 or more bus faults. 5263 5264Thu May 08 13:35:43 2003 Matthew Fredette <fredette@alum.mit.edu> 5265 5266 * ic/m68k/m68k-execute.c: 5267 * ic/m68k/m68k-impl.h: 5268 * ic/m68k/m68k-misc.c: Replaced _TME_M68K_OPW_OK bits with new 5269 _TME_M68K_VERIFY bits. 5270 5271 * ic/m68k/m68k-insns-auto.sh: In all memory access functions, added 5272 calls to the verifier. Fixed a bug in the divide routines, found by 5273 the verifier - the N flag in set based on the final small quotient, 5274 not on the big one. 5275 5276 * ic/m68k/m68k-misc-auto.sh: Now define TME_M68K_IREG32_COUNT. 5277 5278 * ic/m68k/m68k-verify.c: Added. 5279 5280Wed May 07 02:37:05 2003 Matthew Fredette <fredette@alum.mit.edu> 5281 5282 * generic/bus-el.c (_tme_bus_connections_new): Store the final bus 5283 interrupt signal number, not the raw ipl. 5284 5285 * ic/z8530.c: Although I hate doing this, too many changes to go into 5286 detail. Much work to support interrupt driven operation. 5287 5288 * ic/z8530reg.h: Added definitions for RR3. 5289 5290 * ic/m68k/m68k-impl.h: Fixed a serious bug in the TME_M68K_FLAG_SR 5291 definition that would zero part of the interrupt mask. 5292 5293 * ic/m68k/m68k-insns-auto.sh: Fixed a bug where negx wasn't preserving 5294 the Z flag if the result was zero. 5295 5296 * machine/sun2/sun2-test.c (main): Fixed a bug where the zs0 ipl arg 5297 was getting lost. 5298 5299Mon May 05 23:20:11 2003 Matthew Fredette <fredette@alum.mit.edu> 5300 5301 * TODO: Updated. 5302 5303 * generic/serial.c (tme_serial_buffer_copyout): Fixed a bug where if 5304 we were copying to a NULL buffer and the copyout wrapped in the ring 5305 buffer, we would do pointer arithmetic on the NULL. 5306 5307 * ic/m68k/m68010.c (_tme_m68010_rte): Fixed a bug where we forgot to 5308 recover the group 0 function code and address for the cycle restart. 5309 Fixed a bug where we wouldn't reset to extract our internal state from 5310 the stack buffer. 5311 5312 * ic/m68k/m68k-insns-auto.sh: Fixed several instructions that trap or 5313 do trap-like things to update PC to be the PC of the following 5314 instruction before trapping. 5315 (tme_m68k_read_mem): Fixed a memcpy direction bug. 5316 5317 * ic/m68k/m68k-insns.c: Fixed several instructions that trap or do 5318 trap-like things to update PC to be the PC of the following 5319 instruction before trapping. 5320 5321 * libtme/threads-sjlj.c (tme_sjlj_cond_notify): Fixed a bug where we 5322 would cancel a thread's wait condition instead of notifying the 5323 thread. 5324 5325 * machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Support the new 5326 expansive MMU PTE protections. 5327 5328 * machine/sun2/sun2-mainbus.c (_tme_sun2_bus_intack): Now acknowledge 5329 soft interrupts. 5330 (tme_machine_sun2_clock_new): Fixed a bug where we had the Timer 2 5331 output miswired. 5332 5333 * machine/sun2/sun2-mmu.c: Many changes to support the new full 5334 understanding of sun2 PTE protections. 5335 5336 * tme/machine/sun.h: Expanded on the generic PTE protections, to 5337 support the more expressive sun2 protections. 5338 5339Sun May 04 22:46:12 2003 Matthew Fredette <fredette@alum.mit.edu> 5340 5341 * ic/am9513.c (_tme_am9513_counters_disarm): Added. 5342 (_tme_am9513_th_timer): Try to avoid 32-bit integer overflow when 5343 calculating the sleep time. 5344 (_tme_am9513_bus_cycle): Now support the disarm timers command. 5345 5346 * ic/mm58167.c: Changes to silence -Wuninitialized. 5347 5348 * ic/mm58167.c: 5349 * tme/ic/mm58167.h: Added. 5350 5351 * ic/z8530.c: Although I hate doing this, too much work to go into 5352 detail. Did more groundwork for eventually generating interrupts. 5353 5354 * ic/m68k/m68k-execute.c: Now wrap the execute hook call in 5355 _TME_M68K_OPW_OK. 5356 5357 * ic/m68k/m68k-misc.c (tme_m68k_exception_process_start): Fixed a bug 5358 where the new ipl mask was put into the sr at the wrong position. 5359 5360 * machine/sun2/sun2-mainbus.c (tme_machine_sun2_tod_new): Added. 5361 5362 * machine/sun2/sun2-mmu.c (_tme_sun2_obbus_fault_handler): Removed. 5363 (_tme_sun2_bus_fault_handler): 5364 (_tme_sun2_obio_fault_handler): 5365 (_tme_sun2_obmem_fault_handler): Added. 5366 (_tme_sun2_multibus_fault_handler): Now just call 5367 _tme_sun2_bus_fault_handler. 5368 (_tme_sun2_tlb_fill_mmu): Use the new bus-specific fault handlers. 5369 5370 * machine/sun2/sun2-test.c: Now create and connect the TOD chip. 5371 5372 * tme/ic/Makefile.am: Updated. 5373 5374Sat May 03 19:27:07 2003 Matthew Fredette <fredette@alum.mit.edu> 5375 5376 * TODO: Updated. 5377 5378 * ic/m68k/m68k-execute.c: Fixed multiple bugs in the handling of brief 5379 EA extension words. 5380 5381 * ic/m68k/m68k-insns-auto.sh: Fixed a bug where subx and addx didn't 5382 take the (previous) X flag into account when calculating flags. 5383 5384 * machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler): Now 5385 call _tme_sun2_ipl_check whenever the enable register is written. 5386 5387 * machine/sun2/sun2-impl.h: Added macros for the enable register bits. 5388 5389 * machine/sun2/sun2-mainbus.c (_tme_sun2_ipl_check): Added. 5390 (_tme_sun2_bus_signal): Now call _tme_sun2_ipl_check to update the ipl 5391 driven to the CPU. 5392 5393Fri May 02 17:37:10 2003 Matthew Fredette <fredette@alum.mit.edu> 5394 5395 * TODO: Updated. 5396 5397 * acconfig.h acinclude.m4 bus/multibus/3c400.c 5398 bus/multibus/Makefile.am generic/ethernet.c host/bsd/Makefile.am 5399 host/bsd/bsd-bpf.c host/bsd/bsd-if.c tme/generic/ethernet.h: 5400 5401 Added. 5402 5403 * configure.in: Now check for minimum alignments. Now check for 5404 various headers and other things needed by the BSD code. 5405 5406 * bus/Makefile.am: 5407 * generic/Makefile.am: 5408 * host/Makefile.am: 5409 * tme/generic/Makefile.am: Added support for new components. 5410 5411 * bus/multibus/3c400.c (_tme_3c400): Some changes to silence 5412 -Wuninitialized. 5413 5414 * host/posix/posix-serial.c: Fixed some indentation, and one 0 to a 5415 TME_OK. 5416 5417 * ic/am9513.c (_tme_am9513_counters_load): 5418 (_tme_am9513_counters_arm): Added. 5419 (_tme_am9513_th_timer): Try to avoid multiplication overflow when 5420 calculating the number of basic ticks that have elapsed. Try to 5421 handle armed and unarmed counters correctly. 5422 (_tme_am9513_bus_cycle): Now load and arm counters correctly. 5423 (tme_ic_am9513_new): Calculate the number of basic ticks in a 5424 millisecond for the benefit of the timer thread. 5425 5426 * ic/m68k/m68010.c (_tme_m68010_rte): tme_m68k_rte_finish no longer 5427 touches the sequence at all, so before calling it make sure the 5428 sequence is exactly what it's supposed to be. 5429 5430 * ic/m68k/m68k-execute.c: In the fast executor, assert that the ITLB 5431 entry allows fast reading for the current PC or that the PC is one 5432 greater than the last address covered by the entry. Fixed the 5433 fast-fetch-failed code to more correctly simulate a group 0 exception 5434 and associated RTE. 5435 5436 * ic/m68k/m68k-insns-auto.sh: Cleaned up and fixed the code generated 5437 for cmpm, addx, and subx. At least, cmpm wasn't getting its address 5438 registers postincremented, and addx and subx weren't treating the Z 5439 flag properly. In the fetch insns, take the address to fetch from as 5440 an argument, instead of using the real ic->tme_m68k_ireg_pc with 5441 tme_m68k_read 5442 (which could actually update it, if recovering from a group 0 5443 exception!) 5444 5445 * ic/m68k/m68k-misc-auto.sh: The slow-executor fetch macros now call 5446 the fetch insns with the PC to fetch from. 5447 5448 * ic/m68k/m68k-misc.c (tme_m68k_rte_finish): No longer do anything 5449 with the sequence at all, just redispatch it. 5450 (tme_m68k_sequence_fill): Now set the sequence next-transfer to one, 5451 to force a restart in case later code doesn't. 5452 (tme_m68k_insn_buffer_xfer): The insn buffer is kept in host byte 5453 order, not big-endian byte order. 5454 5455 * libtme/threads-sjlj.c: No longer track and relock a mutex that was 5456 held when tme_sjlj_cond_wait_yield was called; the thread itself will 5457 relock the mutex when it is restarted. 5458 5459 * machine/sun2/Makefile.am: Now build and link against the Multibus 5460 and BSD libraries. 5461 5462 * machine/sun2/sun2-test.c (tme_memdup): Added. 5463 (connect_elements): Now start the new convention of initializing the 5464 new-connections lists to NULL and letting the new-connections 5465 functions add elements incrementally. 5466 (main): Now create the ec0 and bpf0 elements and add them to the 5467 machine. 5468 5469 * tme/common.h: Added a macro for tme_dup and a prototype for 5470 tme_memdup. 5471 5472 * tme/connection.h: Now define TME_CONNECTION_ETHERNET. 5473 5474 * tme/threads.h: Fixed a bug where the tme_thread_write macro was 5475 defined to be the read syscall. 5476 5477Tue Apr 29 20:28:05 2003 Matthew Fredette <fredette@alum.mit.edu> 5478 5479 * AUTHORS: 5480 * COPYING: 5481 * NEWS: 5482 * README: Added. 5483 5484 * generic/bus-device.c generic/bus-el.c host/posix/posix-serial.c 5485 ic/z8530.c ic/m68k/m68k-misc.c machine/sun2/sun2-mainbus.c: 5486 5487 In all connections_new functions, add the new connection 5488 possibilities to the list rooted at *_conns, instead of always 5489 replacing the list. 5490 5491 * generic/bus-el.c host/posix/posix-memory.c ic/am9513.c 5492 ic/m68k/m68k-execute.c ic/m68k/m68k-insns-auto.sh 5493 ic/m68k/m68k-insns.c machine/sun2/sun2-mainbus.c: 5494 5495 Changes to silence -Wuninitialized. 5496 5497 * generic/serial.c: 5498 * tme/generic/serial.h: Removed all instances of gen- in comments. 5499 5500 * host/posix/posix-serial.c (_tme_posix_serial_th_reader): Fixed bugs 5501 in scanning the input for various escape-like sequences, especially 5502 for the escaped break signal. 5503 5504 * host/posix/posix-serial.c (_tme_posix_serial_th_reader): Simplified 5505 the code that decides to call out that we are readable. 5506 (_tme_posix_serial_ctrl): Always try to call out reads if the 5507 connection says it's readable, even if we already knew that. 5508 (_tme_posix_serial_read): Fixed a bug where we would clear everything 5509 *except* TME_SERIAL_CTRL_OK_READ, instead of clearing only that bit. 5510 (tme_host_posix_serial_new): Return EINVAL on bad arguments. 5511 5512 * ic/Makefile.am: Now define DIST_SUBDIRS. 5513 5514 * ic/z8530.c (_tme_z8530_callout): Fixed a bug where we would use an 5515 uninitialized chan variable to find WR9, which actually only exists in 5516 channel A anyways. 5517 (_tme_z8530_ctrl): Now always try to call out reads if the connection 5518 says it's readable. 5519 5520 * libtme/threads-sjlj.c: Wrap all of the rwlock operations in 5521 !TME_NO_DEBUG_LOCKS. 5522 (tme_sjlj_threads_run): Changes to silence -Wuninitialized. 5523 5524 * tme/Makefile.am: 5525 * tme/generic/Makefile.am: Now install roughly the correct files into 5526 the correct place. 5527 5528 * tme/atomics.h: Fixed a bug where TME_ATOMIC_POINTER_TYPE was adding 5529 an extra *. 5530 5531 * tme/element.h: Fixed bugs in the TME_NO_LOG versions of TME_LOG_X 5532 and TME_LOG_FINISH. 5533 5534Tue Apr 29 03:24:17 2003 Matthew Fredette <fredette@alum.mit.edu> 5535 5536 * TODO: 5537 * machine/sun2/sun2-test.c: Updated. 5538 5539 * generic/bus-device.c: Support the new generic bus signal interface. 5540 (tme_bus_device_connection_score): 5541 (tme_bus_device_connection_make): 5542 (tme_bus_device_connection_break): These are now public. 5543 5544 * generic/bus-el.c: Added support for the new generic bus signal 5545 interface. 5546 (_tme_bus_line_raise): Removed. 5547 (_tme_bus_signal): 5548 (_tme_bus_intack): Added. 5549 5550 * generic/serial.c: Removed all uses of TME_ATOMIC. 5551 (tme_serial_buffer_copyout): Fixed a bug where we would overwrite 5552 data_flags with -1 early, resulting in our returning no data. 5553 5554 * host/posix/posix-serial.c: Too much work to go into detail. 5555 Everything is at least sketched out. 5556 5557 * ic/am9513.c (_tme_am9513_callout): 5558 (_tme_am9513_th_timer): Added. 5559 (_tme_am9513_bus_cycle): Now properly handle the Clear Toggle Output 5560 command, and log it correctly. Lock the new mutex on entry, call 5561 _tme_am9513_callout if needed before exit, and unlock the mutex on 5562 exit. 5563 (tme_ic_am9513_new): Start the new timer thread. 5564 5565 * ic/z8530.c: Too many changes to go into detail. Highlights include 5566 a real bus cycle handler, real channels, real serial connections, real 5567 threads. Everything seems to be at least sketched out. 5568 5569 * ic/z8530reg.h: Added. 5570 5571 * ic/m68k/m68k-execute.c: Fixed a bug where we were using the return 5572 value of tme_mutex_trylock as a truth value. 5573 5574 * ic/m68k/m68k-misc.c: Changed to support the new generic bus signal 5575 interface and the new m68k bus interrupt interface. 5576 5577 * libtme/threads-sjlj.c (tme_sjlj_threads_run): Fixed a bug where we 5578 wouldn't lock the mutex before returning from a condition wait. Fixed 5579 a bug where we would block in select(2) instead of calling it with a 5580 zero timeout. 5581 (tme_sjlj_cond_wait_yield): Remember the mutex the thread had locked 5582 so it can be relocked when the thread resumes. 5583 (tme_sjlj_select_yield): Fixed bugs where we would treat the nfds 5584 argument as the maximum fd, instead of the maximum fd plus one. Fixed 5585 a bug where we couldn't handle NULL descriptor sets. 5586 (tme_sjlj_read_yield): 5587 (tme_sjlj_write_yield): 5588 (tme_sjlj_read_yield): 5589 (tme_sjlj_rwlock_init): 5590 (tme_sjlj_rwlock_lock): 5591 (tme_sjlj_rwlock_unlock): Added. 5592 5593 * machine/sun2/sun2-impl.h: Now track the interrupts asserted in the 5594 system, and the last ipl asserted to the CPU. 5595 5596 * machine/sun2/sun2-mainbus.c (_tme_sun2_line_reset): 5597 (_tme_sun2_line_halt): 5598 (_tme_sun2_line_interrupt): Removed. 5599 (_tme_sun2_bus_signal): 5600 (_tme_sun2_bus_intack): Added. 5601 (_tme_sun2_power): Use the generic bus signal interface to reset 5602 everything. 5603 (tme_machine_sun2_clock_new): Store how the Am9513 output pins are 5604 connected to bus interrupt lines. 5605 5606 * machine/sun2/sun2-mmu.c (_tme_sun2_multibus_fault_handler): Added a 5607 hack to avoid an mbmem bus error when accessed through virtual 5608 0xffffffff, which apparently happens in the PROM NMI routine when it 5609 polls the keyboard, even if it didn't probe a keyboard. 5610 5611 * tme/element.h: Fixed various const to _tme_const. 5612 5613 * tme/threads.h: Redid the setjmp/longjmp rwlock operations. Added 5614 various new function prototypes and macros. 5615 5616 * tme/generic/bus-device.h: Support the new generic bus signal 5617 interface. The tme_bus_device_connection_score, 5618 tme_bus_device_connection_make, and tme_bus_device_connection_break 5619 functions are now public. Fixed a const to _tme_const. 5620 5621 * tme/generic/bus.h: Added the new generic bus signal and interrupt 5622 acknowledge interfaces. Fixed various const to _tme_const. 5623 5624 * tme/generic/serial.h: Now define TME_SERIAL_CTRL_OK_READ. Removed 5625 the write method from a serial connection. All data transfer happens 5626 with reads, with control signals to indicate when reads are OK. 5627 Removed the TME_ATOMIC use in struct tme_serial_buffer. 5628 (tme_serial_buffer_is_empty): 5629 (tme_serial_buffer_is_full): Added. 5630 5631 * tme/ic/am9513.h: struct tme_am9513_socket now holds the basic clock 5632 provided to the chip, and a mapping of its output pins to bus signals. 5633 Fixed a const to _tme_const. 5634 5635 * tme/ic/m68k.h: Now define some m68k IPL constant macros. Add the 5636 new m68k bus interrupt method. Fixed various const to _tme_const. 5637 5638 * tme/ic/z8530.h: Made the channel letters lowercase in structure 5639 member names. Fixed a const to _tme_const. 5640 5641Sat Apr 26 21:46:16 2003 Matthew Fredette <fredette@alum.mit.edu> 5642 5643 * Makefile.am TODO configure.in generic/Makefile.am 5644 generic/bus-device.c generic/bus-el.c generic/bus.c generic/serial.c 5645 host/posix/posix-memory.c host/posix/posix-serial.c ic/am9513.c 5646 ic/z8530.c ic/i386/i386-decode.c ic/i386/i386-misc-auto-make.sh 5647 ic/i386/i386-opmaps-make.sh ic/i386/i386-save.c 5648 ic/i386/i386-uinsns-auto-make.sh ic/i386/i386-uinsns.c 5649 ic/i386/i386.h tme/generic/Makefile.am tme/generic/bus-device.h 5650 tme/generic/bus.h tme/generic/ic.h tme/generic/serial.h 5651 tme/ic/am9513.h tme/ic/z8530.h: 5652 5653 Added. 5654 5655 * bus/Makefile.am host/posix/Makefile.am ic/m68k/Makefile.am 5656 machine/Makefile.am machine/sun/Makefile.am machine/sun2/Makefile.am 5657 machine/sun2/sun2-test.c: 5658 5659 Updated. 5660 5661 * bus/bus-device.c bus/bus.c tme/bus-device.h tme/bus.h tme/ic.h: 5662 5663 Removed. 5664 5665 * host/posix/memory.c: Renamed to posix-memory.c. 5666 5667 * ic/m68k/m68k-execute.c: Under _TME_M68K_EXECUTE_FAST, at the 5668 beginning of each instruction we do have to check if our ITLB has been 5669 invalidated, as it might have been by some random (control) memory 5670 cycle we just did. 5671 Fixed bugs in the predecrement and postincrement EA handlers. 5672 5673 * ic/m68k/m68k-impl.h: 5674 * machine/sun2/sun2-impl.h: Now include <tme/generic/ic.h>. 5675 5676 * ic/m68k/m68k-impl.h: Added support for logging. 5677 5678 * ic/m68k/m68k-insns-auto.sh: Fixed a serious movem bug where we would 5679 start at bit 1 in the mask, and not bit 0. 5680 In all memory transfer functions, log the transfer. Made the bus 5681 cycle functions "work correctly". Fixed bugs in the generated divide 5682 instructions. 5683 5684 * ic/m68k/m68k-insns.c (tme_m68k_swap): Fixed a bug where this 5685 wouldn't work on big-endian systems. 5686 (tme_m68k_link): 5687 (tme_m68k_unlk): Fixed serious bugs where we simply didn't do what 5688 these instructions are supposed to do. 5689 5690 * ic/m68k/m68k-iset.txt: On the 68010 and up, the move_from_sr and 5691 move_from_ccr instructions don't read memory before writing it. Fixed 5692 bugs in the encoding of the register bit-shifting with a register 5693 count instructions. 5694 5695 * ic/m68k/m68k-misc.c (tme_m68k_idle): Use the renamed 5696 tme_cond_wait_yield function. 5697 (tme_m68k_new): Store the element in the IC. 5698 (tme_m68k_go_slow): Use the TME_M68K_TLB_OK_FAST_READ to check for a 5699 bad TLB entry. 5700 (tme_m68k_exception_process): Don't insist on there being exceptions 5701 to process. CPU-specific exception processors may handle them all, 5702 yet still use this function to redispatch. 5703 (_tme_m68k_execute_hook): Added. 5704 5705 * libtme/threads-sjlj.c (_tme_sjlj_then): 5706 (_tme_sjlj_timeout): 5707 (tme_sjlj_sleep_yield): 5708 (tme_sjlj_select_yield): Added. 5709 (tme_sjlj_threads_run): Cleaned up the threads dispatcher to support 5710 threads waiting on classic select(2) fd sets, 5711 (tme_sjlj_cond_wait_yield): Renamed from tme_sjlj_cond_wait. 5712 (tme_sjlj_sleep): This function no longer yields. 5713 5714 * machine/sun/sun-mmu.c: Added some logging. 5715 Disabled the explicit SEGINV support, for now. It appears that the 5716 hardware MMU doesn't have a notion of an invalid PMEG. Now call the 5717 post-MMU TLB fillers with the PTE struct and the virtual address. 5718 5719 * machine/sun2/sun2-control.c (_tme_sun2_control_cycle_handler): Don't 5720 bother to fill the segmap register unless this is a read. 5721 5722 * machine/sun2/sun2-impl.h: Now include <tme/generic/bus.h>. Added 5723 some support for logging. 5724 5725 * machine/sun2/sun2-mainbus.c: Added some support for logging. 5726 (tme_machine_sun2_clock_new): 5727 (tme_machine_sun2_zs_new): Added. 5728 5729 * machine/sun2/sun2-mmu.c: Too much to go into detail. Highlights: 5730 Added some logging support. 5731 Made the bus error behavior more correct. On the sun2, obio and obmem 5732 don't generate bus errors. Now the post-MMU TLB filler takes the 5733 original PTE entry and the original virtual address. 5734 5735 * tme/connection.h: Now define TME_CONNECTION_SERIAL. 5736 5737 * tme/element.h: Added logging support. 5738 5739 * tme/ic.h: Now include <tme/generic/bus.h> 5740 5741 * tme/threads.h: Defined more of the tme threads API. 5742 5743 * tme/ic/m68k.h: Now include <tme/generic/bus.h>. 5744 5745 * tme/machine/sun.h: Added support for logging. 5746 Changed the interface to pass the whole PTE struct to the post-MMU TLB 5747 fillers. 5748 5749Sat Apr 26 14:44:07 2003 Matthew Fredette <fredette@alum.mit.edu> 5750 5751 * bus/bus.c (tme_bus_cycle_xfer): Fixed a bug where we used 5752 cycle_writer to get the reader's port size. When indexing bus router 5753 arrays, we have to subtract out the participant's least port lane, 5754 since the arrays don't include information for lanes not connected to 5755 the participant. 5756 5757Wed Apr 23 19:31:01 2003 Matthew Fredette <fredette@alum.mit.edu> 5758 5759 * bus/Makefile.am bus/bus-device.c bus/bus.c host/Makefile.am 5760 host/posix/Makefile.am host/posix/memory.c ic/Makefile.am 5761 ic/m68k/m68k-impl.h libtme/Makefile.am libtme/threads-sjlj.c 5762 machine/sun/Makefile.am machine/sun/sun-mmu.c 5763 machine/sun2/Makefile.am machine/sun2/sun2-control.c 5764 machine/sun2/sun2-impl.h machine/sun2/sun2-mainbus.c 5765 machine/sun2/sun2-mmu.c machine/sun2/sun2-test.c tme/Makefile.am 5766 tme/atomics.h tme/bus-device.h tme/bus.h tme/common.h 5767 tme/connection.h tme/element.h tme/ic.h tme/threads.h 5768 tme/ic/Makefile.am tme/ic/m68k.h tme/machine/Makefile.am 5769 tme/machine/sun.h: 5770 5771 Added. 5772 5773 * ic/m68k/m68010.c (_tme_m68010_exception): 5774 (_tme_m68010_rte): Added. 5775 5776 * ic/m68k/m68k-bus-auto.sh: Now generates the combined input/output 5777 bus routers. 5778 5779 * ic/m68k/m68k-execute.c: 5780 * ic/m68k/m68k-insns.c: 5781 * ic/m68k/m68k-misc.c: Although I hate doing this, "too many changes 5782 to list." 5783 5784 * ic/m68k/m68k-insns-auto.sh: Some minor copyright and cosmetic fixes. 5785 Updated the bus cycle functions to support the latest generic bus 5786 cycle idea. 5787 5788 * ic/m68k/m68k-iset-expand.pl: When the EA is an immediate, just emit 5789 the immediate information and skip the EA information - we don't want 5790 to use the EA path in this case. 5791 5792 * ic/m68k/m68k-iset.txt: moveq is now its own insn. 5793 5794 * ic/m68k/m68k-misc-auto.sh: Copyright sweep. 5795 5796 * ic/m68k/m68k-opmap-make.pl: Fixed some random bugs, and correctly 5797 handle the case where EA and immediate operand must be undefined for a 5798 pattern, to avoid using the EA and immediate operand in any root 5799 entry. 5800 5801 * ic/m68k/m68k.h: Removed. 5802 5803Sun Apr 20 21:33:05 2003 Matthew Fredette <fredette@alum.mit.edu> 5804 5805 * ic/m68k/m68k-bus-auto.sh: Added. 5806 5807Fri Apr 18 04:56:36 2003 Matthew Fredette <fredette@alum.mit.edu> 5808 5809 * ic/m68k/m68k-insns-auto.sh: Added support for generating the moveq32 5810 insn. Cleaned up and fixed some bugs in the bus cycle functions. 5811 5812 * ic/m68k/m68k-misc-auto.sh: Cleaned up the set of registers that we 5813 define. Added better locking support to the instruction fetch macros. 5814 5815Tue Apr 15 13:32:37 2003 Matthew Fredette <fredette@alum.mit.edu> 5816 5817 * ic/m68k/m68k-insns-auto.sh: Unfortunately, too much work to list in 5818 detail. Improved the arithmetic function flag-setting code to compile 5819 well on i386 with gcc -O2. Added many special-purpose memory read and 5820 write functions, and finally introduced the general bus-cycle read and 5821 write functions. Added many new instructions, including multiply and 5822 divide. 5823 5824Sat Apr 05 18:47:38 2003 Matthew Fredette <fredette@alum.mit.edu> 5825 5826 * machine/Makefile.am: Added. 5827 5828Tue Apr 01 20:13:40 2003 Matthew Fredette <fredette@alum.mit.edu> 5829 5830 * ic/m68k/Makefile.am: Build decoders for the 68000, 68010, and 68020. 5831 * ic/m68k/m68k-iset-expand.pl: Added a very basic preprocessor to 5832 support generating different instruction sets for different CPUs. Now 5833 whenever an instruction wants the EA, its operand is eax.32 even if 5834 the known EA is address register indirect. 5835 5836 * ic/m68k/m68k-iset.txt: This should be the complete integer 5837 instruction set for the 68000, 68010, 68020, and 68030. 5838 5839 * ic/m68k/m68k-opmap-make.pl: Added comments, and reworked to support 5840 compiling instruction sets for different CPUs together, reusing 5841 submaps and opcode maps whenever possible. 5842 5843 * ic/m68k/m68k.h: Before the -impl.h split. 5844 5845Sun Mar 30 22:04:15 2003 Matthew Fredette <fredette@alum.mit.edu> 5846 5847 * ic/m68k/Makefile.am ic/m68k/m68010.c ic/m68k/m68k-execute.c 5848 ic/m68k/m68k-insns-auto.sh ic/m68k/m68k-insns.c 5849 ic/m68k/m68k-iset-expand.pl ic/m68k/m68k-iset.txt 5850 ic/m68k/m68k-misc-auto.sh ic/m68k/m68k-misc.c 5851 ic/m68k/m68k-opmap-make.pl ic/m68k/m68k.h: 5852 5853 Added. 5854