|
|
1.1.1.5 ! root 1: Sun Jun 06 20:52:27 2010 Matthew Fredette <[email protected]> ! 2: ! 3: * Release 0.8 out. ! 4: ! 5: Sat Jun 05 19:56:37 2010 Matt Fredette <[email protected]> ! 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: ! 223: Sat Jun 05 14:54:10 2010 Matt Fredette <[email protected]> ! 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: ! 303: Sun Mar 07 16:29:27 2010 Matt Fredette <[email protected]> ! 304: ! 305: * tme/recode.h: Define TME_RECODE_REGINFO_TYPE_TEMPORARY. ! 306: ! 307: Sun Feb 21 15:49:42 2010 Matt Fredette <[email protected]> ! 308: ! 309: * TODO: Updated. ! 310: ! 311: Sat Feb 20 22:01:40 2010 Matt Fredette <[email protected]> ! 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: ! 337: Sat Feb 20 18:35:47 2010 Matt Fredette <[email protected]> ! 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: ! 347: Thu Feb 18 02:01:33 2010 Matt Fredette <[email protected]> ! 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: ! 358: Mon Feb 15 22:23:15 2010 Matt Fredette <[email protected]> ! 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: ! 417: Mon Feb 15 16:57:13 2010 Matt Fredette <[email protected]> ! 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: ! 495: Mon Feb 15 14:58:58 2010 Matt Fredette <[email protected]> ! 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: ! 511: Sun Feb 14 20:17:12 2010 Matt Fredette <[email protected]> ! 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: ! 550: Sun Feb 14 18:08:02 2010 Matt Fredette <[email protected]> ! 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: ! 764: Sun Feb 14 00:48:04 2010 Matt Fredette <[email protected]> ! 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: ! 781: Thu Feb 11 00:15:55 2010 Matt Fredette <[email protected]> ! 782: ! 783: * tme/recode.h: Define TME_RECODE_OPERAND_UNDEF. ! 784: ! 785: Wed Feb 10 00:34:26 2010 Matt Fredette <[email protected]> ! 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: ! 791: Tue Feb 09 01:27:56 2010 Matt Fredette <[email protected]> ! 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: ! 799: Sun Feb 07 17:32:01 2010 Matt Fredette <[email protected]> ! 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: ! 875: Sun Feb 07 16:51:53 2010 Matt Fredette <[email protected]> ! 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: ! 911: Fri Feb 05 01:06:01 2010 Matt Fredette <[email protected]> ! 912: ! 913: * ic/sparc/Makefile.am: Added sparc-rc-chain.c to EXTRA_DIST. ! 914: * ic/sparc/sparc-rc-chain.c: Added. ! 915: ! 916: Fri Jan 15 03:05:59 2010 Matt Fredette <[email protected]> ! 917: ! 918: * libtme/host/x86/rc-x86-chain.c: ! 919: * libtme/host/x86/rc-x86-tlb.c: Added. ! 920: ! 921: Sun Nov 08 17:35:49 2009 Matt Fredette <[email protected]> ! 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: ! 1033: Tue Oct 27 00:45:16 2009 Matt Fredette <[email protected]> ! 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: ! 1044: Tue Oct 13 22:40:10 2009 Matt Fredette <[email protected]> ! 1045: ! 1046: * tools/tme-log-binary-dump.pl: ! 1047: * tools/tme-log-binary-udiff.pl: ! 1048: * tools/tme-log-binary.pl: Added. ! 1049: ! 1050: Sat Sep 26 14:55:25 2009 Matt Fredette <[email protected]> ! 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: ! 1117: Tue Sep 08 23:15:20 2009 Matt Fredette <[email protected]> ! 1118: ! 1119: * machine/sun4u/Makefile.am: ! 1120: * machine/sun4u/SUN-ULTRA-1: Added. ! 1121: ! 1122: Mon Sep 07 15:42:24 2009 Matt Fredette <[email protected]> ! 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: ! 1177: Tue Sep 01 00:54:01 2009 Matt Fredette <[email protected]> ! 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: ! 1251: Mon Aug 31 02:23:41 2009 Matt Fredette <[email protected]> ! 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: ! 1283: Mon Aug 31 01:58:38 2009 Matt Fredette <[email protected]> ! 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: ! 1492: Sun Aug 30 17:06:38 2009 Matt Fredette <[email protected]> ! 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: ! 1588: Sun Aug 30 14:42:15 2009 Matt Fredette <[email protected]> ! 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: ! 1746: Sat Aug 29 21:48:57 2009 Matt Fredette <[email protected]> ! 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: ! 1793: Sat Aug 29 19:47:52 2009 Matt Fredette <[email protected]> ! 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: ! 1976: Sat Aug 29 01:35:17 2009 Matt Fredette <[email protected]> ! 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: ! 1992: Fri Aug 28 01:50:09 2009 Matt Fredette <[email protected]> ! 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: ! 2008: Thu Aug 20 22:45:50 2009 Matt Fredette <[email protected]> ! 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: ! 2038: Thu Jun 18 01:16:53 2009 Matt Fredette <[email protected]> ! 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: ! 2131: Tue Jun 16 00:31:33 2009 Matt Fredette <[email protected]> ! 2132: ! 2133: * ic/Makefile.am: Added stp22xx, ncr89c105, stp2024, and ad184x. ! 2134: ! 2135: Tue May 05 22:12:56 2009 Matt Fredette <[email protected]> ! 2136: ! 2137: * ic/stp22xx/stp222x-iommu.c: ! 2138: * ic/stp22xx/stp222x-stc.c: Added. ! 2139: ! 2140: Sat Feb 28 16:48:11 2009 Matt Fredette <[email protected]> ! 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: ! 2152: Fri Oct 03 00:48:18 2008 Matt Fredette <[email protected]> ! 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: ! 2161: Wed Sep 24 23:04:32 2008 Matt Fredette <[email protected]> ! 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: ! 2182: Wed Jul 02 00:01:39 2008 Matt Fredette <[email protected]> ! 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: ! 2223: Tue Jul 01 02:02:57 2008 Matt Fredette <[email protected]> ! 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: ! 2300: Mon Jun 30 22:42:10 2008 Matt Fredette <[email protected]> ! 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: ! 2306: Sun Jun 01 23:25:11 2008 Matt Fredette <[email protected]> ! 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: 1.1.1.4 root 2320: Thu Sep 06 23:35:41 2007 Matthew Fredette <[email protected]> 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: 2341: Sun Aug 26 14:02:04 2007 Matthew Fredette <[email protected]> 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: 2350: Sat Aug 25 23:12:31 2007 Matthew Fredette <[email protected]> 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 [email protected]. 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: [email protected] 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: [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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: 2525: Sat Aug 25 19:52:23 2007 Matthew Fredette <[email protected]> 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: 2531: Fri Aug 24 01:21:50 2007 Matthew Fredette <[email protected]> 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: 2594: Thu Mar 29 01:56:40 2007 Matthew Fredette <[email protected]> 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: 2680: Sun Mar 25 21:18:50 2007 Matthew Fredette <[email protected]> 2681: 2682: * dist/softfloat/softfloat/bits64/softfloat.c (float128_rem): Added a 2683: cast to get better type agreement. From [email protected] 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: 2693: Sat Mar 03 15:36:15 2007 Matthew Fredette <[email protected]> 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: 2702: Wed Feb 21 01:52:28 2007 Matthew Fredette <[email protected]> 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 [email protected] 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 [email protected] in NetBSD PR 2711: pkg/34113. 2712: 2713: * host/gtk/gtk-mouse.c: Changed some types to get better type 2714: agreement. From [email protected] 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 [email protected] 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: [email protected] 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: [email protected] 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 [email protected] in NetBSD PR 2745: pkg/34113. 2746: (tme_sun_si): Changed a type to get better type agreement. From 2747: [email protected] 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: 2752: Fri Feb 16 02:50:23 2007 Matthew Fredette <[email protected]> 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: 2789: Thu Feb 15 02:15:41 2007 Matthew Fredette <[email protected]> 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: 2850: Mon Feb 12 23:50:36 2007 Matthew Fredette <[email protected]> 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: 2886: Tue Jan 30 22:57:08 2007 Matthew Fredette <[email protected]> 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: 2897: Sun Jan 21 15:45:01 2007 Matthew Fredette <[email protected]> 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: 2909: Fri Jan 19 01:01:07 2007 Matthew Fredette <[email protected]> 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: 2938: Thu Jan 18 02:15:49 2007 Matthew Fredette <[email protected]> 2939: 2940: * tme/common.h: Added definitions of __tme_predict_true() and 2941: __tme_predict_false() for gcc>=2.96. 2942: 2943: Sun Jan 14 16:53:04 2007 Matthew Fredette <[email protected]> 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: 2982: Mon Jan 08 00:59:04 2007 Matthew Fredette <[email protected]> 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: 3101: Sun Nov 26 16:37:55 2006 Matthew Fredette <[email protected]> 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: 3167: Thu Nov 16 02:54:40 2006 Matthew Fredette <[email protected]> 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: 3357: Sat Sep 30 13:48:38 2006 Matthew Fredette <[email protected]> 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: 3442: Sun Dec 04 22:53:37 2005 Matthew Fredette <[email protected]> 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: 3460: Sat Jun 11 13:47:23 2005 Matthew Fredette <[email protected]> 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: 1.1.1.3 root 3482: Sun May 15 01:24:11 2005 Matthew Fredette <[email protected]> 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: 3491: Sat May 14 22:28:29 2005 Matthew Fredette <[email protected]> 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: 3524: Sat May 14 19:18:42 2005 Matthew Fredette <[email protected]> 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: 3552: Sat May 14 01:43:33 2005 Matthew Fredette <[email protected]> 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: 3563: Wed May 11 00:15:42 2005 Matthew Fredette <[email protected]> 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: 3585: Tue May 10 11:15:26 2005 Matthew Fredette <[email protected]> 3586: 3587: * machine/sun3/SUN3-CARRERA: Disable obie0 by default. 3588: 3589: Tue May 10 00:38:19 2005 Matthew Fredette <[email protected]> 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: 3601: Mon May 09 02:01:02 2005 Matthew Fredette <[email protected]> 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: 3607: Mon May 09 01:59:03 2005 Matthew Fredette <[email protected]> 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: 3622: Sat Apr 30 15:22:25 2005 Matthew Fredette <[email protected]> 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: 3707: Wed Mar 23 12:42:56 2005 Matthew Fredette <[email protected]> 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: 3782: Tue Mar 15 02:56:58 2005 Matthew Fredette <[email protected]> 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: 3798: Thu Mar 10 13:29:42 2005 Matthew Fredette <[email protected]> 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: 3847: Fri Feb 18 04:12:55 2005 Matthew Fredette <[email protected]> 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: 3984: Thu Feb 17 13:42:44 2005 Matthew Fredette <[email protected]> 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: 4080: Thu Feb 17 02:14:57 2005 Matthew Fredette <[email protected]> 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: 4094: Wed Jan 26 13:13:29 2005 Matthew Fredette <[email protected]> 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: 4115: Sun Jan 16 01:24:37 2005 Matthew Fredette <[email protected]> 4116: 4117: * ic/m68k/m68k-execute.c (_TME_M68K_EXECUTE_NAME): Added support for 4118: executing floating-point general instructions. 4119: 4120: Fri Jan 14 12:27:41 2005 Matthew Fredette <[email protected]> 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: 4166: Fri Jan 14 11:44:18 2005 Matthew Fredette <[email protected]> 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: 4172: Thu Aug 19 12:27:24 2004 Matthew Fredette <[email protected]> 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: 4245: Wed Aug 11 12:30:28 2004 Matthew Fredette <[email protected]> 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: 4333: Mon May 17 11:57:01 2004 Matthew Fredette <[email protected]> 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: 4341: Fri May 14 00:56:19 2004 Matthew Fredette <[email protected]> 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: 4348: Tue May 11 12:03:36 2004 Matthew Fredette <[email protected]> 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: 4356: Tue May 04 01:17:27 2004 Matthew Fredette <[email protected]> 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: 4365: Fri Apr 30 12:11:36 2004 Matthew Fredette <[email protected]> 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: 4410: Fri Apr 30 01:46:01 2004 Matthew Fredette <[email protected]> 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: 4429: Sun Mar 28 23:38:28 2004 Matthew Fredette <[email protected]> 4430: 4431: * generic/bus-device-auto.sh: Added. 4432: 4433: Fri Feb 20 12:42:11 2004 Matthew Fredette <[email protected]> 4434: 4435: * ic/m68k/m68k-execute.c [_TME_M68K_EXECUTE_FAST]: Make the fast 4436: emulator load pointers const. 4437: 4438: Fri Jan 09 03:42:48 2004 Matthew Fredette <[email protected]> 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: 1.1.1.2 root 4475: Wed Oct 29 02:03:26 2003 Matthew Fredette <[email protected].> 4476: 4477: * Release 0.2 out. 1.1 root 4478: 1.1.1.2 root 4479: * host/gtk/gtk-screen.c: Some quick changes for GTK 2 compatibility. 1.1 root 4480: 1.1.1.2 root 4481: Sat Oct 25 17:08:02 2003 Matthew Fredette <[email protected]> 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: 4490: Thu Oct 16 03:02:11 2003 Matthew Fredette <[email protected]> 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: 4521: Mon Sep 29 11:42:56 2003 Matthew Fredette <[email protected]> 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: 4527: Wed Sep 10 01:49:22 2003 Matthew Fredette <[email protected]> 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: 4533: Mon Sep 01 14:58:57 2003 Matthew Fredette <[email protected]> 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: 4581: Sat Aug 23 13:50:34 2003 Matthew Fredette <[email protected]> 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: 4608: Fri Aug 22 16:39:30 2003 Matthew Fredette <[email protected]> 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: 4613: Tue Aug 12 23:00:40 2003 Matthew Fredette <[email protected]> 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: 4626: Fri Aug 08 13:33:45 2003 Matthew Fredette <[email protected]> 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: 4632: Thu Aug 07 22:14:46 2003 Matthew Fredette <[email protected]> 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: 4697: Tue Aug 05 03:41:31 2003 Matthew Fredette <[email protected]> 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: 4772: Thu Jul 31 19:03:16 2003 Matthew Fredette <[email protected]> 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: 4780: Thu Jul 31 01:47:46 2003 Matthew Fredette <[email protected]> 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: 4819: Tue Jul 29 18:33:14 2003 Matthew Fredette <[email protected]> 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: 4921: Tue Jul 22 18:30:31 2003 Matthew Fredette <[email protected]> 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: 4933: Fri Jun 27 21:30:37 2003 Matthew Fredette <[email protected]> 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: 5031: Fri Jun 27 01:37:57 2003 Matthew Fredette <[email protected]> 5032: 5033: * generic/fb-xlat-auto.sh: Added. 5034: 5035: Thu Jun 26 13:16:12 2003 Matthew Fredette <[email protected]> 5036: 5037: * tme/generic/ic.h: Fixed grammar in a comment. 5038: 5039: Sun May 18 02:40:56 2003 Matthew Fredette <[email protected]> 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: 5070: Sat May 17 20:34:07 2003 Matthew Fredette <[email protected]> 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. 1.1 root 5079: 5080: Fri May 16 21:48:16 2003 Matthew Fredette <[email protected]> 5081: 1.1.1.2 root 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>. 1.1 root 5110: 5111: Fri May 16 17:50:17 2003 Matthew Fredette <[email protected]> 5112: 1.1.1.2 root 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. 1.1 root 5122: 5123: Thu May 15 15:52:08 2003 Matthew Fredette <[email protected]> 5124: 1.1.1.2 root 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: 5129: Sat May 10 15:41:23 2003 Matthew Fredette <[email protected]> 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: 1.1 root 5153: * tme/threads.h: Renamed the memory-access locking functions to be 1.1.1.2 root 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. 1.1 root 5161: 5162: Sat May 10 00:31:32 2003 Matthew Fredette <[email protected]> 5163: 1.1.1.2 root 5164: * ic/m68k/m68k-insns-auto.sh: Overhauled the shift instructions to not 5165: use loops. 5166: 5167: Fri May 09 17:45:06 2003 Matthew Fredette <[email protected]> 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. 1.1 root 5191: 1.1.1.2 root 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. 1.1 root 5196: 1.1.1.2 root 5197: Fri May 09 14:36:16 2003 Matthew Fredette <[email protected]> 1.1 root 5198: 1.1.1.2 root 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: 5226: Thu May 08 23:37:55 2003 Matthew Fredette <[email protected]> 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: 5233: Thu May 08 19:22:10 2003 Matthew Fredette <[email protected]> 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 *. 1.1 root 5255: (tme_m68k_sequence_empty): 1.1.1.2 root 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. 1.1 root 5263: 5264: Thu May 08 13:35:43 2003 Matthew Fredette <[email protected]> 5265: 1.1.1.2 root 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. 1.1 root 5277: 1.1.1.2 root 5278: * ic/m68k/m68k-verify.c: Added. 1.1 root 5279: 1.1.1.2 root 5280: Wed May 07 02:37:05 2003 Matthew Fredette <[email protected]> 5281: 5282: * generic/bus-el.c (_tme_bus_connections_new): Store the final bus 5283: interrupt signal number, not the raw ipl. 1.1 root 5284: 5285: * ic/z8530.c: Although I hate doing this, too many changes to go into 1.1.1.2 root 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. 1.1 root 5298: 1.1.1.2 root 5299: Mon May 05 23:20:11 2003 Matthew Fredette <[email protected]> 1.1 root 5300: 1.1.1.2 root 5301: * TODO: Updated. 1.1 root 5302: 1.1.1.2 root 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. 1.1 root 5306: 1.1.1.2 root 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. 1.1 root 5311: 1.1.1.2 root 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. 1.1 root 5316: 1.1.1.2 root 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. 1.1 root 5320: 1.1.1.2 root 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. 1.1 root 5324: 1.1.1.2 root 5325: * machine/sun/sun-mmu.c (tme_sun_mmu_tlb_fill): Support the new 5326: expansive MMU PTE protections. 1.1 root 5327: 1.1.1.2 root 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. 1.1 root 5332: 1.1.1.2 root 5333: * machine/sun2/sun2-mmu.c: Many changes to support the new full 5334: understanding of sun2 PTE protections. 1.1 root 5335: 1.1.1.2 root 5336: * tme/machine/sun.h: Expanded on the generic PTE protections, to 5337: support the more expressive sun2 protections. 1.1 root 5338: 1.1.1.2 root 5339: Sun May 04 22:46:12 2003 Matthew Fredette <[email protected]> 1.1 root 5340: 1.1.1.2 root 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. 1.1 root 5345: 1.1.1.2 root 5346: * ic/mm58167.c: Changes to silence -Wuninitialized. 1.1 root 5347: 1.1.1.2 root 5348: * ic/mm58167.c: 5349: * tme/ic/mm58167.h: Added. 1.1 root 5350: 1.1.1.2 root 5351: * ic/z8530.c: Although I hate doing this, too much work to go into 5352: detail. Did more groundwork for eventually generating interrupts. 1.1 root 5353: 1.1.1.2 root 5354: * ic/m68k/m68k-execute.c: Now wrap the execute hook call in 5355: _TME_M68K_OPW_OK. 1.1 root 5356: 1.1.1.2 root 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. 1.1 root 5363: (_tme_sun2_bus_fault_handler): 5364: (_tme_sun2_obio_fault_handler): 1.1.1.2 root 5365: (_tme_sun2_obmem_fault_handler): Added. 1.1 root 5366: (_tme_sun2_multibus_fault_handler): Now just call 1.1.1.2 root 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. 1.1 root 5373: 5374: Sat May 03 19:27:07 2003 Matthew Fredette <[email protected]> 5375: 1.1.1.2 root 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: 5393: Fri May 02 17:37:10 2003 Matthew Fredette <[email protected]> 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: 1.1 root 5417: * ic/am9513.c (_tme_am9513_counters_load): 1.1.1.2 root 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 1.1 root 5442: (which could actually update it, if recovering from a group 0 5443: exception!) 5444: 1.1.1.2 root 5445: * ic/m68k/m68k-misc-auto.sh: The slow-executor fetch macros now call 5446: the fetch insns with the PC to fetch from. 1.1 root 5447: 1.1.1.2 root 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. 1.1 root 5466: (main): Now create the ec0 and bpf0 elements and add them to the 1.1.1.2 root 5467: machine. 1.1 root 5468: 1.1.1.2 root 5469: * tme/common.h: Added a macro for tme_dup and a prototype for 5470: tme_memdup. 1.1 root 5471: 1.1.1.2 root 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. 1.1 root 5476: 5477: Tue Apr 29 20:28:05 2003 Matthew Fredette <[email protected]> 5478: 1.1.1.2 root 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: 1.1 root 5494: 1.1.1.2 root 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. 1.1 root 5506: (_tme_posix_serial_ctrl): Always try to call out reads if the 1.1.1.2 root 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. 1.1 root 5517: (_tme_z8530_ctrl): Now always try to call out reads if the connection 1.1.1.2 root 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. 1.1 root 5523: 1.1.1.2 root 5524: * tme/Makefile.am: 5525: * tme/generic/Makefile.am: Now install roughly the correct files into 5526: the correct place. 1.1 root 5527: 1.1.1.2 root 5528: * tme/atomics.h: Fixed a bug where TME_ATOMIC_POINTER_TYPE was adding 5529: an extra *. 1.1 root 5530: 1.1.1.2 root 5531: * tme/element.h: Fixed bugs in the TME_NO_LOG versions of TME_LOG_X 5532: and TME_LOG_FINISH. 5533: 5534: Tue Apr 29 03:24:17 2003 Matthew Fredette <[email protected]> 5535: 5536: * TODO: 5537: * machine/sun2/sun2-test.c: Updated. 5538: 5539: * generic/bus-device.c: Support the new generic bus signal interface. 1.1 root 5540: (tme_bus_device_connection_score): 5541: (tme_bus_device_connection_make): 1.1.1.2 root 5542: (tme_bus_device_connection_break): These are now public. 1.1 root 5543: 1.1.1.2 root 5544: * generic/bus-el.c: Added support for the new generic bus signal 5545: interface. 5546: (_tme_bus_line_raise): Removed. 1.1 root 5547: (_tme_bus_signal): 1.1.1.2 root 5548: (_tme_bus_intack): Added. 1.1 root 5549: 1.1.1.2 root 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. 1.1 root 5553: 1.1.1.2 root 5554: * host/posix/posix-serial.c: Too much work to go into detail. 5555: Everything is at least sketched out. 1.1 root 5556: 5557: * ic/am9513.c (_tme_am9513_callout): 1.1.1.2 root 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. 1.1 root 5564: 5565: * ic/z8530.c: Too many changes to go into detail. Highlights include 1.1.1.2 root 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. 1.1 root 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): 1.1.1.2 root 5591: (tme_sjlj_rwlock_unlock): Added. 1.1 root 5592: 1.1.1.2 root 5593: * machine/sun2/sun2-impl.h: Now track the interrupts asserted in the 5594: system, and the last ipl asserted to the CPU. 1.1 root 5595: 5596: * machine/sun2/sun2-mainbus.c (_tme_sun2_line_reset): 5597: (_tme_sun2_line_halt): 1.1.1.2 root 5598: (_tme_sun2_line_interrupt): Removed. 1.1 root 5599: (_tme_sun2_bus_signal): 1.1.1.2 root 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. 1.1 root 5628: (tme_serial_buffer_is_empty): 1.1.1.2 root 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: 5641: Sat Apr 26 21:46:16 2003 Matthew Fredette <[email protected]> 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: 1.1 root 5658: 1.1.1.2 root 5659: Updated. 1.1 root 5660: 1.1.1.2 root 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. 1.1 root 5686: (tme_m68k_link): 1.1.1.2 root 5687: (tme_m68k_unlk): Fixed serious bugs where we simply didn't do what 5688: these instructions are supposed to do. 1.1 root 5689: 1.1.1.2 root 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. 1.1 root 5704: 5705: * libtme/threads-sjlj.c (_tme_sjlj_then): 5706: (_tme_sjlj_timeout): 5707: (tme_sjlj_sleep_yield): 1.1.1.2 root 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. 1.1 root 5721: 1.1.1.2 root 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. 1.1 root 5726: (tme_machine_sun2_clock_new): 1.1.1.2 root 5727: (tme_machine_sun2_zs_new): Added. 1.1 root 5728: 5729: * machine/sun2/sun2-mmu.c: Too much to go into detail. Highlights: 1.1.1.2 root 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: 1.1 root 5739: * tme/ic.h: Now include <tme/generic/bus.h> 1.1.1.2 root 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. 1.1 root 5748: 5749: Sat Apr 26 14:44:07 2003 Matthew Fredette <[email protected]> 5750: 1.1.1.2 root 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: 5757: Wed Apr 23 19:31:01 2003 Matthew Fredette <[email protected]> 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: 1.1 root 5773: * ic/m68k/m68010.c (_tme_m68010_exception): 1.1.1.2 root 5774: (_tme_m68010_rte): Added. 1.1 root 5775: 1.1.1.2 root 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. 1.1 root 5802: 5803: Sun Apr 20 21:33:05 2003 Matthew Fredette <[email protected]> 5804: 1.1.1.2 root 5805: * ic/m68k/m68k-bus-auto.sh: Added. 1.1 root 5806: 5807: Fri Apr 18 04:56:36 2003 Matthew Fredette <[email protected]> 5808: 1.1.1.2 root 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. 1.1 root 5811: 1.1.1.2 root 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. 1.1 root 5814: 5815: Tue Apr 15 13:32:37 2003 Matthew Fredette <[email protected]> 5816: 1.1.1.2 root 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. 1.1 root 5823: 5824: Sat Apr 05 18:47:38 2003 Matthew Fredette <[email protected]> 5825: 1.1.1.2 root 5826: * machine/Makefile.am: Added. 1.1 root 5827: 1.1.1.2 root 5828: Tue Apr 01 20:13:40 2003 Matthew Fredette <[email protected]> 1.1 root 5829: 1.1.1.2 root 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. 1.1 root 5835: 1.1.1.2 root 5836: * ic/m68k/m68k-iset.txt: This should be the complete integer 5837: instruction set for the 68000, 68010, 68020, and 68030. 1.1 root 5838: 1.1.1.2 root 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. 1.1 root 5842: 1.1.1.2 root 5843: * ic/m68k/m68k.h: Before the -impl.h split. 1.1 root 5844: 5845: Sun Mar 30 22:04:15 2003 Matthew Fredette <[email protected]> 5846: 1.1.1.2 root 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: 1.1 root 5852: 1.1.1.2 root 5853: Added.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.